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

问题描述 投票:2回答:1

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

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

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

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

c simd intrinsics powerpc
1个回答
1
投票

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

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

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

是。

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

不,不要使用它。

© www.soinside.com 2019 - 2024. All rights reserved.