我使用VC++ 2010编译器编译了下面的代码:
__declspec(dllexport)
unsigned int __cdecl __mm_getcsr(void) { return _mm_getcsr(); }
生成的代码是:
push ECX
stmxcsr [ESP]
mov EAX, [ESP]
pop ECX
retn
为什么要使用
push ECX
/pop ECX
指令对?sub esp,4
stmxcsr [ESP]
mov EAX, [ESP]
add esp,4
retn
但是"push ecx"可能更短或更快。
它创建了一个堆栈顶部的条目,ESP现在将其称为stmxcsr指令的目标。然后结果存储在EAX中以供返回。
pop
恢复堆栈指针,就像add esp,4
一样。 - Robᵩpop EAX
代替mov EAX, [ESP]; pop ECX
会更好吗? - CodesInChaos