Windows x64 では、ABI が揮発性としてマークするレジスタを不揮発性として扱うことをコンパイラが許可されるのはいつですか? r11
関数呼び出し後に別のレジスタの値を復元するために使用される逆アセンブル関数があります。thisによると、r11
それ自体は関数呼び出し全体で揮発性と見なされます。
例 (逆アセンブルされた関数から):
myLibrary!MyClass::currentMemberFunction+0x18:
call myLibrary!MyClass::calledMemberFunction
cmp dword ptr [rsp+68h],0
mov rdi,rax
je myLibrary!MyClass::currentMemberFunction+0x58
test rbx,rbx
mov rcx,r11
je myLibrary!MyClass::currentMemberFunction+0x60
と
myLibrary!MyClass::currentMemberFunction+0x2f:
call myLibrary!MyClass::anotherCalledMemberFunction
mov rdx,rdi
mov rcx,r11