OpenPower Manual | Vector Data Types声明要避免手动加载元素,并使用矢量强制转换:
在应用程序定义的地址访问向量的首选方法是使用向量指针和C / C ++解引用运算符*。与其他C / C ++数据类型类似,数组引用运算符[]可用于访问具有通常定义的向量指针的向量对象,以从向量指针访问第n个向量元素。除了没有解引用运算符的语言之外,不鼓励使用向量内置函数,例如vec_xl和vec_xst。
vector char vca;
vector char vcb;
vector int via;
int a[4];
void *vp;
via = *(vector int *) &a[0];
vca = (vector char) via;
vcb = vca;
vca = *(vector char *)vp;
*(vector char *)&a[0] = vca;
我正处于测试技术的早期阶段,但似乎上面的代码编译。测试的编译器是GCC 4.0.1(旧PowerMac G5)和GCC 4.8.5(Power 730服务器)。
我的第一个问题是,该技术是否正确处理未对齐的字节数组?
我的第二个问题是,该技术是否会自动在小端系统上执行大端转换?
我的第三个问题是,我们应该在实践中使用这种技术吗?感觉这种技术应该产生不确定的行为或违反行为。
我的第一个问题是,该技术是否正确处理未对齐的字节数组?
不,它不能正确处理未对齐的数组。通过屏蔽4个低位来将存储器地址和偏移量截断为有效地址。
我的第二个问题是,该技术是否会自动在小端系统上执行大端转换?
是。
我的第三个问题是,我们应该在实践中使用这种技术吗?
不,不要使用它。