PSHUFW

包装的单词

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
NP 0F 70 /r ibPSHUFW mm1, mm2/m64, imm8RMI有效有效根据 imm8 的编码,将 mm2/m64 中的单词移动,并将结果存储在 mm1 中.

操作数编码

每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。

RMI

  1. modrm.reg escrituraModRM 字节的 reg 字段(第 5-3 位)
  2. modrm.rm lecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
  3. imm8指令后的立即数字节

实测开销

正在从 arch-data 加载实测数据...

说明

复制源操作的字(第二个操作),并在与顺序操作(第三个操作)选择的字位位置插入目的地操作(第一个操作). 这一操作与PSHUFD指令使用的操作类似,图4-16对此进行了说明. 对于 PSHUFW 指令,顺序中的每个2位字段会选择目的地操作中一个单词位置的内容. 命令 操作数字段的编码从 源操作数 中选择要复制到 目标操作数 的单词.

源操作数可以是MMX技术寄存器或64位内存位置. 目标操作数是一个MMX技术登记册. 操作数的命令是8位即时命令. 请注意,本指令允许将 源操作数 中的单词复制到 目标操作数 中的多个单词位置.

在64位模式中,使用REX前缀的形式为REX.R,允许此指令访问额外的注册(XMM8-XMM15).

行动

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 C/C++ 内在编译器

PSHUFW __m64 _mm_shuffle_pi16(__m64 a, int n);

受影响的旗帜

None.

数字例外

None.

其他例外

见Intel(R)64和IA-32架构软件开发者手册第3B卷第25.25.3节"SIMD在MMX注册上操作的遗产指令的例外条件".

来源