VP2INTERSECTD, VP2INTERSECTQ
计算 DWORDS / QUADWORDS 之间的间断
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
EVEX.NDS.128.F2.0F38.W0 68 /r | VP2INTERSECTD k1+1, xmm2, xmm3/m128/m32bcst | A | 有效 | 有效 | AVX512 VP2INTERS在偶数/偶数对口罩登记册中存储xmm3/m128/m32bcst和xmm2中dwords之间值匹配位置的指标。 |
EVEX.NDS.256.F2.0F38.W0 68 /r | VP2INTERSECTD k1+1, ymm2, ymm3/m256/m32bcst | A | 有效 | 有效 | AVX512 VP2INTERS在偶数/偶数对口罩登记册中存储ymm3/m256/m32bcst和ymm2中dwords之间值匹配位置的指标。 |
EVEX.NDS.512.F2.0F38.W0 68 /r | VP2INTERSECTD k1+1, zmm2, zmm3/m512/m32bcst | A | 有效 | 有效 | AVX512 VP2INTERS在偶数/偶数对口罩登记册中存储zmm3/m512/m32bcst和zmm2中dwords之间值匹配位置的指标。 |
EVEX.NDS.128.F2.0F38.W1 68 /r | VP2INTERSECTQ k1+1, xmm2, xmm3/m128/m64bcst | A | 有效 | 有效 | AVX512 VP2INTERS在偶数/偶数对口罩登记册中存储xmm3/m128/m64bcst和xmm2四字之间值匹配位置的指标。 |
EVEX.NDS.256.F2.0F38.W1 68 /r | VP2INTERSECTQ k1+1, ymm2, ymm3/m256/m64bcst | A | 有效 | 有效 | AVX512 VP2INTERS在偶数/偶数对口罩登记册中存储ymm3/m256/m64bcst和ymm2四字之间值匹配位置的指标。 |
EVEX.NDS.512.F2.0F38.W1 68 /r | VP2INTERSECTQ k1+1, zmm2, zmm3/m512/m64bcst | A | 有效 | 有效 | AVX512 VP2INTERS在偶数/偶数对口罩登记册中存储zmm3/m512/m64bcst和zmm2四字之间值匹配位置的指标。 |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
A
modrm.regescrituraModRM 字节的 reg 字段(第 5-3 位)evex.vvvvlecturaEVEX 前缀的 vvvv 字段(按位取反)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
Tupla: Full
实测开销
正在从 arch-data 加载实测数据...
说明
此指令会写一个偶数/ 偶数的口罩登记簿 。 MODRM.REG字段所示的面具注册目的地用于构成注册对的基础. 该字段的低位被遮蔽( 设置为零) 以创建对子的第一个寄存器 。
EVEX.aaa and EVEX.z must be zero.
行动
VP2INTERSECTD destmask, src1, src2
(KL, VL) = (4, 128), (8, 256), (16, 512)
// dest_mask_reg_id is the register id specified in the instruction for destmask
dest_base := dest_mask_reg_id & ~1
// maskregs[ ] is an array representing the mask registers
maskregs[dest_base+0][MAX_KL-1:0] := 0
maskregs[dest_base+1][MAX_KL-1:0] := 0
FOR i := 0 to KL-1:
FOR j := 0 to KL-1:
match := (src1.dword[i] == src2.dword[j])
maskregs[dest_base+0].bit[i] |= match
maskregs[dest_base+1].bit[j] |= match
VP2INTERSECTQ destmask, src1, src2
(KL, VL) = (2, 128), (4, 256), (8, 512)
// dest_mask_reg_id is the register id specified in the instruction for destmask
dest_base := dest_mask_reg_id & ~1
// maskregs[ ] is an array representing the mask registers
maskregs[dest_base+0][MAX_KL-1:0] := 0
maskregs[dest_base+1][MAX_KL-1:0] := 0
FOR i = 0 to KL-1:
FOR j = 0 to KL-1:
match := (src1.qword[i] == src2.qword[j])
maskregs[dest_base+0].bit[i] |= match
maskregs[dest_base+1].bit[j] |= matchIntel C/C++ 内在编译器
VP2INTERSECTD void _mm_2intersect_epi32(__m128i, __m128i, __mmask8 *, __mmask8 *);
VP2INTERSECTD void _mm256_2intersect_epi32(__m256i, __m256i, __mmask8 *, __mmask8 *);
VP2INTERSECTD void _mm512_2intersect_epi32(__m512i, __m512i, __mmask16 *, __mmask16 *);
VP2INTERSECTQ void _mm_2intersect_epi64(__m128i, __m128i, __mmask8 *, __mmask8 *);
VP2INTERSECTQ void _mm256_2intersect_epi64(__m256i, __m256i, __mmask8 *, __mmask8 *);
VP2INTERSECTQ void _mm512_2intersect_epi64(__m512i, __m512i, __mmask8 *, __mmask8 *);SIMD 浮点 例外
None.
其他例外
参见表2-52"Type E4NF类例外条件".