天天看點

Intel彙編指令集SSE41、引言2、SSE 4概覽3、SSE4指令集

Intel SSE 4指令集是目前使用廣泛的彙編指令集,最初在45nm的Intel 64位處理器和AMD的K10處理器中提供。SSE4的含義是Streaming SIMD Extension 4,SIMD即單指令多資料技術(Single Instruction Multiple Data)。SSE4指令集共包含了54條指令,其中子集SSE 4.1包含了47條指令,另一個子集SSE 4.2包含剩餘7條指令。

SSE4旨在提升Intel處理器在多媒體、圖像處理、3D處理應用中的性能。SSE4.1添加了增強編譯器矢量化的指令,·極大地提升了對打包雙字型資料的計算能力。SSE4.2利用SIMD技術提升了字元串和文本處理方面的性能,增加了針對應用加速器(ATA)的指令,以及比SSE4.1中的128位整數SIMD指令更強的SIMD整數指令。

SSE4不需要新的作業系統的支援,以儲存和恢複超出了SIMD流指令擴充(SSE)要求的寄存器狀态。SSE4.1中存在6個指令可能産生多種SIMD浮點型異常值,是以要求作業系統提供相容IEEE-745的事件處理器來進行計算後處理(與SSE~SSE3指令集類似)。而SSE4.2的指令将不會産生SIMD浮點異常。

SSE4與基于前幾代處理器開發的程式完全相容,舊的程式可以不經任何改動直接在支援SSE4的新處理器上運作。

重點學習整數計算指令。

MPSADBW指令:計算8個4位元組寬整數的絕對內插補點和(SAD)。

PHMINPOSUW指令:在源操作數(即第二個操作數)中按照無符号word型資料查找最小值,并将該值儲存到目标操作數(即第一個操作數)中最低的word位置,并在前面的3個bit儲存該值的索引值,其他位置為0。

PMULDQ指令:有符号乘法指令,針對目标操作數和源操作數中第一個和第三個打包有符号雙字型整數。64位的乘積儲存于目标操作數中。

PMULLD指令:有符号乘法指令,計算源操作數和目标操作數對應的打包有符号雙字型整數的乘積,并把得到的64位乘積的低32位諸葛儲存到目标操作數中。

PMINSB指令和PMAXSB指令:比較源操作數和目标操作數中有符号位元組型(signed byte)整數的大小,前者将較小的位元組儲存到目标操作數中,後者将較大的位元組儲存到目标操作數中。

PMINUW指令和PMAXUW指令:比較源操作數和目标操作數中無符号字型(unsigned

word)整數的大小,前者将較小的位元組儲存到目标操作數中,後者将較大的位元組儲存到目标操作數中。

PMINUD指令和PMAXUD指令:比較源操作數和目标操作數中無符号雙字型(unsigned dword)整數的大小,前者将較小的位元組儲存到目标操作數中,後者将較大的位元組儲存到目标操作數中。

PMINSD指令和PMAXSD指令:比較源操作數和目标操作數中有符号雙字型(signed dword)整數的大小,前者将較小的位元組儲存到目标操作數中,後者将較大的位元組儲存到目标操作數中。

PMOVSX指令和PMOVZX指令:資料擴充指令集,分别按照有符号擴充和0擴充。兩個指令集合都包含多個指令,用于位元組型、字形和雙字型到更大的資料類型的擴充。

PTEST指令:實作邏輯比較。當源操作數和目标操作數按位與的結果為0時,辨別位ZF設為1否則設為0;當源操作數和目标操作數按位取反的結果再進行按位與得到0時,CF設為1,否則CF設為0。該指令不改變目标操作數的值,AF/OF/PF/SF四個辨別位都将設為0。

PCMPEQQ指令:實作QWORD型資料的相等比較。源操作數和目标操作數的兩個64位QWORD資料分别進行比較,目标操作數等同的部分全部置1,否則置0。

PACKUSDW指令:依據無符号飽和模式,将有符号雙字型整數轉換為無符号的字形整數。

MOVNTDQA指令:從write-combining記憶體區高效率地将資料讀入SSE寄存器。

SSE 4.2增加了如下指令:

CRC32用于計算循環備援校驗碼;

PCMPESTRI、PCMPESTRM、PCMPISTRI、PCMPISTRM用于字元串處理;

PCMPGTQ用于比較QWORD型資料,如果目标操作數大于源操作數則目标操作數的對應部分置0,否則源操作數的部分置0。

繼續閱讀