gpt4 book ai didi

将 GCC 内联汇编编译成 Microsoft Visual C++ 2008

转载 作者:太空宇宙 更新时间:2023-11-04 03:49:56 28 4
gpt4 key购买 nike

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

谢谢。

最佳答案

Visual Studio 不支持 ARM 内联汇编。请参阅:Inline assembly is not supported on the ARM .您需要将汇编代码反向工程为 C,或者使用单独的汇编程序并将其链接为单独的函数。

看起来这个函数只是执行 32 x 32 -> 64 位有符号乘法,然后将 64 位结果右移 16 位并将其截断为 32 位:

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

关于将 GCC 内联汇编编译成 Microsoft Visual C++ 2008,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21539528/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com