Hi *_* SO 1 x86 assembly x86-64 disassembly xeon-phi
浏览 Zydis(https://github.com/zyantific/zydis/blob/57be5b1d1b9dd99830b89caac928add64ad5d072/include/Zydis/Generated/EnumMnemonic.h)助记符我发现了这些:
ZYDIS_MNEMONIC_JKNZD,
ZYDIS_MNEMONIC_JKZD,
Run Code Online (Sandbox Code Playgroud)
我在其他任何地方都找不到这些助记符;它们代表什么指令?
这些指令执行什么操作?
Z
andNZ
可能分别表示零和不为零,并且J
可能代表跳跃,但是K
和D
?
编辑:我找到了这个旧的英特尔文档,但没有任何意义:
它指出(第 75 页)JKZD 被编码为 VEX.NDS.128.0F.W0 84 id。
您已经通过 Intel Knight's Corner 链接回答了您自己的问题。KNC 拥有自己的后来成为 AVX-512 的版本,具有不兼容的机器代码编码。
正如英特尔手册中所记录的那样,KNC 有类似jrcxz
但用于掩码寄存器(KNC 和 AVX-512 调用k0..k7
)的指令,让您可以在向量比较到掩码结果的一条指令中进行比较和分支。JKZD - 如果掩码为零,则跳近。它有2种形式,jkzd k1, rel32
和jkzd k1, rel8
这些不是标准说明,也不会出现在英特尔的主流手册(包括 AVX-512)中。在 AVX-512 中,您使用ktest k1,k1
或kortest k1,k1
设置常规 FLAGS对掩码寄存器值进行分支,然后使用常规分支条件。(通过展开以获得 2 个向量比较结果,您可以使用 2 个单独的寄存器将它们中的任何一个作为非零分支kortest k1,k2
。)
归档时间: |
|
查看次数: |
135 次 |
最近记录: |