Sintassi del montaggio per vettore mascherato Intel AVX-512 istruzioni
-
21-12-2019 - |
Domanda
Ai fini del test, sto scrivendo frammenti di montaggio corti per Xeon PHI di Intel con l'assemblatore in linea ICC.Ora volevo usare istruzioni vettoriali mascherate, ma fallisco a nutrireli all'Assemblatore Inline.
Per il codice come questo:
vmovapd -64(%%r14, %%r10), %%zmm0{%%k1}
.
ottengo il messaggio di errore
/tmp/icpc5115IWas_.s: Assembler messages:
/tmp/icpc5115IWas_.s:563: Error: junk `%k1' after register
.
Ho provato un sacco di combinazioni diverse, ma niente ha funzionato.La versione del compilatore è Intel64 / 13.1UP03 sotto Linux, utilizzando la sintassi del gas
Modifica: il codice sopra intera effettivamente con assemblatore non esteso.Quindi questo:
__asm__("vmovapd -64(%r14, %r10), %zmm0{%k1} ")
.
funziona, mentre il seguente non è:
__asm__("vmovapd -64(%[src], %%r10), %%zmm0{%%k1} "
:
: [src]"r"(src)
:)
.
Immagino che abbia qualcosa a che fare con la necessità di utilizzare un doppio% prima di registrare i nomi in modalità estesa.Ma no, un solo% per la K non funziona neanche.
Soluzione
Ho chiesto la stessa domanda nella zona di sviluppo Intel http://software.intel.com/en-us/forums/topic/499145#comment-1776563 , la risposta è, che per utilizzare i registri della maschera su Xeon PHI in Assembler in linea esteso, deviUtilizzare bretelle doppie ricci attorno al modificatore del registro della maschera.
vmovapd %%zmm30, (%%r15, %%r10){{%%k1}}
. Altri suggerimenti
Penso che tu sia necessario utilizzare la variante mascherata dell'istruzione: vmaskmovpd