你如何标记ASM代码?
How do you Mark ASM code?
我正在尝试标记我的 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
..............
标签已删除。你有什么建议吗?是否存在通用提示?
谢谢
默认情况下,clang 将使用其集成的 llvm 汇编程序,但这可以通过命令行选项 -fno-integrated-as
.
禁用
将此与 -S
一起指定应该会保留内联 asm 中的注释。 运行 clang -S -O3 -fno-integrated-as
代码示例
#include <cmath>
#define ASM_LABEL(label) asm ("#" label "\n\t" ::: "memory");
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")
}
给出程序集(省略指令和标签):
pushq %rbx
movq %rsi, %rbx
#APP
#START
#NO_APP
movsd 24(%rdi), %xmm0
divsd 32(%rdi), %xmm0
addsd 8(%rdi), %xmm0
addsd (%rbx), %xmm0
movsd %xmm0, (%rbx)
movsd (%rdi), %xmm0
callq exp
movsd %xmm0, 8(%rbx)
#APP
#STOP
#NO_APP
popq %rbx
retq
我正在尝试标记我的 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
..............
标签已删除。你有什么建议吗?是否存在通用提示?
谢谢
默认情况下,clang 将使用其集成的 llvm 汇编程序,但这可以通过命令行选项 -fno-integrated-as
.
将此与 -S
一起指定应该会保留内联 asm 中的注释。 运行 clang -S -O3 -fno-integrated-as
代码示例
#include <cmath>
#define ASM_LABEL(label) asm ("#" label "\n\t" ::: "memory");
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")
}
给出程序集(省略指令和标签):
pushq %rbx
movq %rsi, %rbx
#APP
#START
#NO_APP
movsd 24(%rdi), %xmm0
divsd 32(%rdi), %xmm0
addsd 8(%rdi), %xmm0
addsd (%rbx), %xmm0
movsd %xmm0, (%rbx)
movsd (%rdi), %xmm0
callq exp
movsd %xmm0, 8(%rbx)
#APP
#STOP
#NO_APP
popq %rbx
retq