Ассемблерные вставки в gcc
Здравствуйте!
Подскажите, что делает этот код, где можно почитать про формат таких ассемблерных
вставок?
#define mad_f_scale64(hi, lo) \
({ mad_fixed_t __result; \
mad_fixed64hi_t __hi_; \
mad_fixed64lo_t __lo_; \
asm __volatile__ ("addc %0, %2, %4\n\t" \
"addze %1, %3" \
: "=r" (__lo_), "=r" (__hi_) \
: "r" (lo), "r" (hi), "r" (1 << (MAD_F_SCALEBITS - 1))); \
asm __volatile__ ("rlwinm %0, %2,32-%3,0,%3-1\n\t" \
"rlwimi %0, %1,32-%3,%3,31" \
: "=&r" (__result) \
: "r" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS)); \
__result; \
})
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 23065; Возраст листа: 867; Участников: 1468
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/487078
Доброе утро!
8 декабря 2005 15:01 | Denis Silin:
Красиво... Макрос с ассемблерной вставкой. Судя по инструкциям, ассемблер
PowerPC. Формат довольно простой, попробую потренировать память:
Собственно, ассемблерный код (ну это и так видно). Фишка, особенно
интересная для привыкших к синтаксису Intel (NASM) - здесь все пишется в
синтаксисе AT&T.
Входные переменные (в коде на ассемблере они видны как %0, %1...),
передаются через регистры (естественно, никто еще не знает какие)
Выходные переменные (используются также).
Если в чем ошибся - поправляйте!
Одного не скажу - чего он делает, поскольку с PowerPC практически не
знаком. Как говорится, Google в помощь. :)