user3267776
user3267776

Reputation: 11

Compile GCC Inline Assembly into Microsoft Visual C++ 2008

I'm having trouble compiling this GCC inline assembly to Microsoft Visual C++ 2008 assembly

GCC inline assembly:

__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));

The compiler says:

error C2143: syntax error : missing ')' before ':'

The complete function is:

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;
}

Thanks.

Upvotes: 1

Views: 551

Answers (1)

Paul R
Paul R

Reputation: 212929

Visual Studio does not support ARM inline assembly. See: Inline assembly is not supported on the ARM. You will need to either reverse-engineer the assembly code to C, or use a separate assembler and link this as a separate function.

It looks like this function just does a 32 x 32 -> 64 bit signed multiply and then shifts the 64 bit result right by 16 bits and truncates it to 32 bits:

static __inline Word32 mull(Word32 a, Word16 b)
{
    return (Word32)(((Word64)a * (Word64)b) >> 16);
}

Upvotes: 1

Related Questions