将GCC内联装配汇编为Microsoft Visual C 2008



我在将此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);
}

最新更新