【发布时间】:2015-05-07 11:14:52
【问题描述】:
我正在尝试标记我的 ASM(由编译器生成)以在我的标记我的分析与相应的 .s 文件之间进行延迟分析。以下 MACRO 适用于 GCC
#define ASM_LABEL(label) asm ("#" label "\n\t")
尽管如此,使用 CLANG 会删除标签。
void kernel(double const * x, double * y){
ASM_LABEL (START)
y[0]+=x[1]+x[3]/x[4];
y[1] = std::exp(x[0]);
ASM_LABEL (STOP)
}
生成的 ASM (clang -O3 -S) 给出:
movq %rdi, -8(%rbp)
movq %rsi, -16(%rbp)
## InlineAsm Start
## InlineAsm End <---- no START mark
movq -8(%rbp), %rsi
movsd 8(%rsi), %xmm0
movq -8(%rbp), %rsi
..............
标签已被删除。你有什么建议吗?是否存在通用提示?
谢谢
【问题讨论】:
-
添加
volatile?我认为无论如何您都会在生成的 asm 中获得行号。另请注意,优化的代码甚至可能不会映射到单个程序集块... -
如果
gcc语义被保留,asm语句中缺少输出变量会使语句volatile隐含。 (参考:gcc extended asm documentation)