我有这样的代码:
uint8_t carry;
carry = 0;
for (i = 0; i < 8; i++)
carry = _addcarry_u64 (carry, *(buf1 + i),
*(buf2 + i), buf1 + i);
以下错误:
undefined reference to `_addcarry_u64'
我使用flags编译:
CCFLAGS = -Wall -g -msse -msse2 -msse3 -msse4 -mavx -mavx2 -fopenmp
我还包括:
#include <immintrin.h>
#include <emmintrin.h>
#include <pmmintrin.h>
#include <smmintrin.h>
#include <omp.h>
尝试使用内在函数中的bittest
函数时遇到的同样问题。
我使用x86_64 ubuntu 14.04和gcc编译器。
答案 0 :(得分:4)
_addcarry_u64
。您还需要内在函数包括:
#include <x86intrin.h>
然后您的示例将编译,就像您可以看到on the Godbolt compiler explorer。
对于实际编译到_addcarryx_u64
/ ADOX的相关ADCX内在函数,您还需要-madx
来使用ADX指令集扩展来启用代码生成。 -march=native
会在支持它的主机上显示此内容(请参阅/proc/cpuinfo
),并启用-mtune=native
。
您还需要更新版本的gcc(目前尚不存在)。 gcc curently (2016) just compiles it to correct code using the normal adc