我想编写一个内联汇编函数,它将执行乘法和移位,然后将结果移位到 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;
}
它产生以下错误,
error: unknown register name 'r3' in 'asm'
我尝试了很多寄存器,例如 a1 a2 等,但似乎没有任何效果,我在上面的代码中犯了一些愚蠢的错误
最佳答案
我不确定“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));
}
关于c - 错误 : unknown register name 'r3' in 'asm' , 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57315176/