[英]What are JKZD and JKNZD?
Looking through Zydis ( https://github.com/zyantific/zydis/blob/57be5b1d1b9dd99830b89caac928add64ad5d072/include/Zydis/Generated/EnumMnemonic.h ) mnemonics I found these:浏览 Zydis( https://github.com/zyantific/zydis/blob/57be5b1d1b9dd99830b89caac928add64ad5d072/include/Zydis/Generated/EnumMnemonic.h )助记符我发现了这些:
ZYDIS_MNEMONIC_JKNZD,
ZYDIS_MNEMONIC_JKZD,
I couldn't find these mnemonics anywhere else;我在其他任何地方都找不到这些助记符; what instructions do they represent?
它们代表什么指令?
What operations do these instructions perform?这些指令执行什么操作?
Z
and NZ
would likely indicate zero and not zero respectively, and J
likely stands for jump, but K
and D
? Z
和NZ
可能分别表示零而不是零, J
可能代表跳跃,但K
和D
?
Edit: I found this old intel document, but it makes no sense:编辑:我找到了这个旧的英特尔文档,但没有任何意义:
http://www.cism.ucl.ac.be/Services/Formations/ICS/ics_2013.0.028/vtune_amplifier_xe/documentation/en/instructions/327364001EN.pdf http://www.cism.ucl.ac.be/Services/Formations/ICS/ics_2013.0.028/vtune_amplifier_xe/documentation/en/instructions/327364001EN.pdf
It states (page 75) that JKZD is encoded as VEX.NDS.128.0F.W0 84 id.它指出(第 75 页)JKZD 被编码为 VEX.NDS.128.0F.W0 84 id。
You already answered your own question with that Intel Knight's Corner link.您已经通过 Intel Knight's Corner 链接回答了您自己的问题。 KNC had its own version of what later became AVX-512, with incompatible machine-code encodings.
KNC 拥有自己的后来成为 AVX-512 的版本,具有不兼容的机器代码编码。
As documented in that Intel manual, KNC had instructions like jrcxz
but for mask registers (which KNC and AVX-512 call k0..k7
) to let you compare-and-branch in one instruction on a vector compare-into-mask result.正如英特尔手册中所述,KNC 有类似
jrcxz
指令,但对于掩码寄存器(KNC 和 AVX-512 调用k0..k7
),让您可以在向量比较到掩码结果的一条指令中进行比较和分支。 JKZD - Jump near if mask is zero. JKZD - 如果掩码为零,则跳近。 It has 2 forms,
jkzd k1, rel32
and jkzd k1, rel8
它有两种形式,
jkzd k1, rel32
和jkzd k1, rel8
These are not standard instructions and don't appear in Intel's mainstream manuals (which include AVX-512).这些不是标准说明,也不会出现在英特尔的主流手册(包括 AVX-512)中。 In AVX-512, you branch on a mask register value with
ktest k1,k1
or kortest k1,k1
to set regular FLAGS, then use a regular branch condition.在 AVX-512 中,您使用
ktest k1,k1
或kortest k1,k1
对掩码寄存器值进行ktest k1,k1
以设置常规 FLAGS,然后使用常规分支条件。 (With unrolling to get 2 vector compare results, you can branch on either of them being non-zero with kortest k1,k2
with 2 separate registers.) (通过展开以获得 2 个向量比较结果,您可以使用
kortest k1,k2
和 2 个单独的寄存器将它们中的任何一个作为非零分支。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.