This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
SUBREG problems
- To: gcc at gcc dot gnu dot org
- Subject: SUBREG problems
- From: thomas joseph <thomascanny at yahoo dot co dot nz>
- Date: Thu, 6 Sep 2001 01:57:00 +1200 (NZST)
Hi ALL
I am working for a new gcc port.I have a small
problem
with subregs. I am still to confirm whether this
problem is addressed by some body or not.
On my machine the UNITS_PER_WORD is 2 and I made
longs as 32 bits. So, when they are in registers they
need two consecutive registers. I am doing this.
ALl the opeartions on the machine are 16bit. So, I
am
splitting the long operations in to two 16 bit
operations.
The problem is with the compare and branch
operations.....
I have a test program ......
int main ()
{
register long x = 10;
if (x == 10)
return 0;
else
return 1;
}
Here the problem is when I access the low part and
high parts of op for my cmp/branch operations
the look like
insn 10 8 11 (set (cc0)
(compare (subreg:HI (reg/v:SI 53) 0)
(const_int 0 [0x0]))) 15 {cmphi_1} (nil)
(nil))
(insn 12 11 13 (set (cc0)
(compare (subreg:HI (reg/v:SI 53) 1)
(const_int 10 [0xa]))) 15 {cmphi_1} (nil)
(nil))
. When they end up in memory both subregs refer to the
low parts only. if x is at (ix -4), both refer to (ix
-4) to (ix -2) only. I do n't know where it is going
wrong.......
Do I need to add some thing in the gen_lowpart and
gen_highpart ??
Could some body point me at the right place where to
look for this problem.......
Thanks and regards,
V.Brahmaiah