Thomas Schwinge wrote:
On Tue, Mar 15, 2005 at 07:57:55AM -0800, Peter Federighi wrote:
  
gcc -Wall -O2 -g -fno-strict-aliasing -fomit-frame-pointer -I.
-I/usr/src/qemu-0.6.1/target-i386 -I/usr/src/qemu-0.6.1 -D_GNU_SOURCE
-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I/usr/src/qemu-0.6.1/slirp -c
-o helper.o /usr/src/qemu-0.6.1/target-i386/helper.c
/usr/src/qemu-0.6.1/softmmu_template.h: In function `__stq_mmu':
/usr/src/qemu-0.6.1/softmmu_template.h:223: error: unable to find a
register to spill in class `GENERAL_REGS'
/usr/src/qemu-0.6.1/softmmu_template.h:223: error: this is the insn:
(insn:HI 315 314 316 13 /usr/src/qemu-0.6.1/softmmu_template.h:252
(parallel [
            (set (reg:DI 0 ax [194])
                (lshiftrt:DI (reg/v:DI 59 [ val ])
                    (subreg:QI (reg:SI 0 ax [193]) 0)))
            (clobber (scratch:SI))
            (clobber (reg:CC 17 flags))
        ]) 306 {lshrdi3_1} (insn_list 314 (nil))
    (expr_list:REG_DEAD (reg:SI 0 ax [193])
        (expr_list:REG_UNUSED (reg:CC 17 flags)
            (expr_list:REG_UNUSED (scratch:SI)
                (nil)))))
/usr/src/qemu-0.6.1/softmmu_template.h:223: confused by earlier errors,
bailing out
make[1]: *** [helper.o] Error 1
make[1]: Leaving directory `/usr/src/qemu-0.6.1/i386'
make: *** [all] Error 1
    

I'm getting the same error when having '-march=athlon-xp' in my $CFLAGS
(and forcing qemu to use those).  Replacing that with '-march=pentium'
fixes the issue for me.
I got the same error compiling QEMU with -march=pentium3, but only on op.c and helper.c. All other files compiled fine with that option. Those two files compiled fine with -march=pentium.

Is it a bug? I idly speculated that the register selection method might be different for different archs and that, because these files might demand certain registers be used for certain purposes, the compiler might simple be "unable to find a register" for its needs.

Struan