Мне нужно написать встроенный ассемблерный код, который выполняет пользовательскую инструкцию, встроенную в мое оборудование.
В зависимости от того, какое оборудование нужно найти на реальном чипе, инструкция ведет себя по-разному. Моя сборка выглядит следующим образом:
asm volatile (
" instr_generic %1, %2, %0 \n\t"
: "=r" (c)
: "r" (a), "r" (b)
: "%g0"
);
Этот instr_generic
теперь может выполнять, например, сложение или вычитание, в зависимости от того, что находится на аппаратном обеспечении.
Теперь вместо instr_generic
я хочу написать cust_add
или cust_sub
, и тогда его следует заменить на instr_generic
. Другими словами, это должно выглядеть вот так
#define cust_add instr_generic
...
asm volatile (
" cust_add %1, %2, %0 \n\t"
: "=r" (c)
: "r" (a), "r" (b)
: "%g0"
);
Но я полагаю, что я не могу использовать препроцессор в этом контексте для замены встроенного в сборку, верно? Есть ли другой способ сделать это легко?