SSE 64-Bit SIMD Integer Instructions
SSE扩展增加了几条64位组合的整型指令,这些指令操作MMX寄存器和64位的存储器操作数,这些指令可以看作是对MMX指令集的扩展。当后来在IA-32处理器上引入SSE2扩展时,这些指令也被扩展位操作128位的XMM寄存器和128位的存储器操作数。
|
指令 |
描述 |
|
PAVGB |
格式:PAVGB mm1, mm2/m64
将mm1与mm2/m64中对应的数据元素,即组合的无符号字节整型数,相加除以2,求平均数,使用四舍五入。
指令操作: DEST[7:0] <-- (SRC[7:0] + DEST[7:0] + 1) >> 1; (* Temp sum before shifting is 9 bits *) (* Repeat operation performed for bytes 2 through 6 *) DEST[63:56] ← (SRC[63:56] + DEST[63:56] + 1) >> 1; |
|
PAVGW |
格式:PAVGW mm1, mm2/m64
将mm1与mm2/m64中对应的数据元素,即组合的无符号单字整型数,相加除以2,求平均数,使用四舍五入。
指令操作: DEST[15:0] <--(SRC[15:0] + DEST[15:0] + 1) >> 1; (* Temp sum before shifting is 17 bits *) |
|
PEXTRW |
格式:PEXTRW reg, mm, imm8
按照imm8中指定的位置索引,从mm寄存器中选取一个16位单字整型数,保存到reg寄存器的第0~15比特位中,其余的比特位清0。
|
|
PINSRW |
格式:PINSRW mm, r32/m16, imm8
将r32/m16中的16位单字整型数,按照imm8中指示的位置,插入到mm寄存器中,其余的比特位保持不变。 |
|
PMAXUB |
格式:PMAXUB mm1, mm2/m64
比较mm1与mm2/m64中组合的无符号字节整型数,将较大者保存到目标寄存器mm1中。 |
|
PMINUB |
格式:PMINUB mm1, mm2/m64
比较mm1与mm2/m64中组合的无符号字节整型数,将较小者保存到目标寄存器mm1中。 |
|
PMAXSW |
格式:PMAXSW mm1, mm2/m64
比较mm1与mm2/m64中组合的有符号单字整型数,将较大者保存到目标寄存器mm1中。 |
|
PMINSW |
格式:PMINSW mm1, mm2/m64
比较mm1与mm2/m64中组合的有符号单字整型数,将较小者保存到目标寄存器mm1中。 |
|
PMOVMSKB |
格式:PMOVMSKB reg, mm
将mm寄存器中组合的字节整型数的最高比特位(可以看作有符号数的符号位)按顺序保存到reg中,其余的比特位清0。
指令操作: r32[0] <-- SRC[7]; |
|
PMULHUW |
格式:PMULHUW mm1, mm2/m64
将mm1与mm2/m64中对应的组合的数据元素,即无符号单字整型数,相乘,结果的高16比特位保存到mm1中。
指令操作: TEMP0[31:0] ← DEST[15:0] ∗ SRC[15:0]; (* 无符号乘法,中间结果*) TEMP1[31:0] ← DEST[31:16] ∗ SRC[31:16]; TEMP2[31:0] ← DEST[47:32] ∗ SRC[47:32]; TEMP3[31:0] ← DEST[63:48] ∗ SRC[63:48]; DEST[15:0] ← TEMP0[31:16]; (结果的高16比特位,下同) DEST[31:16] ← TEMP1[31:16]; DEST[47:32] ← TEMP2[31:16]; DEST[63:48] ← TEMP3[31:16]; |
|
PSADBW |
格式:PSABDW mm1, mm2/m64
首先计算mm1与mm2/m64中对应的组合的数据元素,即无符号字节整型数,的差的绝对值,然后再将这些绝对值相加,保存到mm1中的第0~15比特位中,其余的比特位清0(参看下图)。 |
|
PSHUFW |
格式:PSHUFW mm1, mm2/m64, imm8
按照imm8指示的位置,将mm2/m64中的单字数据元素混洗,结果保存到mm1中。
指令操作: DEST[15:0] <-- (SRC >> (ORDER[1:0] * 16))[15:0]; |