你如何标记ASM代码?

时间:2015-05-07 11:14:52

标签: assembly clang

我正在尝试标记我的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
    ..............

标签已被删除。你有什么建议吗?是否存在通用提示?

谢谢

1 个答案:

答案 0 :(得分:1)

默认情况下,

clang将使用其集成的llvm汇编程序,但可以使用命令行选项int main( int argc, char * argv[] ) { check(argc,argv); lista *head=stworz_liste(argv[5]); printf("\n%s",head->line); free (head); return 0; } 禁用它。

将此项与-fno-integrated-as一起指定应保留内联asm的注释。在代码示例上运行-S

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")
}