PTEST
逻辑比较
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
66 0F 38 17 /r | PTEST xmm1, xmm2/m128 | RM | 有效 | 有效 | 设置 ZF 如果 xmm2/m128 AND xmm1 结果都是 0s. 如果 xmm2/m128 AND NOT xmm1结果都是 0s. |
VEX.128.66.0F38.WIG 17 /r | VPTEST xmm1, xmm2/m128 | RM | 有效 | 有效 | 根据来源的位元AND和ANDN设置ZF和CF. |
VEX.256.66.0F38.WIG 17 /r | VPTEST ymm1, ymm2/m256 | RM | 有效 | 有效 | 根据来源的位元AND和ANDN设置ZF和CF. |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
RM
modrm.reglecturaModRM 字节的 reg 字段(第 5-3 位)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
实测开销
正在从 arch-data 加载实测数据...
涉及的标志位
CF进位PF奇偶AF辅助进位ZF零SF符号OF溢出
说明
PTEST和VPTEST如果结果中的所有位点都是第一源操作数(第一操作数)的位点AND的0和第二源操作数(第二操作数),则设置ZF旗. VPTEST设定了CF旗,如果结果中的所有位点都是第二源运行符(第二源运行符)的位元AND的0,以及目的地运行符的逻辑NOT.
第一个源寄存器由ModR/M reg字段指定.
128位版本 : 第一个来源登记册是XMM登记册。 第二个来源寄存器可以是XMM寄存器,也可以是128位的内存位置寄存器. 目的地登记册没有修改 。
VEX.256 编码版本 : 第一个来源登记册是YMM登记册。 第二个来源寄存器可以是YMM寄存器或256位内存位置寄存器. 目的地登记册没有修改 。
说明: 在VEX-encoded版本中,VEX.vvvv是保留的,必须是1111b,否则指令会#UD.
行动
(V)PTEST (128-bit Version)
IF (SRC[127:0] BITWISE AND DEST[127:0] = 0)
THEN ZF := 1;
ELSE ZF := 0;
IF (SRC[127:0] BITWISE AND NOT DEST[127:0] = 0)
THEN CF := 1;
ELSE CF := 0;
DEST (unmodified)
AF := OF := PF := SF := 0;
VPTEST (VEX.256 Encoded Version)
IF (SRC[255:0] BITWISE AND DEST[255:0] = 0) THEN ZF := 1;
ELSE ZF := 0;
IF (SRC[255:0] BITWISE AND NOT DEST[255:0] = 0) THEN CF := 1;
ELSE CF := 0;
DEST (unmodified)
AF := OF := PF := SF := 0;Intel C/C++ 内在编译器
PTEST int _mm_testz_si128 (__m128i s1, __m128i s2);
PTEST int _mm_testc_si128 (__m128i s1, __m128i s2);
PTEST int _mm_testnzc_si128 (__m128i s1, __m128i s2);
VPTEST int _mm256_testz_si256 (__m256i s1, __m256i s2);
VPTEST int _mm256_testc_si256 (__m256i s1, __m256i s2);
VPTEST int _mm256_testnzc_si256 (__m256i s1, __m256i s2);
VPTEST int _mm_testz_si128 (__m128i s1, __m128i s2);
VPTEST int _mm_testc_si128 (__m128i s1, __m128i s2);
VPTEST int _mm_testnzc_si128 (__m128i s1, __m128i s2);受影响的旗帜
OF,AF,PF,SF的旗帜被清除,ZF,CF的旗帜按照行动设置.
SIMD 浮点 例外
None.
其他例外
见表2-21,"第4类例外条件",另外:
#UD If VEX.vvvv 1111B.