为了测试目的,我正在为Intel的Xeon和Icc内联汇编程序编写简短的程序集片段。现在我想要使用蒙面向量指令,但是我无法将它们提供给内联汇编程序。
对于这样的代码:
vmovapd -64(%%r14, %%r10), %%zmm0{%%k1} 我得到了错误信息
/tmp/icpc5115IWas_.s: Assembler messages:
/tmp/icpc5115IWas_.s:563: Error: junk `%k1' after register我尝试了很多不同的组合,但都没有效果。编译器版本在Linux下是智能化64/13.1up03,使用GAS语法。
编辑:上面的代码实际上适用于非扩展汇编程序。所以这个:
__asm__("vmovapd -64(%r14, %r10), %zmm0{%k1} ")工作,而以下内容不起作用:
__asm__("vmovapd -64(%[src], %%r10), %%zmm0{%%k1} "
:
: [src]"r"(src)
:)我想这与在扩展模式注册名称之前使用双%的必要性有关。但是不,k的单一%也不起作用。
发布于 2014-01-13 11:32:13
我在inline http://software.intel.com/en-us/forums/topic/499145#comment-1776563中问了同样的问题,答案是,为了在扩展内联汇编程序中使用Xeon上的掩码寄存器,您必须在掩码寄存器修饰符周围使用双大括号。
vmovapd %%zmm30, (%%r15, %%r10){{%%k1}}发布于 2014-01-10 14:28:33
我认为您需要使用指令的蒙面变体: VMASKMOVPD
https://stackoverflow.com/questions/21032395
复制相似问题