I'm observing some run-time/compile issues with the use of the VPMOVSXWD instruction.When code is compiled with early ICL11.1.035 (beta)codecompiles fine but get run-time error (Illegal Instruction Excep...).
Now when/if I use ICL11.1.065 or latest 12.0, code fails to compile with the error msg; "Unsupported instruction form in asm instruction vpmovsxwd."
Here ishow I'm using the instruction:
vpmovdqa xmm1, [esi]
vpmovsxwd ymm1,xmm1 //<-- yields run-time erroror compiler error
Manualreference use for instruction is:
VPMOVSXWD ymm1, xmm2/m128-- VEX.256.66.0F38 23 /r V/V AVX_1_x Sign extend 8 packed 16-bit integers in the low 16 bytes of xmm2/m128 to 8 packed 32-bit integers in ymm1
The main question here is why I can compile with earlier version of compiler that has AVX support but code fails at run-time?
Is code failing to compile with latest compiler (11.1.065 or 12.0) due to manner in which ASM is being used (eg. loading xmm1 with double-quad words instead of native 16-bit ints)
AVX support for this instruction is now disallowed?
Appreciate your feedback.
In short, the instruction format you are trying is not legal, try pmovsxwd xmm1,xmm1
vpmovsxwd xmm1, xmm2/m64.
It may have passed earlier version of compilers but latest compiler is right in catching it at compile time.