This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
How to split 40bit data types load/store?
- From: Mohamed Shafi <shafitvm at gmail dot com>
- To: GCC <gcc at gcc dot gnu dot org>
- Date: Mon, 14 Sep 2009 19:54:09 +0530
- Subject: How to split 40bit data types load/store?
Hello all,
I am doing a port for a 32bit target in GCC 4.4.0. I have to support a
40bit data (_Accum) in the port. The target has 40bit registers which
is a GPR and works as 32bit reg in other modes. The load and store for
_Accum happens in two step. The lower 32bit in one instruction and the
upper 8bit in the next instruction. I want to split the instruction
after reload. I tired to have a pattern (for load) like this:
(define_insn "fn_load_ext_sa"
[(set (unspec:SA [(match_operand:DA 0 "register_operand" "")]
UNSPEC_FN_EXT)
(match_operand:SA 1 "memory_operand" ""))]
(define_insn "fn_load_sa"
[(set (unspec:SA [(match_operand:DA 0 "register_operand" "")]
UNSPEC_FN)
(match_operand:SA 1 "memory_operand" ""))]
The above patterns works for O0. But with optimizations i am getting
ICE. It seems that GCC won't accept unspec object in destination
operand. So how can split the pattens for the load and store for these
data types?
Regards,
Shafi