From mboxrd@z Thu Jan 1 00:00:00 1970 From: thomas joseph To: gcc@gcc.gnu.org Subject: SUBREG problems Date: Wed, 05 Sep 2001 06:57:00 -0000 Message-id: <20010905135700.63960.qmail@web14708.mail.yahoo.com> X-SW-Source: 2001-09/msg00103.html 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