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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top