PINSRB, PINSRD, PINSRQ
插入字节/字节/字节
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
66 0F 3A 20 /r ib | PINSRB xmm1, r32/m8, imm8 | A | 有效 | 有效 | 在xmm1指定的imm8中,将r32/m8的字节整数值插入xmm1. |
66 0F 3A 22 /r ib | PINSRD xmm1, r/m3, imm8 | A | 有效 | 有效 | 在 imm8 指定的目的地元素中,在 xmm1 中插入 r/m3 的 dword 整数值. |
66 REX.W 0F 3A 22 /r ib | PINSRQ xmm1, r/m64, imm8 | A | 有效 | n. e. | 在imm8指定的目的地元素中,将r/m64的qword整数值插入xmm1. |
VEX.128.66.0F3A.W0 20 /r ib | VPINSRB xmm1, xmm2, r32/m8, imm8 | B | v1 | 有效 | 将 r32/m8 的字节整数合并,并将 xmm2 的剩余值在 imm8 的字节抵消时合并为 xmm1 。 |
VEX.128.66.0F3A.W0 22 /r ib | VPINSRD xmm1, xmm2, r/m3, imm8 | B | 有效 | 有效 | 从 r32/m32 插入一个 dword 整数值,从 xmm2 插入 xmm1 ,在 imm8 中以 dword 抵消. |
VEX.128.66.0F3A.W1 22 /r ib | VPINSRQ xmm1, xmm2, r/m64, imm8 | B | 有效 | i2 | 从 r64/m64 插入一个 qword 整数值,从 xmm2 插入 xmm1 在 imm8 的 qword 中抵消. |
EVEX.128.66.0F3A.WIG 20 /r ib | VPINSRB xmm1, xmm2, r32/m8, imm8 | C | 有效 | 有效 | 将 r32/m8 和 OR AVX10.1 剩余 xmm2 的字节整数合并为 xmm1 ,以 imm8 的字节抵消. |
EVEX.128.66.0F3A.W0 22 /r ib | VPINSRD xmm1, xmm2, r32/m32, imm8 | C | 有效 | 有效 | 从 r32/m32 OR AVX10.1 插入一个 dword 整数值,从 xmm2 插入 xmm1 ,在 imm8 中以 dword 抵消. |
EVEX.128.66.0F3A.W1 22 /r ib | VPINSRQ xmm1, xmm2, r64/m64, imm8 | C | 有效 | n.e.2 | 从 r64/m64 OR AVX10.1 插入一个 qword 整数值,从 xmm2 插入 xmm1 在 imm8 的 qword 中抵消. |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
A
modrm.regescrituraModRM 字节的 reg 字段(第 5-3 位)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移imm8指令后的立即数字节
B
modrm.regescrituraModRM 字节的 reg 字段(第 5-3 位)vex.vvvvlecturaVEX 前缀的 vvvv 字段(按位取反)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移imm8指令后的立即数字节
C
modrm.regescrituraModRM 字节的 reg 字段(第 5-3 位)evex.vvvvlecturaEVEX 前缀的 vvvv 字段(按位取反)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移imm8指令后的立即数字节
Tupla: Tuple1 Scalar
实测开销
正在从 arch-data 加载实测数据...
说明
复制源操作数(第二代操作数)的字节/dword/qword,并在与伯爵操作数(第三代操作数)指定的位置插入目标操作数(第一代操作数). (目的地寄存器中的其他元素不动. ) 源操作数可以是通用寄存器或内存位置. (当源操作数是一个通用寄存器时,PINSRB复制了寄存器的低字节. ) 目标操作数是一个XMM寄存器. 计数操作数为8位即时. 在 XMM 记录器中指定 qword[dword,字节] 位置时, 操作数 计数的 [2, 4] 最小位指定位置 。
在64位模式中,没有用VEX/EVEX编码,使用REX前缀形式为REX.R,允许此指令访问额外的注册(XMM8-XMM15,R8-15). 使用REX.W允许使用64位普通用途登记册。
128位遗产 SSE 版本 : 相应的YMM目的地注册保持不变的位数(MAXVL-1:128).
VEX.128 编码版本 : 目的地的位数(MAXVL-1:128)登记被清零. VEX.L必须是0,否则指令会#UD. 在非64位模式下试图执行VPINSRQ将导致#UD.
EVEX.128 编码版本 : 目的地的位数(MAXVL-1:128)登记被清零. EVEX.L'L必须是0,否则指令会#UD.
行动
CASE OF
PINSRB: SEL := COUNT[3:0];
MASK := (0FFH << (SEL * 8));
TEMP := (((SRC[7:0] << (SEL *8)) AND MASK);
PINSRD: SEL := COUNT[1:0];
MASK := (0FFFFFFFFH << (SEL * 32));
TEMP := (((SRC << (SEL *32)) AND MASK) ;
PINSRQ: SEL := COUNT[0]
MASK := (0FFFFFFFFFFFFFFFFH << (SEL * 64));
TEMP := (((SRC << (SEL *64)) AND MASK) ;
ESAC;
DEST := ((DEST AND NOT MASK) OR TEMP);
VPINSRB (VEX/EVEX Encoded Version)
SEL := imm8[3:0]
DEST[127:0] := write_b_element(SEL, SRC2, SRC1)
DEST[MAXVL-1:128] := 0
VPINSRD (VEX/EVEX Encoded Version)
SEL := imm8[1:0]
DEST[127:0] := write_d_element(SEL, SRC2, SRC1)
DEST[MAXVL-1:128] := 0
VPINSRQ (VEX/EVEX Encoded Version)
SEL := imm8[0]
DEST[127:0] := write_q_element(SEL, SRC2, SRC1)
DEST[MAXVL-1:128] := 0Intel C/C++ 内在编译器
PINSRB __m128i _mm_insert_epi8 (__m128i s1, int s2, const int ndx);
PINSRD __m128i _mm_insert_epi32 (__m128i s2, int s, const int ndx);
PINSRQ __m128i _mm_insert_epi64(__m128i s2, __int64 s, const int ndx);受影响的旗帜
None.
SIMD 浮点 例外
None.
其他例外
EVEX-encoded 指令,参见表2-22,"第5类例外条件".
EVEX-encoded discription,参见表2-59"Type E9NF类例外条件".
Additionally:
#UD If VEX.L = 1 or EVEX.L'L > 0.