http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52352
--- Comment #13 from H.J. Lu <hjl.tools at gmail dot com> 2012-02-24 20:03:59 UTC --- (In reply to comment #12) > (In reply to comment #11) > > > I checked a similar fix into hjl/x32/addr32, hjl/x32/gcc-4_6-branch and > > hjl/x32/gcc-4_6-branch+mx32 branches. I also added "I" code to print > > constant address as positive 32bit integer for x32: > > I think we can simply disable these two patterns on x32. > > This is with disabled patterns: > > 0000000000000000 <x32_O3_main>: > 0: b8 00 00 e0 fe mov $0xfee00000,%eax > 5: 8b 00 mov (%rax),%eax > 7: a8 01 test $0x1,%al > 9: 74 01 je c <x32_O3_main+0xc> > b: 90 nop > c: b8 00 00 e0 fe mov $0xfee00000,%eax > 11: 8b 50 08 mov 0x8(%rax),%edx > 14: 89 50 04 mov %edx,0x4(%rax) > 17: c3 retq > > and with enabled patterns: > > 0000000000000000 <x32_O3_main>: > 0: a1 00 00 e0 fe 00 00 movabs 0xfee00000,%eax > 7: 00 00 > 9: a8 01 test $0x1,%al > b: 74 01 je e <x32_O3_main+0xe> > d: 90 nop > e: a1 08 00 e0 fe 00 00 movabs 0xfee00008,%eax > 15: 00 00 > 17: a3 04 00 e0 fe 00 00 movabs %eax,0xfee00004 > 1e: 00 00 > 20: c3 retq > > There is simply no need for movabs from/to mem, since there is no 64bit > addresses. And code size is horrible (and I bet that the former code runs > faster). I think it is a good idea.