HADDPS - 壓縮單精度浮點水平加法
|
指令 |
說明 |
|
HADDPS xmm1, xmm2/m128 |
將壓縮單精度浮點值從 XMM2/Mem 水平加到 XMM1。 |
說明
將目標運算元的第一個雙字與第二個雙字中的單精度浮點值相加,並將結果儲存到目標運算元的第一個雙字。
將目標運算元的第三個雙字與第四個雙字中的單精度浮點值相加,並將結果儲存到目標運算元的第二個雙字。
將源運算元的第一個雙字與第二個雙字中的單精度浮點值相加,並將結果儲存到目標運算元的第三個雙字。
將源運算元的第三個雙字與第四個雙字中的單精度浮點值相加,並將結果儲存到目標運算元的第四個雙字。
操作
xmm1[31-0] = xmm1[31-0] + xmm1[63-32];
xmm1[63-32] = xmm1[95-64] + xmm1[127-96];
xmm1[95-64] = xmm2/m128[31-0] + xmm2/m128[63-32]; xmm1[127-96] = xmm2/m128[95-64] + xmm2/m128[127-96];
異常
源運算元為記憶體運算元時,運算元必須對齊 16 位元組邊界,否則將產生一般保護性異常 (#GP)。
數值異常
上溢、下溢、無效、精度、非規格化。
保護模式異常
#GP(0) - CS、DS、ES、FS 或 GS 段中的記憶體運算元有效地址非法。#SS(0) - SS 段中的地址非法。#PF(錯誤程式碼) - 頁錯誤。#NM - 如果 CR0 中的 TS 設定為 1。#XM - 無掩碼“數據流單指令多數據擴充套件指令集”數值異常 (CR4.OSXMMEXCPT = 1)。#UD - 如果 CR0.EM = 1。
無掩碼“數據流單指令多數據擴充套件指令集”數值異常 (CR4.OSXMMEXCPT = 0)。如果 CR4.OSFXSR(bit 9) = 0。
如果 CPUID.PNI(ECX bit 0) = 0。HADDPS - 壓縮單精度浮點水平加法(續)實地址模式異常
中斷 13 - 如果運算元的任何部分出現在從 0 到 0FFFFH 的有效地址空間之外。#NM - 如果 CR0 中的 TS 設定為 1。#XM - 無掩碼“數據流單指令多數據擴充套件指令集”數值異常 (CR4.OSXMMEXCPT = 1)。#UD - 如果 CR0.EM = 1。
無掩碼“數據流單指令多數據擴充套件指令集”數值異常 (CR4.OSXMMEXCPT = 0)。如果 CR4.OSFXSR(bit 9) = 0。
如果 CPUID.PNI(ECX bit 0) = 0。虛 8086 模式異常
中斷 13 - 如果運算元的任何部分出現在從 0 到 0FFFFH 的有效地址空間之外。#NM - 如果 CR0 中的 TS 設定為 1。#XM - 無掩碼“數據流單指令多數據擴充套件指令集”數值異常 (CR4.OSXMMEXCPT = 1)。#UD - 如果 CR0.EM = 1。無掩碼“數據流單指令多數據擴充套件指令集”數值異常 (CR4.OSXMMEXCPT = 0)。如果 CR4.OSFXSR(bit 9) = 0。如果 CPUID.PNI(ECX bit 0) = 0。#PF(錯誤程式碼) - 頁錯誤。