This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
What so special about i386's bx?
- To: gcc at gcc dot gnu dot org
- Subject: What so special about i386's bx?
- From: Andrew Clausen <clausen at alphalink dot com dot au>
- Date: Thu, 23 Sep 1999 21:38:41 -0400
Hi, (please cc me - I'm off the list)
When compiling this code: (x86, linux)
-----------------
int
_llseek (unsigned int fd, unsigned long offset_high, unsigned
offset_low,
loff_t* result, unsigned int origin)
{
long __res;
__asm__ __volatile__ ("int $0x80"
: "=a" (__res)
: "0" (__NR__llseek),
"b" ((long)(fd)),
"c" ((long)(offset_high)),
"d" ((long)(offset_low)),
"S" ((long)(result)),
"D" ((long)(origin))
);
__syscall_return(int,__res);
}
------------------
gcc gives this error message:
llseek.c:86: Invalid `asm' statement:
llseek.c:86: fixed or forbidden register 3 (bx) was spilled for class
BREG.
If I comment out the "b" ((long)(fd)) line, it compiles without
complaint.
Or, if I change the "b" to some other register, it also compiles. It's
only bx it complains about.
What does "spilled" mean? AFAIK, bx won't get clobbered by the "int
0x80"
- I assume it's refering to the fact that bx will have to be overwritten
with "fd". Correct?
Any ideas on what the problem is?
Andrew Clausen