1

次のコードは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;
}
4

1 に答える 1

2

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;
}
于 2012-04-29T19:01:32.377 に答える