Почему моя программа с маркерами IACA компилируется, а не при первой компиляции в сборку?

Я пытаюсь выполнить профилирование кода с помощью Intel IACA. Я использовал этот вопрос переполнения стека, чтобы настроить производителей. У меня проблема в том, что если я использую 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.

Причина, по которой я хочу это сделать, заключается в том, что я хочу использовать IACA для кода на языке FORTRAN, поэтому я не могу использовать файл заголовка c. Я должен иметь возможность размещать маркеры в 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
}

Makefile:

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 выдаст вышеуказанную ошибку.

Я использую 64-битную Ubuntu 14.10 на Intel Xeon-2699 и gcc 4.9.1.

0 ответов

Другие вопросы по тегам