1

我正在尝试使用英特尔的 IACA 进行一些代码分析。我已经使用这个 Stack Overflow 问题来设置制造商。我遇到的问题是,如果我使用 gcc 并直接从源代码编译到二进制文件,我很好。程序编译并且 IACA 工作正常。但是,如果我先使用 -S 编译为 asm,然后在其上使用 gcc,则会出现以下错误。

main.c: Assembler messages:
main.c:10: Error: no such instruction: `movl $111,%ebx'
main.c:13: Error: no such instruction: `movl $222,%ebx'

我承认这些是 IACA 注入的指令。但我不知道为什么当我首先编译为 asm 时它们只是一个问题。

我想这样做的原因是我希望能够在 FORTRAN 代码上使用 IACA,所以我无法使用 c 头文件。我应该可以手动将标记放在 asm 中,但之后我无法编译代码。

为了清楚起见,对于我在这里发布的代码,我只使用了头文件并得到了这个错误。我没有在 asm 中添加任何内容。刚编译成asm,然后编译成二进制。

主.c:

#include "iacaMarks.h"  
int main()
{
  int i = 0;
  float count = 0.0;

  for(i = 0; i < 123; i++){
    IACA_START
    count+=count;
  }
  IACA_END
}

生成文件:

asm:
        gcc -S main.c -I/home/lavin2/iaca-lin64/include/ -masm=intel
final:
        gcc main.s
all:
        gcc main.c -I/home/lavin2/iaca-lin64/include/

make all工作正常,然后 IACA 接受二进制文件并运行分析。make asm紧随其后make final会产生上述错误。

我在 Intel Xeon-2699 和 gcc 4.9.1 上运行 64 位 Ubuntu 14.10。

4

0 回答 0