以下代码应该可以在 Linux 上运行。我想将以下代码移植到 Visual Studio 2008,但我对 asm 代码不是很熟悉。你可以帮帮我吗?
#include <stdint.h>
static inline uint32_t log2(const uint32_t x) {
uint32_t y;
asm ( "\tbsr %1, %0\n"
: "=r"(y)
: "r" (x)
);
return y;
}
以下代码应该可以在 Linux 上运行。我想将以下代码移植到 Visual Studio 2008,但我对 asm 代码不是很熟悉。你可以帮帮我吗?
#include <stdint.h>
static inline uint32_t log2(const uint32_t x) {
uint32_t y;
asm ( "\tbsr %1, %0\n"
: "=r"(y)
: "r" (x)
);
return y;
}
GCC 使用AT&T 语法。MSVC 使用 Intel 语法。该函数看起来像这样(使用 MSVC 2010 / 编译16.00.40219.01
,但我看不出它在 2008 年失败的原因):
static inline uint32_t log2(const uint32_t x) {
uint32_t y;
__asm {
bsr eax, x
mov y, eax
}
return y;
}