蒙版矢量英特尔AVX-512说明的组装语法
-
21-12-2019 - |
题
用于测试目的,我正在为英特尔的Xeon Phi编写短组件片段与ICC内联汇编程序。现在我想使用蒙版矢量指令,但我在将它们喂食到内联汇编程序时。
for代码如下:vmovapd -64(%%r14, %%r10), %%zmm0{%%k1}
.
我收到错误消息
/tmp/icpc5115IWas_.s: Assembler messages:
/tmp/icpc5115IWas_.s:563: Error: junk `%k1' after register
.
我尝试了很多不同的组合,但没有任何工作。编译器版本是Linux下的英特尔64 / 13.1up03,使用GAR Syntax。
编辑:上面的代码实际上适用于非扩展汇编程序。这是:
__asm__("vmovapd -64(%r14, %r10), %zmm0{%k1} ")
.
工作,虽然以下是:
__asm__("vmovapd -64(%[src], %%r10), %%zmm0{%%k1} "
:
: [src]"r"(src)
:)
.
我猜它与在扩展模式下使用寄存器名称之前使用双重%的必要性有关。但是,k的单个%不起作用。
解决方案
我在英特尔开发人员区域提出了同样的问题 http://software.intel.com/en-us/forums/topic/499145-/topic/4991456/496563 ,答案是,为了在扩展内联汇编程序中使用Xeon Phi上的蒙版寄存器,您必须使用掩模寄存器修饰符周围的双倍卷绕括号。
vmovapd %%zmm30, (%%r15, %%r10){{%%k1}}
. 其他提示
我认为你需要使用指令的蒙版变体:vmaskmovpd
不隶属于 StackOverflow