2009-06-30 1 views
2

Я читал разные темы, которые касаются этой проблемы, но у меня все еще нет ответа. Вот моя проблема:iphone dev: проблема с inline 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; }) 

В моих настройках проекта, я проверил, что эти следующие опции были ckecked link text

Но у меня есть консоль ошибка:

{стандартный ввод}: 242: выбранный процессор не поддерживает - smull r0,r1,r2,r3' {standard input}:244:unshifted register required -- Orr г0, r0, R1, LSL # 20'

Не могли бы вы мне помочь?

ответ

3

Вы компилируете файл для руки? По умолчанию код для iPhone скомпилирован для большого пальца (что обычно предпочтительнее, если вы не делаете математику с плавающей запятой). ASM, который вы указали, - это рука. Вам нужно будет установить любой файл, который использует этот заголовок для компиляции в качестве руки, поскольку GCC не позволяет вам переключать внутренние компоненты внутри одного модуля компиляции. Вы можете изменить его, сняв «Компиляцию для большого пальца» в разделе «Генерация кода GCC 4.x».

Компиляция всего проекта в виде руки, скорее всего, будет иметь значительное (отрицательное) влияние на использование памяти и производительность прокси. Включение ASM через макрос в подобном заголовке будет очень неприятным для iPhone. В общем, вам лучше разместить все свои ASM в одном файле и скомпилировать этот файл в качестве руки, но для всего лишь 3 последовательности команд, которые, вероятно, не будут стоить ни того, ни другого.