Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Employee
42 Views

Possible issues with VPMOVSXWD (VEX.256)

Hi,

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:

movesi,ptrSrc
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)

or
AVX support for this instruction is now disallowed?

Appreciate your feedback.

Thanks,

Eli

0 Kudos
2 Replies
Highlighted
New Contributor II
42 Views

Don't know which spec you are looking at, but pmovsx instruction is integer instruction and AVX 256 bit is only for FP instruction. so you can't encode it for 256 bits

In short, the instruction format you are trying is not legal, try pmovsxwd xmm1,xmm1
0 Kudos
Highlighted
42 Views

As Neni said this instruction is 128bit only with VEX perfix

vpmovsxwd xmm1, xmm2/m64.

It may have passed earlier version of compilers but latest compiler is right in catching it at compile time.
0 Kudos