Я использую g ++ версии 8.1.1 и Fedora Release 18 на процессоре Intel® Xeon® Platinum 8180 @ 2,50 ГГц
#if (__x86_64__ || __ppc64__)
inline bool WideCAS(fat_pointer_rec<T> &old_value,
fat_pointer_rec<T> &new_value, std::memory_order morder) {
bool ret;
__asm__ __volatile__(
"lock cmpxchg16b %1;\n"
"sete %0;\n"
:"=m"(ret),"+m" (*(volatile fat_pointer_rec<T> *) (&fat_p))
:"a" (old_value.ptr), "d" (old_value.tag), "b" (new_value.ptr), "c" (new_value.tag));
std::atomic_thread_fence(morder);
return ret;
}
#else
inline bool WideCAS(fat_pointer_rec<T> &old_value,
fat_pointer_rec<T> &new_value, std::memory_order morder) {
errexit("WCAS not supported with -m32.");
}
#endif
Я получаю следующую ошибку.
./src/trackers/biptr.hpp: In member function ‘bool FatPtr<T>::WideCAS(fat_pointer_rec<T>&, fat_pointer_rec<T>&, std::memory_order) [with T = SortedUnorderedMapRange<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >::Node]’:
./src/trackers/biptr.hpp:55:87: error: impossible constraint in ‘asm’
:"a" (old_value.ptr), "d" (old_value.tag), "b" (new_value.ptr), "c" (new_value.tag));
^
./src/trackers/biptr.hpp:55:87: error: non-memory input 2 must stay in memory
./src/trackers/biptr.hpp: In member function ‘bool FatPtr<T>::WideCAS(fat_pointer_rec<T>&, fat_pointer_rec<T>&, std::memory_order) [with T = NatarajanTreeRangeTracker<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >::Node]’:
./src/trackers/biptr.hpp:55:87: error: impossible constraint in ‘asm’
./src/trackers/biptr.hpp:55:87: error: non-memory input 2 must stay in memory
make[1]: *** [/home/ajit/research/Interval-Based-Reclamation/Makefile:457: obj/release/src/main.o] Error 1
make[1]: Leaving directory '/home/ajit/research/Interval-Based-Reclamation'
make: *** [Makefile:337: default] Error 2
Есть идеи, как это исправить?