PEXTRW
提取单词
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
NP 0F C5 /r ib1 | PEXTRW reg, mm, imm8 | A | 有效 | 有效 | 从 mm 中提取 imm8 指定的单词并将其移动到 reg, 位数 15-0. r3 或 r64 的上位数为零 。 |
66 0F C5 /r ib | PEXTRW reg, xmm, imm8 | A | 有效 | 有效 | 从 xmm 中提取 imm8 指定的单词并将其移动到 reg, 位数 15-0. r3 或 r64 的上位数为零 。 |
66 0F 3A 15 /r ib | PEXTRW reg/m16, xmm, imm8 | B | 有效 | 有效 | 从 xmm 中提取 imm8 指定的单词,并将其复制到 reg 或 m16 中的最低 16 位. 0- extend the results in the design, r3 或 r64. |
VEX.128.66.0F.W0 C5 /r ib | VPEXTRW reg, xmm1, imm8 | A | v2 | 有效 | 从 xmm1 中提取 imm8 指定的单词并将其移动到 reg,比特为 15:0. 0. 零延伸结果。 r64/r32 的上位数为 0 。 |
VEX.128.66.0F3A.W0 15 /r ib | VPEXTRW reg/m16, xmm2, imm8 | B | 有效 | 有效 | 在 imm8 指定的源词偏移时从 xmm2 中提取一个单词整数值为 reg 或 m16 。 r64/r32 的上位数为 0 。 |
EVEX.128.66.0F.WIG C5 /r ib | VPEXTRW reg, xmm1, imm8 | A | 有效 | 有效 | 从 xmm1 和 OR AVX10.1 中提取 imm8 指定的单词,将其移动到 reg,比特为 15:0. 0 。 0 扩展结果。 r64/r32 的上位数为 0 。 |
EVEX.128.66.0F3A.WIG 15 /r ib | VPEXTRW reg/m16, xmm2, imm8 | C | 有效 | 有效 | 在 OR AVX10.1 源词偏移时从 xmm2 中提取一个单词整数值,由 imm8 指定为 reg 或 m16 。 r64/r32 的上位数为零。 |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
A
modrm.regescrituraModRM 字节的 reg 字段(第 5-3 位)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移imm8指令后的立即数字节
B
modrm.rmescrituraModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移modrm.reglecturaModRM 字节的 reg 字段(第 5-3 位)imm8指令后的立即数字节
C
modrm.rmescrituraModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移modrm.reglecturaModRM 字节的 reg 字段(第 5-3 位)imm8指令后的立即数字节
Tupla: Tuple1 Scalar
实测开销
正在从 arch-data 加载实测数据...
说明
将伯爵操作数(第三操作数)指定的源操作数(第二操作数)中的单词复制到目标操作数(第一操作数). 源操作数可以是MMX技术登记册或XMM登记册. 目标操作数可以是通用寄存器或16位内存地址的低词. 计数操作数为8位即时. 在 MMX 技术登记册中指定一个单词位置时,伯爵 操作数 的两个最小位指定了位置;对于 XMM 登记册,三个最小位指定了位置. 第16项以上目的地登记册的内容已清除(设定为所有 0s) 。
在64位模式中,使用REX前缀的形式为REX.R,允许此指令访问额外的注册(XMM8-XMM15,R8-15). 如果 目标操作数 是 通用寄存器,默认的 操作数大小 是64位模式下的64位.
说明: 在VEX.128编码的版本中,VEX.vvvv是保留的,必须是1111b,VEX.L必须是0,否则指令会是#UD. 在EVEX.128编码版本中,EVEX.vvvv被保留,必须是1111b,EVEX.L必须是0,
否则,该指令将#UD。 如果目标操作数是一个寄存器,则VPEXTRW的64位模式中默认的操作数大小是64位,在最小的字节/字节/字节数据之上的位被零填充.
行动
IF (DEST = Mem16)
THEN
SEL := COUNT[2:0];
TEMP := (Src >> SEL*16) AND FFFFH;
Mem16 := TEMP[15:0];
ELSE IF (64-Bit Mode and destination is a general-purpose register)
THEN
FOR (PEXTRW instruction with 64-bit source operand)
{ SEL := COUNT[1:0];
TEMP := (SRC >> (SEL 16)) AND FFFFH;
r64[15:0] := TEMP[15:0];
r64[63:16] := ZERO_FILL; };
FOR (PEXTRW instruction with 128-bit source operand)
{ SEL := COUNT[2:0];
TEMP := (SRC >> (SEL 16)) AND FFFFH;
r64[15:0] := TEMP[15:0];
r64[63:16] := ZERO_FILL; }
ELSE
FOR (PEXTRW instruction with 64-bit source operand)
{ SEL := COUNT[1:0];
TEMP := (SRC >> (SEL 16)) AND FFFFH;
r32[15:0] := TEMP[15:0];
r32[31:16] := ZERO_FILL; };
FOR (PEXTRW instruction with 128-bit source operand)
{ SEL := COUNT[2:0];
TEMP := (SRC >> (SEL 16)) AND FFFFH;
r32[15:0] := TEMP[15:0];
r32[31:16] := ZERO_FILL; };
FI;
FI;
VPEXTRW ( dest=m16)
SRC_Offset := imm8[2:0]
Mem16 := (Src >> Src_Offset*16)
VPEXTRW ( dest=reg)
IF (64-Bit Mode )
THEN
SRC_Offset := imm8[2:0]
DEST[15:0] := ((Src >> Src_Offset*16) AND 0FFFFh)
DEST[63:16] := ZERO_FILL;
ELSE
SRC_Offset := imm8[2:0]
DEST[15:0] := ((Src >> Src_Offset*16) AND 0FFFFh)
DEST[31:16] := ZERO_FILL;
FIIntel C/C++ 内在编译器
PEXTRW int _mm_extract_pi16 (__m64 a, int n) PEXTRW int _mm_extract_epi16 ( __m128i a, int imm);受影响的旗帜
None.
数字例外
None.
其他例外
Non-EVEX-encoded discription,参见表2-22,"第5类例外条件".
EVEX-encoded discription,参见表2-59"Type E9NF类例外条件".
Additionally:
#UD If VEX.L = 1 or EVEX.L'L > 0.If VEX.vvvv != 1111B or EVEX.vvvv != 1111B.