使用AVX2指令左移128位数字的位数

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

我正在尝试在AVX2中向左旋转128位数字。由于没有这样做的直接方法,因此我尝试使用左移和右移来完成任务。

这是我的代码的片段,用于执行相同的操作。

        l = 4;
        r = 4;
        targetrotate = _mm_set_epi64x (l, r);
        targetleftrotate = _mm_sllv_epi64 (target, targetrotate);

上面的代码片段将目标向左旋转4。当我使用示例输入测试上述代码时,我可以看到结果未正确旋转。

这里是示例输入和输出

          input: 01 23 45 67 89 ab cd ef   fe dc ba 98 76 54 32 10
obtained output: 10 30 52 74 96 b8 da fc   e0 cf ad 8b 69 47 25 03

但是,我期望的输出是

                 12 34 56 78 9a bc de f0   ed cb a9 87 65 43 21 00

我知道我做错了。我想知道我的预期输出是否正确,如果是,我想知道我在这里做错了什么。

任何帮助将不胜感激,在此先感谢。

c++ simd intrinsics avx avx2
1个回答
0
投票

我认为您在打印输入和输出方式时遇到一个字节序问题。

每个64位半部分中最左边的字节是实际输出中的最低有效字节

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