PSHUFW
包装的单词
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
NP 0F 70 /r ib | PSHUFW mm1, mm2/m64, imm8 | RMI | 有效 | 有效 | 根据 imm8 的编码,将 mm2/m64 中的单词移动,并将结果存储在 mm1 中. |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
RMI
modrm.regescrituraModRM 字节的 reg 字段(第 5-3 位)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移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注册上操作的遗产指令的例外条件".