невозможное ограничение в «асме» - PullRequest
0 голосов
/ 06 сентября 2010

Я использую стороннюю библиотеку, скомпилированную неделю назад.
Сегодня я снова сел за стол, снова нажал на сборку, а затем у меня взорвалась голова.
Я был застрелен с этой ошибкой:

невозможное ограничение в 'asm'

Код:

static inline unsigned ROLc(unsigned word, const int i)
{
   asm ("roll %2,%0"
      :"=r" (word)
      :"0" (word),"I" (i));
   return word;
}

Некоторые мистические вещи случаются ... единственное, о чем я сейчас думаю, это 'WTF?'
Платформа Intel CoreDuo с W32 XP на борту.

Два дополнительных вопроса:

  1. что может разрушить мою сборку?
  2. Полагаю, что синтаксис asm неверен, так как я могу это исправить?
  3. Где я могу найти «классную» ссылку на asm (я имею в виду некоторую ссылку на cpp, например, на таблицу / руководство по списку команд чистого процессора)

С уважением П.

UPDATE:
Хаха, я чувствую себя как дурак, на прошлой неделе я установил клубничный Perl ... который устанавливает и выдает gcc по пути, и моя система сборки использует компилятор по умолчанию ....: D
Однако я исправил это, используя:

return (word << i) | (word >> (32 - i));

1 Ответ

4 голосов
/ 06 сентября 2010
  1. Возможно, вы автоматически обновились до нового компилятора, который изменил синтаксис
  2. В этом предлагается использовать Ic, а не I;Я не проверял это
  3. Не уверен, что вы имеете в виду, ссылка на C ++ для сборки не имеет большого смысла для меня. Это (старое) HOWTO по gcc и встроенной сборке, может быть, это то, что вам нужно?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...