我正在尝试使用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。