ZHCUAU3J January 2018 – March 2024
布尔向量是 C/C++ 源文件中的一种向量数据类型。节 5.3.2 中对向量数据类型进行了介绍。目前,布尔向量允许字面量和串联运算符 (节 5.14.1)、赋值运算符 (节 5.14.2)、向量的混合运算符 (节 5.14.4)、向量的转换函数 (节 5.14.6) 以及向量的重新解释函数 (节 5.14.7)。
与其他整型向量类型不同,布尔向量不能用作向量三元运算符的条件。布尔向量类型当前不支持标准布尔运算,例如 &&、||、&、&=、|、|=、^、^=、!、~、==、!=、<=、<、>=、>、<=、<、>= 和 >。
布尔向量可用作 C7000 上大多数谓词内在函数低级别向量谓词类型 (节 5.14.8 ) 的抽象替代。建议使用布尔向量作为向量谓词。但是,布尔向量类型不能与低级别向量谓词类型完全互换。
使用向量谓词类型时,应对谓词执行适当的缩放。通过内在函数 __expand_vpred(__vpred, k)
和 __pack_vpred(__vpred, k)
,可以将向量谓词按系数 k={0-63} 放大或缩小。
以下示例中的两个函数实现了相同的结果,一个具有布尔向量,另一个具有低级别向量谓词类型。这显示了向量谓词与布尔向量的功能差异。布尔向量谓词按通道输入数据,与元素类型无关。
// Boolean vector example
void foo(int4 *ptr, int4 data, char4 *ptr2, char4 data2)
{
bool4 pred = bool4(0,1,1,0);
__vstore_pred(pred, ptr, data); // Word-based store
__vstore_pred(pred, ptr2, data2); // Byte-based store
}
// Vector predicate example
void bar(int4 *ptr, int4 data, char4 *ptr2, char4 data2)
{
__vpred pred = _mvrp(0x0000000000000ff0); // Word-scaled predicate
__vstore_pred(pred, ptr, data);
pred = __pack_vpred(pred, 2); // Byte-scaled predicate
__vstore_pred(pred, ptr2, data2);
}