mirror of
https://github.com/emmansun/gmsm.git
synced 2025-10-14 23:30:48 +08:00
Updated sm2_z256_loong64.S 代码分析 (markdown)
parent
fe975a250c
commit
dc587b4a19
@ -6,7 +6,7 @@
|
|||||||
实现`(t0, t1, t2, t3) = (t0, t1, t2, t3) + (a4, a5, a6, a7)`,每个代表64位整数,从低到高排列,也就是说`t0`和`a4`是最低64位数,也就是多字(Multi-Word)加法。
|
实现`(t0, t1, t2, t3) = (t0, t1, t2, t3) + (a4, a5, a6, a7)`,每个代表64位整数,从低到高排列,也就是说`t0`和`a4`是最低64位数,也就是多字(Multi-Word)加法。
|
||||||
|
|
||||||
**总体实现思路**:
|
**总体实现思路**:
|
||||||
1. 在RISC(如龙芯/LoongArch、MIPS)架构中,没有x86那样的进位标识寄存器,所以进位都要用`sltu` (无符号小于)等指令手动计算。
|
1. 在RISC(如龙芯/LoongArch、MIPS)架构中,没有x86那样的进位标识寄存器,所以进位都要用`sltu` (无符号小于)等指令手动计算。容易出错!
|
||||||
1. 使用加`1`来实现`mod P`,这里的`1`为 $2^{256} - P$ 。
|
1. 使用加`1`来实现`mod P`,这里的`1`为 $2^{256} - P$ 。
|
||||||
1. 使用`or`合并进位(carry)。
|
1. 使用`or`合并进位(carry)。
|
||||||
1. 使用`masknez`和`maskeqz`来选择最终结果。
|
1. 使用`masknez`和`maskeqz`来选择最终结果。
|
||||||
|
Loading…
x
Reference in New Issue
Block a user