Syntaxe de montage pour vecteur masqué Intel AVX-512 Instructions
-
21-12-2019 - |
Question
À des fins de test, j'écris des extraits d'assemblage courts pour le Xeon Phi d'Intel avec l'assembleur en ligne ICC.Maintenant, je voulais utiliser des instructions de vecteur masqué, mais j'échoue à les nourrir à l'assembleur en ligne.
pour code comme celui-ci:
vmovapd -64(%%r14, %%r10), %%zmm0{%%k1}
I Obtenir le message d'erreur
/tmp/icpc5115IWas_.s: Assembler messages:
/tmp/icpc5115IWas_.s:563: Error: junk `%k1' after register
J'ai essayé beaucoup de combinaisons différentes, mais rien n'a travaillé.La version du compilateur est Intel64 / 13.1UP03 sous Linux, en utilisant la syntaxe de gaz.
Edit: Le code ci-dessus fonctionne réellement avec un assembleur non étendu.Donc ceci:
__asm__("vmovapd -64(%r14, %r10), %zmm0{%k1} ")
fonctionne, tandis que ce qui suit ne fonctionne pas:
__asm__("vmovapd -64(%[src], %%r10), %%zmm0{%%k1} "
:
: [src]"r"(src)
:)
Je suppose que cela a quelque chose à voir avec la nécessité d'utiliser un double% avant d'enregistrer les noms en mode étendu.Mais non, un seul% pour le K ne fonctionne pas non plus.
La solution
J'ai posé la même question dans la zone Intel Developer Zone http://software.intel.com/en-us/forums/topic/499145#Comment-1776563 , la réponse est que, afin d'utiliser les registres de masque sur le Xeon Phi dans l'assembleur en ligne étendu, vous devezUtilisez des bretelles à double frison autour du modificateur de registre de masque.
vmovapd %%zmm30, (%%r15, %%r10){{%%k1}}
Autres conseils
Je pense que vous devez utiliser la variante masquée de l'instruction: vmaskmovpd