首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于AltiVec中的mm_storel_epi64?

相当于AltiVec中的mm_storel_epi64?
EN

Stack Overflow用户
提问于 2015-02-10 16:59:27
回答 2查看 172关注 0票数 0

我正在做一个使用AltiVec编程接口的项目。

在一个地方,我想将矢量寄存器中的8个字节存储到缓冲区中。

在SSE中,我们有一个内部_mm_storel_epi64来将单指令多数据寄存器的低8字节存储到缓冲区中。

关于在AltiVec中实现8字节存储有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2015-02-10 17:15:01

我认为使用AltiVec做到这一点的唯一方法是:

代码语言:javascript
复制
- load 16 bytes containing 8 byte destination buffer (`vec_ld`)
- mask in the 8 bytes you want to write (`vec_sel`)
- store the modified 16 byte vector (`vec_st`)

当然,这假设所需的8字节的目的地落入16字节对齐的向量内。例如,假设目标地址是0x1004,那么您将从地址0x1000加载,修改字节4..11,然后将向量写回0x1000。

票数 1
EN

Stack Overflow用户

发布于 2015-02-10 18:37:23

我已经找到了一种方法来存储存储到未对齐地址的8个字节。

以下是程序。

下面的程序将向量的前8个字节存储到buf。K-i用作变量来更改buf中存储数据的位置

代码语言:javascript
复制
int main(int argc, char *argv[])
{
    unsigned char buf[40];
    vector unsigned char res;
    vector unsigned char on = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

    memset(buf, 0, 40);

    int k = atoi(argv[1]);

    unsigned char *outp = &(buf[k]);

    res =  vec_perm( on, on, vec_lvsr(0, (unsigned char *)outp);

    vec_ste( (vector unsigned char)res, 0, (unsigned char *)outp);

    vec_ste( (vector unsigned short)res, 1, (unsigned short *)outp);

    vec_ste( (vector unsigned short)res, 2, (unsigned short *)outp);

    vec_ste( (vector unsigned short)res, 4,  (unsigned short *)outp);

    vec_ste( (vector unsigned short)res, 6, (unsigned short *)outp);

    vec_ste( (vector unsigned char)res, 7, (unsigned char *)outp);

    print(buf);

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28427579

复制
相关文章

相似问题

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