use*_*429 5 x86 inline-assembly icc intel-mic
出于测试目的,我正在使用Icc内联汇编程序为Intel的Xeon Phi编写简短的汇编代码段.现在我想使用屏蔽向量指令,但是我无法将它们提供给内联汇编程序.
对于这样的代码:
vmovapd -64(%%r14, %%r10), %%zmm0{%%k1}
Run Code Online (Sandbox Code Playgroud)
我收到错误消息
/tmp/icpc5115IWas_.s: Assembler messages:
/tmp/icpc5115IWas_.s:563: Error: junk `%k1' after register
Run Code Online (Sandbox Code Playgroud)
我尝试了很多不同的组合,但没有任何效果.Linux下的编译器版本是intel64/13.1up03,使用GAS语法.
编辑:上面的代码实际上适用于非扩展汇编程序.所以这:
__asm__("vmovapd -64(%r14, %r10), %zmm0{%k1} ")
Run Code Online (Sandbox Code Playgroud)
有效,而以下情况不是:
__asm__("vmovapd -64(%[src], %%r10), %%zmm0{%%k1} "
:
: [src]"r"(src)
:)
Run Code Online (Sandbox Code Playgroud)
我想这与在扩展模式下在寄存器名称之前使用double%的必要性有关.但不,k的单个%也不起作用.
我在英特尔开发人员专区http://software.intel.com/en-us/forums/topic/499145#comment-1776563中提出了同样的问题,答案是,为了在Xeon Phi上使用掩码寄存器在扩展内联汇编程序中,您必须在掩码寄存器修饰符周围使用双花括号.
vmovapd %%zmm30, (%%r15, %%r10){{%%k1}}
Run Code Online (Sandbox Code Playgroud)