这段代码有什么问题吗?我使用的是 GCC 6.3。
a.cpp: In function ‘int main()’:`a.cpp:26:24: error: narrowing conversion of ‘18446744069414584320ull’ from ‘long long unsigned int’ to ‘int’ inside { } [-Wnarrowing]
#include <iostream>
using namespace std;
#include <smmintrin.h>
#include <emmintrin.h>
#include <tmmintrin.h>
typedef union {
__m64 mm64[2];
__m128 mm128i;
} sse2_t;
#define const_epi32( i3,i2,i1,i0 ) \
{ static_cast<unsigned long long> (static_cast<unsigned long long>(i1) << 32), \
static_cast<unsigned long long> (static_cast<unsigned long long>(i3) << 32) }
int main() {
sse2_t arr_val[3] = { const_epi32(0,-1,0,-1),
const_epi32(0, 0,-1, -1),
const_epi32(0, 0,0, 1024)
}; //error!
sse2_t val = const_epi32(0,-1,0,-1); // ok!
// your code goes here
return 0;
}
最佳答案
类型 __m64
和 __m128
非常特殊,代表 vector 寄存器,这意味着您无法以通常的方式为它们赋值(就像您似乎正在尝试的那样)在你的代码中执行)。您需要使用特殊的加载函数将数据放入寄存器,并使用特殊的存储函数从寄存器取回数据。
以下示例展示了如何将数据(四个 float )加载到 __m128
变量中:
#include <cstring>
#include <smmintrin.h>
int main() {
float f[4];
memset(f, 0, 16);
__m128 a = _mm_load_ps(f);
return 0;
}
此页面包含有关所有不同类型和可用内在函数的大量信息:https://software.intel.com/sites/landingpage/IntrinsicsGuide/
关于c++ - 错误: narrowing conversion of ‘18446744069414584320ull’ from ‘long long unsigned int’ to ‘int’ inside { } [-Wnarrowing],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55734441/