2010-09-06 2 views
0

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

impossible constraint in '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. Где я могу найти 'прохладную' ссылку ассемблера (я имею в виду некоторые касты ссылка как на чистый процессор команд списка таблицы данных/ручные)

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

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

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

Но, конечно, 'var << shift' будет скомпилирован как инструкция' rol'? – Skizz

+0

Это код из библиотеки, а не мой. Может быть, '<< | >>' будет скомпилирован в 'roll | rorl ', но я не вхожу в asm так много ... однако до сих пор не знаю, почему он компилирует больше ... – bua

+1

@Skizz Нет, инструкции по вращению могут быть реализованы только в чистом C с двумя сменами и. Выражение C 'var << shift' будет скомпилировано командой' sal'. –

ответ

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

ad.3 Я предпочитаю сайт ссылок C++, или sphinx как «look & feel», это единственное, что я искал. КСТАТИ. ваша ссылка «old howto» такая же, как ссылка из пункта 2. – bua

Смежные вопросы