我正在尝试在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
我知道我做错了。我想知道我的预期输出是否正确,如果是,我想知道我在这里做错了什么。
任何帮助将不胜感激,在此先感谢。
我认为您在打印输入和输出方式时遇到一个字节序问题。
每个64位半部分中最左边的字节是实际输出中的最低有效字节