E
EugenOS
Добрый день всем.
С GCC работаю впервые. Натолкнулся на проблему. Не знаю как передать в GCC параметром в инлайн ассемблер, константу.
То есть. Хочу сделать ROL (сдвиг циклический) в виде макроса.
Для того чтоб меньше путаться, после энного времени мучений, уже разбил все на отдельные строчки.
так вот, rolb (rc,9); где rc - переменная типа unsigned long, ругается:
Error: illegal immediate register operand %edx
Как я понял это из-за того что во втром макросе shift - константа. как это правильно написать. я чего-то не пойму.
С GCC работаю впервые. Натолкнулся на проблему. Не знаю как передать в GCC параметром в инлайн ассемблер, константу.
То есть. Хочу сделать ROL (сдвиг циклический) в виде макроса.
Для того чтоб меньше путаться, после энного времени мучений, уже разбил все на отдельные строчки.
C++:
#define dd0(x) asm("movl %0, %%eax" :: "d"(x))
#define dd1(shift) asm("roll $%0, %%eax" :: "d"(shift))
#define dd2(x) asm("movl %%eax, %0" :"=d"(x) )
#define rolb(x,shift) dd0(x);\
dd1(shift);\
dd2(x)
так вот, rolb (rc,9); где rc - переменная типа unsigned long, ругается:
Error: illegal immediate register operand %edx
Как я понял это из-за того что во втром макросе shift - константа. как это правильно написать. я чего-то не пойму.