My inline assembly has the cooties.
David Daney
ddaney@avtrex.com
Thu Nov 15 19:18:00 GMT 2007
Marco Manfredini wrote:
> Hi,
> The first thing I always realize when I return to code with inline assembly
> is, that I forgot the dodgy intricacies again. Today I seem to suffer from
> paralytic blindness. Could someone please enlighten me, why this program
> prints 20 with gcc 4.2.2 and 1010 with gcc-3.4.4?
>
I give up. Is it because you didn't declare %0 as an early clobber?
Perhaps it should be: ...."=&r"(r)...
David Daney
> #if 0
> gcc $0 -o ${0%.*}
> exit 0
> #endif
> #include <stdio.h>
> struct S
> {
> int v;
> };
>
> int main()
> {
> struct S a={10};
> struct S b={1000};
> int r=0;
> __asm__ volatile(
> "/*XXXXXXXXXXXXX [%0]=[%1]+[%2] XX */\n "
> "\t movl %1,%0 \n"
> "\t addl %2,%0 \n"
> :"=r"(r)
> :"g"(a.v),"g"(b.v));
> printf("%d\n",r);
> }
>
> Cheers
> Marco
>
More information about the Gcc-help
mailing list