GCC , , . , , , clobber &, , , . , =, /, +. , :
int
foo() {
int a = 1;
asm("add %1, %0" : "+r" (a) : "r" (1));
return a;
}
int
bar() {
int a = 1;
asm("add %1, %0\n\t"
"add %1, %0"
: "+r" (a) : "r" (1));
return a;
}
, foo , , bar, . GCC :
_foo:
movl $1, %eax
/APP
add %eax, %eax
/NO_APP
ret
_bar:
movl $1, %eax
/APP
add %eax, %eax
add %eax, %eax
/NO_APP
ret
GCC EAX . foo, , bar 4 3.
bar clobber:
int
baz() {
int a = 1;
asm("add %1, %0\n\t"
"add %1, %0"
: "+&r" (a) : "r" (1));
return a;
}
_baz:
movl $1, %eax
movl %eax, %edx
/APP
add %edx, %eax
add %edx, %eax
/NO_APP
ret
baz GCC , , / , .