Carved Marker

SSE 介紹 [Page 2]

SSE 的浮點數運算指令,大致上可以分成兩種:packed 和 scalar。Packed 指令是一次對 XMM 暫存器中的四個浮點數(即 DATA0 ~ DATA3)均進行計算,而 scalar 則只對 XMM 暫存器中的 DATA0 進行計算。如下圖所示:

SSE packed and scalar operations

SSE 指令和一般的 x86 指令很類似,基本上包括兩種定址方式:reg-reg 和 reg-mem。下面是兩個例子:

  1. addps xmm0, xmm1 ; reg-reg
  2. addps xmm0, [ebx] ; reg-mem

指令的運算結果會覆蓋到第一個參數中。例如,以上面的第一個例子來說,xmm0 暫存器會存放最後計算的結果。

另外,絕大部份需要存取記憶體的 SSE 指令,都要求位址是 16 的倍數(也就是對齊在 16 bytes 的邊上)。如果不是的話,就會導致 exception。這是非常重要的。因為,一般的 32 位元浮點數只會對齊在 4 bytes 或 8 bytes 的邊上(根據 compiler 的設定而不同)。另外,若是處理陣列中的數字,也需要特別注意這個問題。

[Part 1] [Page 2] [Part 3] [Part 4] [Part 5] [Page 6] [Part 7] [Part 8]

11/6/2001, Ping-Che Chen


Sorry, Traditional Chinese only. This page is encoded in UTF-8.

Copyright© 2000, 2001 Ping-Che Chen