x86: Support for AVX NE-CONVERT and VNNI
Author: CUB3DCreated Sep 14, 2026Updated Sep 16, 2026
LabelsFeature: Processor/x86Status: Triage
Is your feature request related to a problem? Please describe.
Ghidra currently can't disassemble the following instructions from the AVX_NE_CONVERT, AVX_VNNI_INT8 and AVX_VNNI_INT16 extensions.
Example:
int main() {
asm("VCVTNEEBF162PS (%rax), %ymm0");
asm("VCVTNEEBF162PS (%rax), %xmm0");
asm("VBCSTNEBF162PS (%rax), %xmm0");
asm("VBCSTNEBF162PS (%rax), %ymm0");
asm("VCVTNEEPH2PS (%rax), %ymm0");
asm("VCVTNEEPH2PS (%rax), %xmm0");
asm("VCVTNEOBF162PS (%rax), %xmm0");
asm("VCVTNEOBF162PS (%rax), %ymm0");
asm("VCVTNEOPH2PS (%rax), %ymm0");
asm("VCVTNEOPH2PS (%rax), %xmm0");
asm("VBCSTNEBF162PS (%rax), %ymm0");
asm("VBCSTNEBF162PS (%rax), %xmm0");
asm("VBCSTNESH2PS (%rax), %ymm0");
asm("VBCSTNESH2PS (%rax), %xmm0");
asm("VPDPBSSD (%rax), %xmm0, %xmm1");
asm("VPDPBSSD %xmm0, %xmm1, %xmm2");
asm("VPDPBSSD (%rax), %ymm0, %ymm1");
asm("VPDPBSSD %ymm0, %ymm1, %ymm2");
asm("VPDPBSSDS (%rax), %xmm0, %xmm1");
asm("VPDPBSSDS %xmm0, %xmm1, %xmm2");
asm("VPDPBSSDS (%rax), %ymm0, %ymm1");
asm("VPDPBSSDS %ymm0, %ymm1, %ymm2");
asm("VPDPBSUD (%rax), %xmm0, %xmm1");
asm("VPDPBSUD %xmm0, %xmm1, %xmm2");
asm("VPDPBSUD (%rax), %ymm0, %ymm1");
asm("VPDPBSUD %ymm0, %ymm1, %ymm2");
asm("VPDPBSUDS (%rax), %xmm0, %xmm1");
asm("VPDPBSUDS %xmm0, %xmm1, %xmm2");
asm("VPDPBSUDS (%rax), %ymm0, %ymm1");
asm("VPDPBSUDS %ymm0, %ymm1, %ymm2");
asm("VPDPBUUD (%rax), %xmm0, %xmm1");
asm("VPDPBUUD %xmm0, %xmm1, %xmm2");
asm("VPDPBUUD (%rax), %ymm0, %ymm1");
asm("VPDPBUUD %ymm0, %ymm1, %ymm2");
asm("VPDPBUUDS (%rax), %xmm0, %xmm1");
asm("VPDPBUUDS %xmm0, %xmm1, %xmm2");
asm("VPDPBUUDS (%rax), %ymm0, %ymm1");
asm("VPDPBUUDS %ymm0, %ymm1, %ymm2");
asm("VPDPWSSD (%rax), %xmm0, %xmm1");
asm("VPDPWSSD %xmm0, %xmm1, %xmm2");
asm("VPDPWSSD (%rax), %ymm0, %ymm1");
asm("VPDPWSSD %ymm0, %ymm1, %ymm2");
asm("VPDPWSSDS (%rax), %xmm0, %xmm1");
asm("VPDPWSSDS %xmm0, %xmm1, %xmm2");
asm("VPDPWSSDS (%rax), %ymm0, %ymm1");
asm("VPDPWSSDS %ymm0, %ymm1, %ymm2");
asm("VPDPWSUD (%rax), %xmm0, %xmm1");
asm("VPDPWSUD %xmm0, %xmm1, %xmm2");
asm("VPDPWSUD (%rax), %ymm0, %ymm1");
asm("VPDPWSUD %ymm0, %ymm1, %ymm2");
asm("VPDPWSUDS (%rax), %xmm0, %xmm1");
asm("VPDPWSUDS %xmm0, %xmm1, %xmm2");
asm("VPDPWSUDS (%rax), %ymm0, %ymm1");
asm("VPDPWSUDS %ymm0, %ymm1, %ymm2");
asm("VPDPWUSD (%rax), %xmm0, %xmm1");
asm("VPDPWUSD %xmm0, %xmm1, %xmm2");
asm("VPDPWUSD (%rax), %ymm0, %ymm1");
asm("VPDPWUSD %ymm0, %ymm1, %ymm2");
asm("VPDPWUSDS (%rax), %xmm0, %xmm1");
asm("VPDPWUSDS %xmm0, %xmm1, %xmm2");
asm("VPDPWUSDS (%rax), %ymm0, %ymm1");
asm("VPDPWUSDS %ymm0, %ymm1, %ymm2");
asm("VPDPWUUD (%rax), %xmm0, %xmm1");
asm("VPDPWUUD %xmm0, %xmm1, %xmm2");
asm("VPDPWUUD (%rax), %ymm0, %ymm1");
asm("VPDPWUUD %ymm0, %ymm1, %ymm2");
asm("VPDPWUUDS (%rax), %xmm0, %xmm1");
asm("VPDPWUUDS %xmm0, %xmm1, %xmm2");
asm("VPDPWUUDS (%rax), %ymm0, %ymm1");
asm("VPDPWUUDS %ymm0, %ymm1, %ymm2");
return 0;
}
Build with clang -c -O3 test.c
test.zip
Describe the solution you'd like Support for disassembling these instructions.
Describe alternatives you've considered Multiple other decompilers and disassemblers support these instructions.
Source: NationalSecurityAgency/ghidra