为什么我的程序与IACA标记编译但不是在我首先编译到汇编时?

时间:2015-06-30 16:05:21

标签: c ubuntu gcc assembly iaca

我正在尝试使用Intel's IACA.进行一些代码分析。我使用this Stack Overflow question来设置制作者。我遇到的问题是,如果我使用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然后编译为二进制。

main.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。

0 个答案:

没有答案