为了测试目的,我正在使用Icc内联汇编器编写Intel Xeon Phi的短汇编片段。现在,我想使用掩码向量指令,但是我无法将它们传递给内联汇编器。
对于这样的代码:
vmovapd -64(%%r14, %%r10), %%zmm0{%%k1}
我收到了错误消息。
/tmp/icpc5115IWas_.s: Assembler messages:
/tmp/icpc5115IWas_.s:563: Error: junk `%k1' after register
我尝试了很多不同的组合,但都没有成功。编译器版本是使用GAS语法的Linux下的intel64/13.1up03。
编辑:上面的代码实际上适用于非扩展汇编。所以这个:
__asm__("vmovapd -64(%r14, %r10), %zmm0{%k1} ")
这个有效,而下面的则不行:
__asm__("vmovapd -64(%[src], %%r10), %%zmm0{%%k1} "
:
: [src]"r"(src)
:)
我猜这与在扩展模式下使用双个百分号来注册名称有关。但是,使用单个百分号也无法为k工作。
add {%0, %1 | %1, %0}
,以编写适用于AT&T或Intel的代码,因此您可以使用或不使用-masm = intel
编译它。 - Peter Cordes{
转义为%{
,例如"... %{%%k1%} \n"
。 - Peter Cordes