From b32d7955a94b46116c47febffedaa5c319958282 Mon Sep 17 00:00:00 2001 From: Sun Yimin Date: Thu, 9 Oct 2025 10:28:31 +0800 Subject: [PATCH] =?UTF-8?q?Updated=20sm2=5Fz256=5Floong64.S=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=88=86=E6=9E=90=20(markdown)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sm2_z256_loong64.S-代码分析.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sm2_z256_loong64.S-代码分析.md b/sm2_z256_loong64.S-代码分析.md index a7770fc..c916d4f 100644 --- a/sm2_z256_loong64.S-代码分析.md +++ b/sm2_z256_loong64.S-代码分析.md @@ -73,7 +73,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 注释:这里 $t_0<<32$ 是 $t_0 \ast 2^{32}$ 的低64位, $t_0>>32$ 是 $t_0 \ast 2^{32}$ 的高64位。 它这里先计算T的系数(WORD),再计算 $T_2$ 的系数。 1. 几个**no carry**判断的准确性: - 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$ ,但这不影响最终结果的准确性,因为接下来的判断 `sltu $a1, $t5, $s2` , 不会因为上面两个语句的顺序产生不同结果,上面两个加法最多可能产生一次进位。