1
我有一對存儲在eax和ecx中的32位浮點數。我可以直接將它們加載到FPU中進行操作,而不必先存儲到內存中?這會顯着簡化一些編譯器代碼,但fld
似乎只能在內存上運行。在eax/ecx寄存器中添加32位浮點數?
我有一對存儲在eax和ecx中的32位浮點數。我可以直接將它們加載到FPU中進行操作,而不必先存儲到內存中?這會顯着簡化一些編譯器代碼,但fld
似乎只能在內存上運行。在eax/ecx寄存器中添加32位浮點數?
不,你不能那樣做。至於生成代碼的話,你可以模擬fld r32
足夠容易地通過例如下列序列(大小進行了優化;)):
push r32
fld [esp]
pop r32
考慮使用SSE如果可用,這確實提供直接GPR到XMM移動使用movd
指令。添加兩個寄存器則可能類似於:
movd xmm0, eax
movd xmm1, ecx
addss xmm0, xmm1
如果您需要的結果在GPR,您可以使用其他movd
移回。
不,你不能。就編譯器代碼而言,如果你必須通過內存,我懷疑它會產生重大差異。你可以很容易地模擬'fld r32'('push r32; fld [esp]; pop r32')。無論如何,考慮使用SSE(如果可用)。 – Jester 2014-11-24 03:13:41
@Jester我打算使用SSE,對於那個push-fld-pop示例,等效的SSE代碼是什麼? – Rotten194 2014-11-24 03:14:49
您可以使用'MOVD'指令直接移動到SSE寄存器。你可以做'movd xmm0,eax; movd xmm1,ecx; addss xmm0,xmm1;'然後根據需要向後移動。當然你可以使用xmm寄存器作爲你的浮點數:) – Jester 2014-11-24 03:16:36