Updated sm2_z256_loong64.S 代码分析 (markdown)

Sun Yimin 2025-10-09 10:56:21 +08:00
parent 105992dcf4
commit 7406014f53

@ -76,7 +76,7 @@ $T_3=T + T_2=(t_4+t_0-t_0>>32) \ast 2^{256}+(t_3 - t_0<<32) \ast 2^{192} + (t_2
1. https://github.com/DengJianbo-loongson/GmSSL/blob/2497946ac6458ae1fb6931b66804dbc62cfffe44/src/sm2_z256_loong64.S#L268 `add.d $t5, $a1, $t5`,这里`$a1`是可能的进位这一点是不一定成立的。但是如果把它和261行`add.d $t5, $t5, $s2`交换一下顺序则成立因为两个64位字的乘法产生的高64位字不可能是 $2^{64}-1$ ,所以结果是否正确,需要进一步证明,并没那么直观。 1. https://github.com/DengJianbo-loongson/GmSSL/blob/2497946ac6458ae1fb6931b66804dbc62cfffe44/src/sm2_z256_loong64.S#L268 `add.d $t5, $a1, $t5`,这里`$a1`是可能的进位这一点是不一定成立的。但是如果把它和261行`add.d $t5, $t5, $s2`交换一下顺序则成立因为两个64位字的乘法产生的高64位字不可能是 $2^{64}-1$ ,所以结果是否正确,需要进一步证明,并没那么直观。
1. https://github.com/DengJianbo-loongson/GmSSL/blob/2497946ac6458ae1fb6931b66804dbc62cfffe44/src/sm2_z256_loong64.S#L273 这里是成立的。 1. https://github.com/DengJianbo-loongson/GmSSL/blob/2497946ac6458ae1fb6931b66804dbc62cfffe44/src/sm2_z256_loong64.S#L273 这里是成立的。
1. 约简还没完成,也就是上一步 $T_2 + T$ 还没算完,就开始了下一个字的乘法,代码可读性降低,为了性能? 1. 约简还没完成,也就是上一步 $T_2 + T$ 还没算完,就开始了下一个字的乘法,代码可读性降低,为了性能?
1. 最后,使用加`1`来实现`mod P`,这里的`1`为 $2^{256} - P$ 。 1. 最后,依然使用加`1`来实现`mod P`,这里的`1`为 $2^{256} - P$ 。