From 4132e20aadd73290f70083544d4c09ec9db7b4b8 Mon Sep 17 00:00:00 2001 From: Sun Yimin Date: Mon, 20 Dec 2021 09:49:38 +0800 Subject: [PATCH] Updated MFMM (markdown) --- MFMM.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/MFMM.md b/MFMM.md index faa9785..f0fae37 100644 --- a/MFMM.md +++ b/MFMM.md @@ -104,6 +104,25 @@ acc0, acc1, acc2, acc3, acc4, acc5是64位寄存器 ADCQ $0, acc5 // acc5 = carry7 XORQ acc0, acc0 + arm64 汇编表示为 + MUL const1, acc0, t0 + ADCS t0, acc1, acc1 // (carry1, acc1) = acc1 + L(acc0*p1) + UMULH const1, acc0, y0 // y0 = H(acc0*p1) + + MUL const2, acc0, t0 + ADCS t0, acc2, acc2 // (carry2, acc2) = acc2 + L(acc0*p2) + UMULH const2, acc0, hlp0 // hlp0 = H(acc0*p2) + + MUL const3, acc0, t0 // t0 = L(acc0*p3) + ADCS t0, acc3, acc3 // (carry3,acc3) = acc3 + L(acc0*p3) + + UMULH const3, acc0, hlp1 // hlp1 = H(acc0*p3) + ADC $0, acc4 // acc4 = carry3 + acc4 + + ADDS acc0, acc1, acc1 // (carry4, acc1) = acc0 + acc1 + L(acc0*p1) + ADCS y0, acc2, acc2 // (carry5, acc2) = carry4 + acc2 + L(acc0*p2) + H(acc0*p1) + ADCS hlp0, acc3, acc3 // (carry6, acc3) = carry5 + acc3 + L(acc0*p3) + H(acc0*p2) + ADC $0, hlp1, acc0 // acc0 = carry6 + H(acc0*p3) ====== 用加减替代乘法,但存在潜在风险,进位/借位处理太复杂,所以该实现已经被回滚 p*acc0 = acc0*2^256 -(acc0*2^32)*2^192 + (acc0 - acc0*2^32)*2^64 - acc0