我想编写一个内联汇编函数,该函数将进行乘法和移位,然后将结果移位为32位值,我需要使用Clobbers,但不能使用任何函数,从而产生错误
我想使用Clobbers进行计算,然后返回结果
static inline int32_t multi(int32_t in0, int32_t in1)
{
int32_t res=0;
asm volatile ( "add.n r3 , %1 ,%1\n"
"mull %0, %2 , r3\n"
:"=r"(res)
: "r"(in0), "r"(in1)
:"cc","r3");
return res;
}
正在产生以下错误,
错误:“ asm”中的未知寄存器名称“ r3”
我尝试了许多寄存器,例如a1 a2等,但是似乎没有任何作用,我在上面的代码中犯了一些愚蠢的错误
答案 0 :(得分:-1)
我不确定“ add.n”是什么。但是从描述中,我猜想您可能想要执行以下操作:
#include "stdio.h"
#include "stdint.h"
static inline int32_t multi(int32_t in0, int32_t in1)
{
asm volatile ( "mul %1 \t\n"
:"+a"(in0), "+c"(in1)
:
:"memory");
return in0;
}
void main() {
int32_t a, b;
//test data
a = 2;
b = 7;
printf("result: %d\n", multi(a,b));
}