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代码。