[英]impossible constraint in asm
我正在嘗試將 MongoDB 交叉編譯到自定義 Linux。 它在 Linux 上編譯得很好,但是在使用交叉編譯器工具鏈時,它會抱怨這段代碼。
static T compareAndSwap(volatile T* dest, T expected, T newValue) {
T result = expected;
asm volatile ("push %%eax\n\t"
"push %%ebx\n\t"
"push %%ecx\n\t"
"push %%edx\n\t"
"mov (%%edx), %%ebx\n\t"
"mov 4(%%edx), %%ecx\n\t"
"mov (%%edi), %%eax\n\t"
"mov 4(%%edi), %%edx\n\t"
"lock cmpxchg8b (%%esi)\n\t"
"mov %%eax, (%%edi)\n\t"
"mov %%edx, 4(%%edi)\n\t"
"pop %%edx\n\t"
"pop %%ecx\n\t"
"pop %%ebx\n\t"
"pop %%eax\n"
:
: "S" (dest),
"D" (&result),
"d" (&newValue)
: "memory", "cc");
return result;
}
編譯器錯誤如下。
_party/js-1.7 -Isrc/third_party/js-1.7 src/mongo/bson/oid.cpp
src/mongo/platform/atomic_intrinsics_gcc.h: In member function 'void mongo::OID::initSequential()':
src/mongo/platform/atomic_intrinsics_gcc.h:123:44: error: impossible constraint in 'asm'
src/mongo/platform/atomic_intrinsics_gcc.h:123:44: error: impossible constraint in 'asm'
scons: *** [build/linux2/cc_gcc/cxx_toolchain-c++/mongo/bson/oid.o] Error 1
scons: building terminated because of errors.
抱怨的第123:44
行是前一行的結尾: "memory", "cc");
還看了看其他部分的代碼,編譯成asm代碼,看起來也差不多。 不知道這個發生了什么。
請指教這有什么問題。
嘗試在此處使用__sync_val_compare_and_swap
GCC 內在函數。
由於F00F 錯誤, lock cmpxchg8b
無效。 我猜你正在使用像i586-linux-gcc
工具鏈這樣的東西,因此你正在解決這個 Pentium 的問題。
如果您告訴我們您定制的 linux 內核的確切硬件,可能會出現更多解決方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.