【发布时间】:2014-02-03 22:55:05
【问题描述】:
我无法将此 GCC 内联程序集编译为 Microsoft Visual C++ 2008 程序集
GCC 内联汇编:
__asm__(
"smull %0, %1, %2, %3 \n\t"
"mov %0, %0, LSR #16 \n\t"
"add %1, %0, %1, LSL #16 \n\t"
: "=&r"(lo), "=&r"(hi)
: "r"(rb), "r"(ra));
编译器说:
错误 C2143:语法错误:在 ':' 之前缺少 ')'
完整的功能是:
static __inline Word32 mull(Word32 a, Word16 b)
{
register Word32 ra = a;
register Word32 rb = b;
Word32 lo, hi;
__asm__(
"smull %0, %1, %2, %3 \n\t"
"mov %0, %0, LSR #16 \n\t"
"add %1, %0, %1, LSL #16 \n\t"
: "=&r"(lo), "=&r"(hi)
: "r"(rb), "r"(ra));
return hi;
}
谢谢。
【问题讨论】:
-
内联asm的MS扩展名是
__asm,它的语法一般有很大的不同。另外我不太确定它是否支持 ARM 上的内联汇编。 (可能需要一个单独的 .asm 文件。) -
你能试着把它翻译成MS扩展吗? @asveikau
-
再补充一点:一般来说,如果某些函数或调用以下划线开头(如
__asm__()),您应该始终假设它不适用于其他编译器,因为它不是一部分的标准。
标签: c gcc assembly arm inline-assembly