|
From: Joern R. <joe...@su...> - 2003-03-28 14:16:48
|
kaz Kojima wrote: > > Hi, > > I've tested Steve's example with some gcc-3.4 natively built: > > stage1 3.4 CVS 20030216 (experimental) built with cross gcc -O ok > stage2 3.4 CVS 20030216 (experimental) built with stage1 gcc -O ok > stage3 3.4 CVS 20030216 (experimental) built with stage2 gcc -O2 ok > stage4 3.4 CVS 20030216 (experimental) built with stage3 gcc -O2 ok > > So it seems the problem go away in 3.4. No, the bug has never been in the fsf compiler in the first place, but for the wrong reasons. The generic code plays fast and loose with subregs if you let it, which can result in incorrect no-op truncations from 64 to 32 bits - the ABI requires a sign extension. We have fixed this in our compiler version, but in the end we had to disable the base register + index register addressing mode. There is a plan how to fix the problem while still allowing this addressing mode, but it uses a completely different approach, and it will require some significant amount of work to implement. -- -------------------------- SuperH (UK) Ltd. 2410 Aztec West / Almondsbury / BRISTOL / BS32 4QX T:+44 1454 465658 |