次のコードはLinuxで動作するはずです。次のコードをVisualStudio2008に移植したいのですが、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で動作するはずです。次のコードをVisualStudio2008に移植したいのですが、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;
}