This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: -march prescott: GENERAL_REGS error; but -msseX Ok ?
- From: Falk Hueffner <falk at debian dot org>
- To: "sean darcy" <seandarcy at hotmail dot com>
- Cc: gcc at gcc dot gnu dot org
- Date: Sun, 30 Jan 2005 00:20:27 +0100
- Subject: Re: -march prescott: GENERAL_REGS error; but -msseX Ok ?
- References: <BAY20-F3117CC27A71C4E542FAB5ABB7A0@phx.gbl>
"sean darcy" <seandarcy@hotmail.com> writes:
> i386/dsputil_mmx.c: In function `h263_h_loop_filter_mmx':
> i386/dsputil_mmx.c:634: error: can't find a register in class `GENERAL_REGS'
> while reloading `asm'
> dmesg | less make[2]: *** [dsputil_mmx.o] Error 1
>
> My cflags are -mtune=prescott -O3 -funit-at-a-time -ffast-math
> -fomit-frame-pointer
>
> But -O3 -funit-at-a-time -ffast-math -fomit-frame-pointer -mmmx -msse
> -msse2 -msse3 works!
>
> config/i386.c has:
> {"prescott", PROCESSOR_NOCONA, PTA_SSE | PTA_SSE2 | PTA_SSE3
> | PTA_MMX | PTA_PREFETCH_SSE}
>
> So is the only reason prescott doesn't work is prefetch-sse.
No, that is a red herring. The different instruction scheduling causes
the register allocator to randomly fail or not. There's no way for us
to fix this reliably, the asm must be changed to constrain the
register allocator less.
--
Falk