Test case for __asm__ problems in i386
Bernd Schmidt
crux@Pool.Informatik.RWTH-Aachen.DE
Wed May 13 03:41:00 GMT 1998
The following program demonstrates that __asm__ statements are not
reliable on the i386 if clobbers are used.
Bernd
darkstar:/tmp/x # gcc -v
Reading specs from /usr/lib/gcc-lib/i586-pc-linux-gnu/egcs-2.91.28/specs
gcc version egcs-2.91.28 19980508 (gcc2 ss-980502 experimental)
darkstar:/tmp/x # cat asmtest.c
#ifdef __i386__
int main ()
{
int i;
__asm__ ("movl $1,%0\n\txorl %%eax,%%eax" : "=r" (i) : : "eax");
if (i != 1)
abort ();
__asm__ ("movl $1,%0\n\txorl %%ebx,%%ebx" : "=r" (i) : : "ebx");
if (i != 1)
abort ();
__asm__ ("movl $1,%0\n\txorl %%ecx,%%ecx" : "=r" (i) : : "ecx");
if (i != 1)
abort ();
__asm__ ("movl $1,%0\n\txorl %%edx,%%edx" : "=r" (i) : : "edx");
if (i != 1)
abort ();
__asm__ ("movl $1,%0\n\txorl %%esi,%%esi" : "=r" (i) : : "esi");
if (i != 1)
abort ();
__asm__ ("movl $1,%0\n\txorl %%edi,%%edi" : "=r" (i) : : "edi");
if (i != 1)
abort ();
return 0;
}
#else
int main ()
{
return 0;
}
#endif
darkstar:/tmp/x # gcc asmtest.c
darkstar:/tmp/x # ./a.out
Aborted
More information about the Gcc-bugs
mailing list