我正在尝试使用新的intel / amd处理器_mm_clmulepi64_si128 ()
上的无进位乘法指令
我已经包含了头文件,我正在使用-maes -msse4
选项进行编译...但我仍然收到错误消息:
错误:_mm_clmulepi64_si128未在此范围内声明
#include < immintrin.h >
#include < wmmintrin.h >
int main()
{
__m128i a;
__m128i b;
a.m128i_i64[1] = 2;
a.m128i_i64[0] = -1284;
b.m128i_i64[1] = 25;
b.m128i_i64[0] = 65535;
const int product1 = 0x11;
const int product2 = 0x00;
const int product3 = 0xF2;
int expect1 = int ( a.m128i_i64[1] * b.m128i_i64[1] );
int expect2 = int ( a.m128i_i64[0] * b.m128i_i64[0] );
int expect3 = int ( a.m128i_i64[0] * b.m128i_i64[1] );
__m128i result1 = _mm_clmulepi64_si128( a, b, product1 );
__m128i result2 = _mm_clmulepi64_si128( a, b, product2 );
__m128i result3 = _mm_clmulepi64_si128( a, b, product3 );
return 0;
}
答案 0 :(得分:3)
您需要使用-mpclmul
和-msse4.1
进行编译才能使用_mm_clmulepi64_si128()
。您还需要包含正确的头文件。在Clang和GCC下,您应该包含<x86intrin.h>
。英特尔,VC ++和其他编译器需要<wmmintrin.h>
。
如果 您的处理器是现代的并且支持该指令,那么-march=native
应该获得处理器的所有功能,包括SSE4_1,SSE4_2,PCLMUL,AVX ,AVX2,BMI,BMI2等
答案 1 :(得分:3)
尝试
#include <x86intrin.h>
而不是
#include <immintrin.h>
并设置gcc标志-msse2 -msse4.1 -mpclmul。
答案 2 :(得分:0)
我怀疑名字管理在你的方式。如果是C ++编译器,请确保使用C编译器,即调用gcc source.c -options ....而不是g ++
你仍然需要一个支持这种扩展的CPU。