简体   繁体   English

什么是 JKZD 和 JKNZD?

[英]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 ? ZNZ可能分别表示零而不是零, J可能代表跳跃,但KD ?

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, rel32jkzd 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,k1kortest 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM