C++中AltiVec SIMD vector类型用[]下标访问标量元素报错原因是什么
问题原因说明
- 核心原因是GNU 3.3.2版本对PowerPC AltiVec SIMD扩展的支持能力不足:该版本中
vector signed int这类向量类型是编译器内置的特殊专属类型,既不是数组类型,也没有实现[]下标运算符的重载,天然不支持通过下标语法读写单个元素,因此不管是读取还是写下标都会触发你遇到的类型不匹配错误。 - AltiVec标准中读写单个向量元素的原生接口如下,在3.3.2版本中必须使用这类接口完成操作:
- 读取第N个元素:
vec_extract(向量变量, 下标N),对应你的场景写法为add = vec_extract(v_add, 0); - 写入第N个元素:
vec_insert(待写入值, 向量变量, 下标N),对应你的场景写法为v_add = vec_insert(add, v_add, 0);
- 读取第N个元素:
- 后续GCC 4.2及更高版本才新增了AltiVec向量类型的
[]下标语法糖支持,编译器会自动将下标操作转换为对应的vec_extract/vec_insert调用,只有在这类高版本编译器中你写的下标访问代码才能正常编译。
内容的提问来源于stack exchange,提问作者ympolo
相关产品推荐
相关产品推荐

