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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top