Я использую стороннюю библиотеку, которая скомпилирована неделю назад.
Сегодня я снова сел за стол, я снова толкнул сборку, затем моя голова выдулась.
Я был снят с этой ошибкой:невозможное ограничение в '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 на борту.
два дополнительных вопроса:
- что может разрушить мою сборку?
- Я полагаю, что синтаксис asm неверен, так как я могу это исправить?
- Где я могу найти 'прохладную' ссылку ассемблера (я имею в виду некоторые касты ссылка как на чистый процессор команд списка таблицы данных/ручные)
С уважением П.
UPDATE:
Хахом I чувствую, как дамп-поп, на прошлой неделе я установил клубнику perl ... который устанавливает и бросает gcc на путь, а моя система сборки принимает компилятор по умолчанию ....: D
Однако я исправил, что используя:
return (word << i) | (word >> (32 - i));
Но, конечно, 'var << shift' будет скомпилирован как инструкция' rol'? – Skizz
Это код из библиотеки, а не мой. Может быть, '<< | >>' будет скомпилирован в 'roll | rorl ', но я не вхожу в asm так много ... однако до сих пор не знаю, почему он компилирует больше ... – bua
@Skizz Нет, инструкции по вращению могут быть реализованы только в чистом C с двумя сменами и. Выражение C 'var << shift' будет скомпилировано командой' sal'. –