我有一对存储在eax和ecx中的32位浮点数。我可以直接将它们加载到FPU中对它们进行操作,而无需先存储到内存中吗?这会显着简化某些编译器代码,但fld
似乎只能在内存上运行。
答案 0 :(得分:5)
不,你不能这样做。就生成代码而言,您可以通过以下序列轻松模拟fld r32
,例如(针对大小进行了优化;)):
push r32
fld [esp]
pop r32
考虑使用SSE(如果可用),它使用movd
指令提供直接的GPR到XMM移动。添加两个寄存器可能看起来像:
movd xmm0, eax
movd xmm1, ecx
addss xmm0, xmm1
如果您需要GPR中的结果,可以使用另一个movd
将其移回。