1
単純な関数(x86-64で、-O2):gccは読み込み中に呼び出し先保存レジスタを保持するのはなぜですか?
__attribute__((noinline,noclone,pure))
uint foo() {
register const uint* _reg asm ("r15");
return *_reg;
}
この機能のためのアセンブラ出力:
push r15
mov eax, [r15]
pop r15
retn
不要なポップ/は、命令が挿入されているプッシュするのはなぜ?
ここで行っていることは、[GCCのドキュメントに従って明示的にサポートされていません](https://gcc.gnu.org/onlinedocs/gcc/Local-Register-Variables.html#Local-Register-Variables)です。 –
また、これがインラインasmが悪い理由の1つです。 – rubenvb