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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top