VP2INTERSECTD, VP2INTERSECTQ

计算 DWORDS / QUADWORDS 之间的间断

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
EVEX.NDS.128.F2.0F38.W0 68 /rVP2INTERSECTD k1+1, xmm2, xmm3/m128/m32bcstA有效有效AVX512 VP2INTERS在偶数/偶数对口罩登记册中存储xmm3/m128/m32bcst和xmm2中dwords之间值匹配位置的指标。
EVEX.NDS.256.F2.0F38.W0 68 /rVP2INTERSECTD k1+1, ymm2, ymm3/m256/m32bcstA有效有效AVX512 VP2INTERS在偶数/偶数对口罩登记册中存储ymm3/m256/m32bcst和ymm2中dwords之间值匹配位置的指标。
EVEX.NDS.512.F2.0F38.W0 68 /rVP2INTERSECTD k1+1, zmm2, zmm3/m512/m32bcstA有效有效AVX512 VP2INTERS在偶数/偶数对口罩登记册中存储zmm3/m512/m32bcst和zmm2中dwords之间值匹配位置的指标。
EVEX.NDS.128.F2.0F38.W1 68 /rVP2INTERSECTQ k1+1, xmm2, xmm3/m128/m64bcstA有效有效AVX512 VP2INTERS在偶数/偶数对口罩登记册中存储xmm3/m128/m64bcst和xmm2四字之间值匹配位置的指标。
EVEX.NDS.256.F2.0F38.W1 68 /rVP2INTERSECTQ k1+1, ymm2, ymm3/m256/m64bcstA有效有效AVX512 VP2INTERS在偶数/偶数对口罩登记册中存储ymm3/m256/m64bcst和ymm2四字之间值匹配位置的指标。
EVEX.NDS.512.F2.0F38.W1 68 /rVP2INTERSECTQ k1+1, zmm2, zmm3/m512/m64bcstA有效有效AVX512 VP2INTERS在偶数/偶数对口罩登记册中存储zmm3/m512/m64bcst和zmm2四字之间值匹配位置的指标。

操作数编码

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

A

  1. modrm.reg escrituraModRM 字节的 reg 字段(第 5-3 位)
  2. evex.vvvv lecturaEVEX 前缀的 vvvv 字段(按位取反)
  3. modrm.rm lecturaModRM 字节的 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] |= match

Intel 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类例外条件".

来源