Updated SM2 MFMM (2) (markdown)

Sun Yimin 2024-02-22 09:55:16 +08:00
parent 7f081361cf
commit eed9045293

@ -75,4 +75,27 @@ $t_2=t_2 - a_1$
$t_3=t_3 - a_0$ $t_3=t_3 - a_0$
$t_0=t_0 - a_1$ $t_0=t_0 - a_1$
伪代码:
```asm
\ // First reduction step, [p3, p2, p1, p0] = [1, -0x100000000, 0, (1 - 0x100000000), -1]
MOVQ acc0, AX \
MOVQ acc0, DX \
SHLQ $32, AX \ // AX = L(acc0 * 2^32), low part
SHRQ $32, DX \ // DX = H(acc0 * 2^32), high part
\ // calculate the positive part first: [1, 0, 0, 1] * acc0 + [0, acc3, acc2, acc1],
\ // due to (-1) * acc0 + acc0 == 0, so last lowest lamb 0 is dropped directly, no carry.
ADDQ acc0, acc1 \ // acc1' = L (acc0 + acc1)
ADCQ $0, acc2 \ // acc2' = acc2 + carry1
ADCQ $0, acc3 \ // acc3' = acc3 + carry2
ADCQ $0, acc0 \ // acc0' = acc0 + carry3
\// calculate the negative part: [0, -0x100000000, 0, -0x100000000] * acc0
SUBQ AX, acc1 \
SBBQ DX, acc2 \
SBBQ AX, acc3 \
SBBQ DX, acc0 \
```
移位: 2
加法4
减法4