替换内联汇编代码

rei*_*ard 2 c assembly inline-assembly c-preprocessor

我必须编写内联汇编代码来执行我集成到硬件中的自定义指令.
根据在实际芯片上找到的硬件,指令的行为会有所不同.我的装配看起来如下:

    asm volatile (
    " instr_generic %1, %2, %0          \n\t"
    : "=r" (c)            
    : "r" (a), "r" (b)       
    : "%g0"                                                   
    );
Run Code Online (Sandbox Code Playgroud)

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"                                                   
    );
Run Code Online (Sandbox Code Playgroud)

但我想我不能在这个上下文中使用预处理器替换内联组件是对的吗?有没有其他方法可以轻松地做到这一点?

Ric*_*ton 5

...
#define cust(arg) \
asm volatile (
" " #arg " %1, %2, %0          \n\t" \
: "=r" (c) \           
: "r" (a), "r" (b) \      
: "%g0" \                                                   
)

...
cust(cust_add);
Run Code Online (Sandbox Code Playgroud)