【发布时间】:2015-03-29 09:48:36
【问题描述】:
我有以下代码作为程序的一部分,但是当我编译它时,我收到以下错误:
cannot convert ‘int’ to ‘__m128i {aka __vector(2) long long int}’ in assignment
代码在哪里:
int t;
int s;
__m128i *array;
__m128i vector;
posix_memalign ((void **) &array, BYTE_ALIGNMENT, n * m * sizeof(__m128i) );
int l=0;
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
array[l] = (condition) ? t : s; // fill the array elements with s or t
l++;
}
}
vector = _mm_load_si128( &array[index]);
问题出在这一行
array[l] = (condition) ? t : s;
我找到了指令__m128i _mm_cvtsi32_si128(int a),但不幸的是,它仅用于 32 位元素,而我有 16 位元素(大小为 8 的向量)。
【问题讨论】:
-
您是否尝试过使用显式强制类型转换来键入
__m128i? -
你是这个意思吗?数组[l] = (条件) ? (__m128i) t : (__m128i) s;它给了我以下错误:错误:无法在不同大小的向量值之间进行转换
-
您是否在寻找类似:
_mm_set1_epi16() -
不完全是,因为 set 指令填充了整个向量。虽然我想根据 IF 语句中的条件在每个循环中设置向量中的一个元素
-
换句话说,我想根据 IF 语句单独填充数组元素;在 FOR 循环期间。然后将数组加载到向量中......而 set 指令将用静态值填充整个数组