我在将此GCC内联装配集编译到Microsoft Visual C 2008 Assembly
GCC内联装配:
__asm__(
"smull %0, %1, %2, %3 nt"
"mov %0, %0, LSR #16 nt"
"add %1, %0, %1, LSL #16 nt"
: "=&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 nt"
"mov %0, %0, LSR #16 nt"
"add %1, %0, %1, LSL #16 nt"
: "=&r"(lo), "=&r"(hi)
: "r"(rb), "r"(ra));
return hi;
}
谢谢。
Visual Studio不支持ARM内联装配。请参阅:手臂上不支持内联装配。您需要将汇编代码反向工程换成C,或使用单独的汇编程序并将其链接为单独的函数。
看起来此功能仅执行32 x 32-> 64位签名,然后将64位结果右移16位,然后将其截断为32位:
static __inline Word32 mull(Word32 a, Word16 b)
{
return (Word32)(((Word64)a * (Word64)b) >> 16);
}