My inline assembly has the cooties.

Marco Manfredini mldb@gmx.net
Thu Nov 15 18:34:00 GMT 2007


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?

#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