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