2012-02-16 2 views
0

나는 GCC 인라인 어셈블리 스타일 인라인 어셈블리 다음과 같은 C 코드가icc에서 gcc 인라인 어셈블리를 사용하는 방법?

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

: 인텔 구문에 대한

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

__asm{}를 사용 gcc가 컴파일한다면, 나는 '당신이 didn를 의심 것 당신의 C 코드에 정의 된 t_no 레이블이 없습니다. icc의 경우, 아마도 이런 레이블 지정을 지원하지 않습니다. 'jmp % l1'을 사용해 보셨습니까? –

답변

0

나는 -fasm-blocks 명령 줄 옵션을 사용해야한다고 생각합니다.

+0

알지만 오류는 발생합니다. 나는 이것이 AT & T 스타일과 인텔 스타일의 문제라고 믿는다. – qpalz

0

icc는 Intel (nasm) 및 GNU 어셈블러 스타일을 모두 지원합니다. 은 GNU 구문에 대한

__asm__ 원시를 사용하십시오 JMP 문제를 들어

__asm{ 
    mov  rbp, rsp; 
} 
+0

Gnu Syntax 나 Intel Syntax를위한'asm ("something")'입니까? – qpalz

+0

GNU 구문 afaik입니다. 아마도 컴파일러에 따라 지시어간에 전환하는 일부 전 처리기 매크로를 삽입해야 할 것입니다. – jupp0r

+0

'asm goto ("1 : jmp % l [t_no] \ n")'에 오류가 있습니다 : 오류 : 어셈블리 언어 명령어에서 상수가 유효하지 않습니다. 왜? – qpalz