simd_srlow/simd_sllow函数运行结果不正确
-
在从核中将uintv8向量的第0个字节(值为97)移位到第31个字节,代码如下
simd_print_uintv8(inpwd); int shamt = (32 - len) << 3; inpwd = simd_sllow((uint256)inpwd, shamt); simd_print_uintv8(inpwd);
当len的值为1时,shamt = 248,输出如下,可以计算出实际只左移了28位
[ 0, 0, 0, 0, 0, 0, 0, 97 ] [ 0, 0, 0, 0, 0, 0, 6, 268435456 ]
而当代码改为如下形式后,
simd_print_uintv8(inpwd); int shamt = 248; inpwd = simd_sllow((uint256)inpwd, shamt); simd_print_uintv8(inpwd);
输出结果如下,可以计算出实际左移了248位,符合预期
[ 0, 0, 0, 0, 0, 0, 0, 97 ] [ 1627389952, 0, 0, 0, 0, 0, 0, 0 ]
为何shamt的值相同,但simd_sllow函数得到的结果完全不同?
-
旧版编译器似乎一直有这样的问题。。。如果移位的位数为变量,似乎把类型转成intv8或者int256应该会产生正确的结果。