GCC C向量扩展:如何将任意对齐数组/指针强制转换为向量类型?
我不熟悉GCC的向量扩展。我在手册中读到,通过使用强制转换,向量可以向任何类型进行强制转换,也可以从任何类型进行强制转换。然而,我不清楚这是如何实现的,因为显而易见的方法失败了:GCC C向量扩展:如何将任意对齐数组/指针强制转换为向量类型?,c,gcc,vectorization,C,Gcc,Vectorization,我不熟悉GCC的向量扩展。我在手册中读到,通过使用强制转换,向量可以向任何类型进行强制转换,也可以从任何类型进行强制转换。然而,我不清楚这是如何实现的,因为显而易见的方法失败了: typedef int8_t s8a __attribute__((aligned (16))); typedef int8_t v16s8 __attribute__ ((vector_size (16))); s8a *x = _mm_malloc(512,16); // Grab some aligned mem
typedef int8_t s8a __attribute__((aligned (16)));
typedef int8_t v16s8 __attribute__ ((vector_size (16)));
s8a *x = _mm_malloc(512,16); // Grab some aligned mem for my int8s
x[0] = 4; x[2] = 1; x[5] = 7; x[15] = 1; // the rest should be junk
v16s8 y = (v16s8)x; // assign the aligned memory to a vector type
我得到:
vec.c:22:2: error: can't convert value to a vector
v16s8 y = (v16s8)x;
如何将任意内存位置(已知对齐方式等于或优于向量)强制转换为向量类型
谢谢 x指向的数据未对齐,请使用_-mm_-malloc(大小,对齐)它是否会像任何重新解释类型一样:
v16s8 y=*(v16s8*)(&x)代码>?v16s8 y=*(v16s8*)(&x)代码>编译,但运行时立即崩溃。请尝试v16s8 y=*(v16s8*)x代码>