【问题标题】:What does brace "{" mean in AT&T assembly大括号“{”在 AT&T 汇编中是什么意思
【发布时间】:2013-06-26 09:24:48
【问题描述】:

我正在使用英特尔至强融核。 我像

一样编译程序
icpc -mmic -S xxxx.cpp

汇编代码中有一些我不理解的语法。

     vgetmantpd $0, %zmm2, %zmm9{%k3}                        #85.59 c79
     vsubpd    %zmm11, %zmm10, %zmm12{%k3}                   #85.59 c83
     vpminsd   %zmm14{aaaa}, %zmm12, %zmm13                  #85.59 c87
     vcvtpd2ps {rz-sae}, %zmm9, %zmm6{%k3}                   #85.59 c91
     vpminud   %zmm14{bbbb}, %zmm13, %zmm15                  #85.59 c95

%zmm12{%k3} 中的“{”/“}”是什么意思。 什么是 %k3? %zmm14{bbbb} 是什么?

【问题讨论】:

  • {aaaa}{bbbb} 是 swizzle 说明符。 {%k3} 指定应使用掩码寄存器k3 选择应将操作应用于向量的哪些元素。有关详细信息,请参阅the documentation
  • @Michael:把它作为分数的答案;-)
  • 这个答案似乎太模糊了,所以我做了评论。如果其他人想详细说明 swizzling 和 masking 如何在答案中发挥作用,请随时这样做。

标签: assembly intel cpu-registers


【解决方案1】:

Michael 在三点上都是正确的:

1) {aaaa} 和 {bbbb} 是操作数限定符,它们指示输入寄存器(zmm14,在这两种情况下)的每个“通道”以特定方式“混合”(“{aaaa}”表示每个泳道的低阶元素要复制到泳道的所有四个“元素”,所以如果包含zmm14,从高阶到低阶,160、150、140、130、120、110、100、90、 80, 70, 60, 50, 40, 30, 20, 10; 那么 zmm14{aaaa} 将是 130, 130, 130, 130, 90, 90, 90, 90, 50, 50, 50, 50, 10, 10 , 10, 10; 和 zmm14{bbbb} 将是 140, 140, 140, 140, 100, 100, 100, 100, 60, 60, 60, 60, 20, 20, 20, 20. zmm14{dcba} 是默认 swizzle,即和刚才说的 zmm14 一样,根本不是 swizzle。)

2) {k3} 操作数限定符意味着仅更改输出寄存器(zmm9,在最上面的指令中)中设置了 k3 掩码寄存器中相应位的那些元素;保持 zmm9 中的所有其他元素不变。

3) 而且迈克尔也完全确定了你真的无法预测所有这些东西的目标。您将需要研究架构文档,因为 Xeon Phi VPU 架构与 MMX 和 SSE 有很大不同。引入掩码寄存器(用作控制哪些元素被修改的谓词)、混合、广播和上下转换。在 Michael 链接的文档中,介绍此级别 Xeon Phi 架构的相关章节是第 7 章。您可能会阅读的另一个文档是:http://software.intel.com/en-us/articles/intel-xeon-phi-coprocessor-vector-microarchitecture

在您的确切查询或 Michael 的回复中没有提到 {rz-sae} 指令限定符意味着该指令应该执行向零舍入,并且应该静默处理算术异常。

问候, 布莱恩·尼克森

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-14
    • 2011-09-30
    • 2013-09-10
    • 1970-01-01
    • 2013-05-28
    • 2012-01-12
    • 2011-01-07
    相关资源
    最近更新 更多