вот такой код:
int R_EAX, R_ESI;
void test(void)
{
asm volatile ("" : "=a" (R_EAX), "=S" (R_ESI));
}
порождает вот такой ассемблер.
.globl test
.type test,@function
test:
pushl %esi
#APP
#NO_APP
movl %eax,R_EAX
movl %esi,R_ESI
popl %esi
ret
вопрос: почему gcc сохраняет/восстанавливает %esi
(в отличие от %eax)? %esi ведь фигурирует только в
output list.
на такое поведение закладывается, например, switch_to(),
но я не могу найти, где это поведение документированно.
Форум —
Development