2014-11-24 109 views
1

我有一對存儲在eax和ecx中的32位浮點數。我可以直接將它們加載到FPU中進行操作,而不必先存儲到內存中?這會顯着簡化一些編譯器代碼,但fld似乎只能在內存上運行。在eax/ecx寄存器中添加32位浮點數?

+1

不,你不能。就編譯器代碼而言,如果你必須通過內存,我懷疑它會產生重大差異。你可以很容易地模擬'fld r32'('push r32; fld [esp]; pop r32')。無論如何,考慮使用SSE(如果可用)。 – Jester 2014-11-24 03:13:41

+0

@Jester我打算使用SSE,對於那個push-fld-pop示例,等效的SSE代碼是什麼? – Rotten194 2014-11-24 03:14:49

+0

您可以使用'MOVD'指令直接移動到SSE寄存器。你可以做'movd xmm0,eax; movd xmm1,ecx; addss xmm0,xmm1;'然後根據需要向後移動。當然你可以使用xmm寄存器作爲你的浮點數:) – Jester 2014-11-24 03:16:36

回答

5

不,你不能那樣做。至於生成代碼的話,你可以模擬fld r32足夠容易地通過例如下列序列(大小進行了優化;)):

push r32 
fld [esp] 
pop r32 

考慮使用SSE如果可用,這確實提供直接GPR到XMM移動使用movd指令。添加兩個寄存器則可能類似於:

movd xmm0, eax 
movd xmm1, ecx 
addss xmm0, xmm1 

如果您需要的結果在GPR,您可以使用其他movd移回。

相關問題