以下代码应该适用于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;
}
答案 0 :(得分:2)
GCC使用AT&T syntax。 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;
}