c - 错误 : unknown register name 'r3' in 'asm' , 中的错误

标签 c assembly inline-assembly

我想编写一个内联汇编函数,它将执行乘法和移位,然后将结果移位到 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/

相关文章:

c++ - Unix 数据报套接字仅适用于第一帧

c - C 中的分段 11 试图重新创建 Stty

caching - 缓存如何被打败?

c++ - C++ 中的扩展内联汇编 : Is it necessary to preserve volatile registers?

c - 使用内联汇编循环遍历数组

c - array[i+1] 与 array[i] 具有相同的值,即使它不应该

c - 形状矩阵帮助(不断崩溃)

assembly - xmm 寄存器的 vbroadcastsd 相当于什么?

c - 如何执行快速数组乘法?

c - 内联汇编 FreeBSD 中的 gettimeofday