2010-09-11 77 views
2

我對x87 instructions用於處理x86彙編中的浮點數有點熟悉。但是,我在某處讀到這些很少用到的地方。 (並且在64位Windows驅動程序中不允許)[1]我應該使用什麼指令來進行浮點運算?

如果是這樣的話,應該使用什麼指令?我看到了一些關於上證所的信息,但除非我誤解了這些說明,否則這些說明會在近期增加,並且不會在舊芯片上提供。 (像奔騰II等)

什麼指令應該我正在使用?

回答

2

如果你願意忘記向後兼容性,SSE是一條路。它有更豐富的指令集和向量支持。如果您想針對任何處理器運行進行優化,您應該嘗試使用更高級別的語言編寫並與ICC編譯,ICC將檢查處理器當前是否正在運行並執行鍼對此優化的代碼。

在一天結束時,它取決於軟件的預期用戶。

+0

實際上,我正在編寫一個編譯器,用於生成*浮點指令:) – 2010-09-11 20:07:00

+0

@George:這是一個通用編譯器,可以在沒有SSE支持的舊系統上運行,或者它適用於封閉的環境? – 2010-09-11 20:14:18

+0

它會(希望)被廣泛使用,所以它應該與儘可能多的處理器兼容。 – 2010-09-12 00:51:41

0

如果您需要向後兼容,則必須使用x87指令。否則,正如Nathan Fellman所說,SSE#指令可能是要走的路,也是因爲它們的代碼更容易編寫(它們使用正常的寄存器模型,而x87使用堆棧)。

話雖如此,有幾個原因,你可能需要使用的x87代碼(或混合的x87/SSE代碼):

(1)的x87提供更高的精度,即80位浮點運算。 (x87/SSE都提供32位和64位浮點數。)這可能是一個問題,例如,一些科學代碼可能需要額外的精度。 (2)x87提供了一些不被SSE#指令集涵蓋的操作,即三角函數操作(sin,cos,...)和對數指令。

相關問題