Fixed or forbidden register 3 (bx) was spilled

Zack Weinberg zack@codesourcery.com
Wed Sep 12 14:44:00 GMT 2001


On Wed, Sep 12, 2001 at 05:29:05PM -0400, Jean-Marc Valin wrote:
> I know this has been discussed before, but I think my case is different.
> I get the error "fixed or forbidden register 3 (bx) was spilled for
> class BREG.", but I DO NOT clobber an input/output register.

You need to post a complete example.  The most likely problem is that
because you are not letting the compiler pick the registers, it can't
satisfy constraints elsewhere in the function you are compiling.  Try

__asm__ __volatile__ ("
   prefetchnta (%0)
   prefetchnta (%1)
   prefetchnta 32(%0)
   prefetchnta 32(%1)
   prefetchnta 64(%0)
   prefetchnta 64(%1)
   prefetchnta 96(%0)
   prefetchnta 96(%1)
   prefetchnta 128(%0)
   prefetchnta 128(%1)
   "
   : : "r" (means), "r" (vars)
   );

Also try breaking this up into a series of asm() operations, again,
this allows the compiler more flexibility.

zw



More information about the Gcc-bugs mailing list