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 *)
(* Repeat operation performed for words 2 and 3 *)
DEST[63:48] <--
(SRC[63:48] + DEST[63:48] + 1) >> 1;

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];
r32[1] <-- SRC[15];
(* Repeat operation for bytes 2 through 6 *)
r32[7] <-- SRC[63];
r32[31:8] <--
 ZERO_FILL;

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];
DEST[31:16] <-- (SRC >> (ORDER[3:2] * 16))[15:0];
DEST[47:32] <-- (SRC >> (ORDER[5:4] * 16))[15:0];
DEST[63:48] <-- (SRC >> (ORDER[7:6] * 16))[15:0];

 

Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(9) - 64位整型指令(MMX指令集扩展)

相关文章:

  • 2021-12-10
  • 2021-11-27
  • 2021-04-04
  • 2021-06-11
  • 2021-06-16
  • 2021-09-17
  • 2021-09-03
  • 2021-05-16
猜你喜欢
  • 2021-06-25
  • 2021-07-19
  • 2021-05-28
  • 2021-04-01
  • 2021-07-30
  • 2021-08-28
  • 2021-08-27
相关资源
相似解决方案