2012-02-16 1 views
0

У меня есть следующий код C с встроенным ассемблером в НКУ встроенного стиле сборкиКак использовать сборку gcc in icc?

asm goto("1: jmp %l[t_no]\n" 
     "2:\n" 
     ".section .altinstructions,\"a\"\n" 
     " .long 1b - .\n" 
     " .long 0\n" 
     " .word %P0\n" 
     " .byte 2b - 1b\n" 
     " .byte 0\n" 
     ".previous\n" 
     : : "i" (bit) : : t_no); 

Я хотел бы собрать его с ICC, но есть ошибка при компиляции:

error: invalid constant in assembly language instruction 
asm goto("1: jmp %l[t_no]\n" 

Как решить проблема? Спасибо.

+0

Для задачи СПМ: Если вы компиляции с GCC, я подозреваю, что вы Ждут» t есть метка t_no, определенная в вашем c-коде. Для icc, возможно, они не поддерживают указание таких меток. Вы пытались использовать 'jmp% l1'? –

ответ

0

Я считаю, что вы должны использовать опцию командной строки -fasm-blocks.

+0

Я знаю это, но ошибки случаются. Я считаю, что это проблема стиля AT & T и стиля Intel. – qpalz

0

icc поддерживает стили ассемблера Intel (nasm) и GNU.

Для Gnu Синтаксис использования __asm__ примитивно:

__asm__ (" 
    movq %rsp, %rbpn 
"); 

для Intel Синтаксис использования __asm{}:

__asm{ 
    mov  rbp, rsp; 
} 
+0

Является ли 'asm (« что-то »)' для синтаксиса Gnu или синтаксиса Intel? – qpalz

+0

Это синтаксис GNU afaik. Возможно, вам придется вставить некоторые макросы препроцессора, которые переключаются между директивами в зависимости от компилятора. – jupp0r

+0

Ошибка 'asm goto (" 1: jmp% l [t_no] \ n ")': ошибка: недопустимая константа в инструкции языка ассемблера. Зачем? – qpalz