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