Assembly 为什么包括asm volatile在内的内联函数应该是静态的?

Assembly 为什么包括asm volatile在内的内联函数应该是静态的?,assembly,Assembly,例如: static __inline int test_smulwt(int x, int y) { int ret; __asm__("smulwt ret, x, y"); return ret; } 如果没有“static”声明,将出现编译错误“预期ARM寄存器--'smulwt ret,x,y'”。为什么? 谢谢, Simmis.您使用的编译器是什么?如果是gcc,那么如何使用:“smulwt%[ret],%[x],%[y]:[ret]“=r”(ret):[

例如:

static __inline int test_smulwt(int x, int y)
{
    int ret;
    __asm__("smulwt ret, x, y");

    return ret;
}
如果没有“static”声明,将出现编译错误“预期ARM寄存器--'smulwt ret,x,y'”。为什么?

谢谢,
Simmis.

您使用的编译器是什么?如果是gcc,那么如何使用:
“smulwt%[ret],%[x],%[y]:[ret]“=r”(ret):[x]“r”(x),[y]“r”(y))至于“为什么”,我不是ARM专家,但也许SMulWT需要3个寄存器,而没有静态,RET、X、Y中的一个不是登记(内存位置?常量?)。C++是写的吗?如果是这样,
这个
就是你把
y
推到堆栈中的罪魁祸首(正如David提到的)。谢谢你,David。我正在使用uclinux gcc,你的建议很有效!亚历克西斯:我正在编写c代码。