iphone dev: проблема с встроенным asm - PullRequest
2 голосов
/ 30 июня 2009

Я читаю различные темы, связанные с такой проблемой, но у меня все еще нет ответа. Вот моя проблема:

В моем заголовочном файле у меня есть это:

  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; })

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

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

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

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

1 Ответ

3 голосов
/ 08 июля 2009

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

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

...