KTESTW, KTESTB, KTESTQ, KTESTD

已包装的位测试面罩和设置旗

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
VEX.L0.0F.W0 99 /rKTESTW k1, k2RR有效有效根据16位元面具OR AVX10.1的标志位AND和ANDN的注册源设置ZF和CF.
VEX.L0.66.0F.W0 99 /rKTESTB k1, k2RR有效有效根据8位元的符号比特AND和ANDN的mag-OR AVX10.1 ister源设置ZF和CF.
VEX.L0.0F.W1 99 /rKTESTQ k1, k2RR有效有效根据64位元面具 OR AVX10.1 的标志位 AND 和 ANDN 设置 ZF 和 CF 注册源.
VEX.L0.66.0F.W1 99 /rKTESTD k1, k2RR有效有效根据32位元面具OR AVX10.1寄存源的符号位AND和ANDN设定ZF和CF.

操作数编码

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

RR

  1. modrm.reg lecturaModRM 字节的 reg 字段(第 5-3 位)
  2. modrm.rm lecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移

实测开销

正在从 arch-data 加载实测数据...

说明

对第一源操作数的位点和第二源操作数的对应位点进行比数比较. 如果AND操作产生所有零,则ZF被另设定为ZF清晰. 如果使用第二源操作数的反向第一源操作数的位元AND操作产生所有零,则CF会被另设定为CF清晰. 只有 EFLAGS 登记册更新 。

说明: 在VEX-encoded版本中,VEX.vvvv是保留的,必须是1111b,否则指令会#UD.

行动

KTESTW
TEMP[15:0] := SRC2[15:0] AND SRC1[15:0]
IF (TEMP[15:0] = = 0)

    THEN ZF :=1;
    ELSE ZF := 0;
FI;
TEMP[15:0] := SRC2[15:0] AND NOT SRC1[15:0]
IF (TEMP[15:0] = = 0)
    THEN CF :=1;
    ELSE CF := 0;
FI;
AF := OF := PF := SF := 0;

KTESTB
TEMP[7:0] := SRC2[7:0] AND SRC1[7:0]
IF (TEMP[7:0] = = 0)

    THEN ZF :=1;
    ELSE ZF := 0;
FI;
TEMP[7:0] := SRC2[7:0] AND NOT SRC1[7:0]
IF (TEMP[7:0] = = 0)
    THEN CF :=1;
    ELSE CF := 0;
FI;
AF := OF := PF := SF := 0;


KTESTQ
TEMP[63:0] := SRC2[63:0] AND SRC1[63:0]
IF (TEMP[63:0] = = 0)

    THEN ZF :=1;
    ELSE ZF := 0;
FI;
TEMP[63:0] := SRC2[63:0] AND NOT SRC1[63:0]
IF (TEMP[63:0] = = 0)
    THEN CF :=1;
    ELSE CF := 0;
FI;
AF := OF := PF := SF := 0;

KTESTD
TEMP[31:0] := SRC2[31:0] AND SRC1[31:0]
IF (TEMP[31:0] = = 0)

    THEN ZF :=1;
    ELSE ZF := 0;
FI;
TEMP[31:0] := SRC2[31:0] AND NOT SRC1[31:0]
IF (TEMP[31:0] = = 0)
    THEN CF :=1;
    ELSE CF := 0;
FI;
AF := OF := PF := SF := 0;

SIMD 浮点 例外

None.

其他例外

参见表2-65"TYPE K20例外定义(VEX-Encoded Opmask Directions w/o Memory Arg)".

来源