通过指针,强制转换和解除引用加载向量?

时间:2017-12-10 20:57:51

标签: c simd intrinsics powerpc

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服务器)。

我的第一个问题是,该技术是否正确处理未对齐的字节数组?

我的第二个问题是,该技术是否会自动在小端系统上执行大端转换?

我的第三个问题是,我们应该在实践中使用这项技术吗?感觉这种技术应该产生不确定的行为或违反行为。

1 个答案:

答案 0 :(得分:1)

  

我的第一个问题是,该技术是否正确处理未对齐的字节数组?

不,它不能正确处理未对齐的数组。通过屏蔽4个低位来将存储器地址和偏移量截断为有效地址。

  

我的第二个问题是,该技术是否会自动在小端系统上执行大端转换?

YES。

  

我的第三个问题是,我们应该在实践中使用这项技术吗?

不,不要使用它。