встроенная ошибка сборки - PullRequest
0 голосов
/ 04 мая 2009

Я использую встроенную сборку для iphone, работаю в режиме отладки устройства.

Инструкция выглядит следующим образом:

__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp) );

И я получаю сообщение об ошибке:

ошибка: ожидается ')' перед tokedn '(' ошибка: неизвестное имя регистра 'r' в 'ASM'

Я использую X-code 3.0 и gcc 4.0. Есть идеи?

Ответы [ 5 ]

1 голос
/ 27 марта 2010

Должно быть только три двоеточия, а не четыре.

Аргументы, следующие за первым двоеточием, определяют входные данные, затем выходные данные, а затем список сглаживающих символов.

Если у вас есть несколько параметров, вы можете использовать запятую, а не двоеточие.

В вашем примере. Я предполагаю, что temp - это ваш вывод, а treg5, fac5 - ваш ввод. Вы, вероятно, хотите что-то вроде этого.

__asm__("smlatb %0, %1, %2, %0 \n\t"
        : "=r"(Temp) 
        : "0"(Temp), "r"(treg5), "r"(fac5)
        :);

Кстати, в библиотеке vfpmath есть несколько хороших примеров сборки iphone ARM.

0 голосов
/ 06 мая 2009

У вас слишком много : (двоеточия). Они используются в качестве разделителей. Таким образом, у вас должен быть один, чтобы отделить код сборки с выходной переменной, и один, чтобы отделить выходную переменную от входных переменных. Это что-то вроде asm ("assembly" : <output> : <inputs> : [extra attributes]). Посмотрите «встроенную сборку» для GCC, и вы увидите несколько примеров.

0 голосов
/ 04 мая 2009

Я считаю, что вы должны делать что-то вроде этого:

__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp));

Подробнее см. в этом вопросе переполнения стека .

0 голосов
/ 05 мая 2009

Я добавил встроенную сборку в стиле codewarrior __asm ​​{
smlatb Temp, treg5, fac5, Temp} и в настройках prject на вкладке build под язык GCC 4.0 я выбрал опция Разрешить встроенную сборку CodeWarrior-Style также выбран разрешите опции 'asm' 'inline' 'typeof' и код сработает окончательно

0 голосов
/ 04 мая 2009

одно исправление инструкция asm ("smlatb% 0,% 1,% 2,% 3 \ n \ t": "= r" (Temp): "r" (treg5): "r" (fac5): " r "(Temp));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...