2009-06-30 6 views
2

그런 종류의 문제를 다루는 여러 주제를 읽었지만 아직 답변이 없습니다. 여기 내 문제 :iphone dev : 인라인 asm 문제

내 프로젝트 설정에서
int cl, ch, _a = a, _b = b;\ 
    __asm__ ("smull %0, %1, %2, %3\n"   
    "mov %0, %0, lsr %4\n"   
    "orr %0, %0, %1, lsl %5\n"   
    : "=&r" (cl), "=&r" (ch)   
    : "r" (_a), "r" (_b), "i" (r), "i" (32-(r))); 
    cl; }) 

, 나는이 다음과 같은 옵션을 link text

을 ckecked 것을 확인하지만 콘솔이 내 헤더 파일에서

, 나는이 있습니다 오류 :

{표준 입력} 242 : 선택 프로세서는 지원하지 않는다 - smull r0,r1,r2,r3' {standard input}:244:unshifted register required -- 오어 R0, R0, R1, LSL # 20 '0

도와 주시겠습니까?

답변

3

팔 파일을 컴파일하고 있습니까? 기본적으로 iPhone 용 코드는 엄지 손가락으로 컴파일됩니다 (보통 부동 소수점 연산을 수행하지 않는 한 선호합니다). 목록에있는 ASM은 팔입니다. GCC는 단일 컴파일 유닛 내에서 백엔드를 전환 할 수 없으므로 해당 헤더를 사용하는 파일을 arm로 컴파일하도록 설정해야합니다. "GCC 4.x 코드 생성"에서 "Thumb 용으로 컴파일"을 선택 해제하여 변경할 수 있습니다.

전체 프로젝트를 ARM으로 컴파일하면 메모리 사용 및 프록시 성능에 큰 영향을 줄 수 있습니다. 그런 헤더에 매크로를 통한 ASM을 포함 시키면 iPhone에서 매우 지저분해질 것입니다. 일반적으로 모든 ASM을 하나의 파일에 넣고 하나의 파일을 팔로 컴파일하는 것이 더 나을 것입니다.하지만 그 중 하나의 파일은 아마도 가치가 없을 것입니다.