La fonction simple (x86-64, -O2):Pourquoi gcc conserve-t-il un registre de sauvegarde d'appel en cours de lecture?
__attribute__((noinline,noclone,pure))
uint foo() {
register const uint* _reg asm ("r15");
return *_reg;
}
La sortie assembleur pour cette fonction:
push r15
mov eax, [r15]
pop r15
retn
Pourquoi pop inutiles/instructions sont insérées pousse?
Notez que ce que vous faites ici est [explicitement non supporté selon la documentation de GCC] (https://gcc.gnu.org/onlinedocs/gcc/Local-Register-Variables.html#Local-Register-Variables). –
En outre, c'est une des raisons pour lesquelles asm est mal. – rubenvb