Assembleia sintaxe para mascarado vetor Intel AVX-512 instruções
-
21-12-2019 - |
Pergunta
Para fins de teste, estou escrevendo curto montagem de trechos para Intel Xeon Phi com o Tpi inline assembler.Agora eu queria usar o mascarado vetor de instruções, mas eu falhar em alimentá-los para o inline assembler.
Para o código como este:
vmovapd -64(%%r14, %%r10), %%zmm0{%%k1}
Eu recebo a mensagem de erro
/tmp/icpc5115IWas_.s: Assembler messages:
/tmp/icpc5115IWas_.s:563: Error: junk `%k1' after register
Eu tentei um monte de combinações diferentes, mas nada funcionou.A versão do compilador é intel64/13.1up03 no Linux, usando o GÁS de sintaxe.
Editar:O código acima funciona, na verdade, com o não-estendidas assembler.Portanto, esta:
__asm__("vmovapd -64(%r14, %r10), %zmm0{%k1} ")
funciona, embora não:
__asm__("vmovapd -64(%[src], %%r10), %%zmm0{%%k1} "
:
: [src]"r"(src)
:)
Eu acho que ele tem algo a ver com a necessidade de utilizar um casal % antes de registrar os nomes de modo estendido.Mas não, uma única % para o k não funciona.
Solução
Eu perguntei a mesma pergunta no Intel Developer zone http://software.intel.com/en-us/forums/topic/499145#comment-1776563, a resposta é, de que para usar a máscara de registros no Xeon Phi, no estendida inline assembler, você tem que usar chaves duplas ao redor do registrador de máscara de modificador.
vmovapd %%zmm30, (%%r15, %%r10){{%%k1}}
Outras dicas
Eu acho que você precisa usar o mascarado variante da instrução:VMASKMOVPD