LinuxからWin32にコードを移植するいくつかのクロスプラットフォーム作業を行っていますが、一部のアセンブリコードについては動作させることができません。 このコードはLinux gccで通常コンパイルされますが、VS2008 --win32では動作しません。C++とVisual Studio 2008でasmコードを使用する方法
私のコードのいくつかは以下の通りです。私は--win32プラットフォームVS2008を使ってコンパイルしたい場合は行うには、私が何が必要です:
static inline void spin_wait(int n)
{
int tmp = n;
while(tmp > 0) { tmp--; asm("" ::: "memory", "cc"); }
}
__asm__ __volatile__(
"xorq %%rdx, %%rdx \n"
"xorq %%rax, %%rax \n"
"incq %%rdx \n"
"lock cmpxchgq %%rdx, (%1) \n"
"decq %%rax \n"
: "=a" (not_set) : "r" (n) : "%rdx");
代わりに '__asm'を使用してください。 –
Brr、回転のポイントはCPUサイクルを焼くことです。インラインアセンブリーの作成のポイントは、CPUサイクルを燃やさないことです。 InterlockedCompareExchange()を使用します。 –