首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得VSX值为零?

如何获得VSX值为零?
EN

Stack Overflow用户
提问于 2017-09-09 05:49:58
回答 1查看 100关注 0票数 5

我们在几个地方置换了一个向量,我们需要区分0值来使用vec_perm内建。我们一直无法找到一个vec_zero()或类似的,所以我们想知道我们应该如何处理事情。

该代码目前使用两种策略。第一种策略是向量加载:

代码语言:javascript
复制
__attribute__((aligned(16)))
static const uint8_t z[16] =
    { 0,0,0,0,  0,0,0,0,  0,0,0,0,  0,0,0,0 };

const uint8x16_p8 zero = vec_ld(0, z);

第二个策略是使用我们打算使用的掩码:

代码语言:javascript
复制
__attribute__((aligned(16)))
static const uint8_t m[16] =
    { 15,14,13,12,  11,10,9,8,  7,6,5,4, 3,2,1,0 };

const uint8x16_p8 mask = vec_ld(0, m);
const uint8x16_p8 zero = vec_xor(mask, mask);

我们还没有开始基准测试,所以我们不知道其中一个是否比另一个更好。第一种策略使用VMX负载,它可能很昂贵。第二种策略避免了负载,但引入了数据依赖关系。

如何获得VSX值为零?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-11 04:11:27

我建议让编译器来帮你处理。只是初始化为零:

代码语言:javascript
复制
const uint8x16_p8 zero = {0};
  • 它可能会编译成一个xor

例如,一个简单的测试:

代码语言:javascript
复制
vector char foo(void)
{
    const vector char zero = {0};
    return zero;
}

在我的机器上,它编译成:

代码语言:javascript
复制
0000000000000000 <foo>:
   0:   d7 14 42 f0     xxlxor  vs34,vs34,vs34
   4:   20 00 80 4e     blr
    ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46127549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档