frob macro

This commit is contained in:
Dmitry Vagner 2022-11-18 16:58:39 -08:00
parent 84c1954daf
commit 9a68574e48
2 changed files with 70 additions and 75 deletions

View File

@ -33,42 +33,41 @@ post_mllr:
// stack: out, 100, out, tate_mul1, tate_mul2, tate_mul3, retdest
%inverse_fp12
// stack: 100, out, tate_mul1, tate_mul2, tate_mul3, retdest {100: inv}
PUSH mul_fp12
// stack: mul_fp12, 100, out, tate_mul1, tate_mul2, tate_mul3, retdest {100: inv}
DUP3
// stack: out, mul_fp12, 100, out, tate_mul1, tate_mul2, tate_mul3, retdest {100: inv}
%jump(frob_fp12_6)
DUP2
// stack: out, 100, out, tate_mul1, tate_mul2, tate_mul3, retdest {100: inv}
%frob_fp12_6
// stack: out, 100, out, tate_mul1, tate_mul2, tate_mul3, retdest {100: inv}
%jump(mul_fp12)
tate_mul1:
// stack: out, tate_mul2, tate_mul3, retdest {100: inv}
DUP1
// stack: out, out, tate_mul2, tate_mul3, retdest {100: inv}
PUSH mul_fp12
// stack: mul_fp12, out, out, tate_mul2, tate_mul3, retdest {100: inv}
PUSH 100
// stack: 100, mul_fp12, out, out, tate_mul2, tate_mul3, retdest {100: inv}
DUP3
// stack: out, 100, mul_fp12, out, out, tate_mul2, tate_mul3, retdest {100: inv}
%jump(frob_fp12_2)
// stack: 100, out, out, tate_mul2, tate_mul3, retdest {100: inv}
DUP2
// stack: out, 100, out, out, tate_mul2, tate_mul3, retdest {100: inv}
%frob_fp12_2
// stack: 100, out, out, tate_mul2, tate_mul3, retdest {100: inv}
%jump(mul_fp12)
tate_mul2:
// stack: out, tate_mul3, retdest {100: acc}
PUSH post_pow
// stack: post_pow, out, tate_mul3, retdest {100: acc}
PUSH 100
// stack: 100, post_pow, out, tate_mul3, retdest {100: acc}
DUP1
DUP3
// stack: out, 100, post_pow, out, tate_mul3, retdest {100: acc}
%jump(power)
post_pow:
// stack: 100, out, tate_mul3, retdest {100: pow}
PUSH mul_fp12
// stack: mul_fp12, 100, out, tate_mul3, retdest {100: pow}
DUP3
// stack: out, mul_fp12, 100, out, tate_mul3, retdest {100: pow}
%jump(frob_fp12_3)
DUP2
// stack: out, 100, out, tate_mul3, retdest {100: pow}
%frob_fp12_3
// stack: out, 100, out, tate_mul3, retdest {100: pow}
%jump(mul_fp12)
tate_mul3:
// stack: out, retdest {100: pow}
SWAP1
JUMP
SWAP1 JUMP
/// def miller_loop(P, Q):

View File

@ -71,95 +71,91 @@
/// g' = FROB_z[n] * frob_fp6(n, f')
/// return g, g'
global frob_fp12_1:
// stack: ptr, retdest
%macro frob_fp12_1
// stack: ptr
DUP1
// stack: ptr, ptr, retdest
// stack: ptr, ptr
%load_fp6
// stack: f, ptr, retdest
// stack: f, ptr
%frob_fp6_1
// stack: g, ptr, retdest
// stack: g, ptr
DUP7
// stack: ptr, g, ptr, retdest
%load_fp6
// stack: ptr, retdest
// stack: ptr, g, ptr
%store_fp6
// stack: ptr
DUP1 %offset_fp6
// stack: ptr', ptr, retdest
// stack: ptr', ptr
%load_fp6
// stack: f', ptr, retdest
// stack: f', ptr
%frobz_1
// stack: g', ptr, retdest
// stack: g', ptr
DUP1 %offset_fp6
// stack: ptr', g', ptr, retdest
// stack: ptr', g', ptr
%store_fp6
// stack: ptr, retdest
SWAP1
JUMP
// stack: ptr
%endmacro
global frob_fp12_2:
// stack: ptr, retdest
%macro frob_fp12_2
// stack: ptr , out
DUP1
// stack: ptr, ptr, retdest
// stack: ptr, ptr , out
%load_fp6
// stack: f, ptr, retdest
// stack: f, ptr , out
%frob_fp6_2
// stack: g, ptr, retdest
DUP7
// stack: ptr, g, ptr, retdest
// stack: g, ptr , out
DUP8
// stack: out, g, ptr , out
%store_fp6
// stack: ptr , out
%offset_fp6
// stack: ptr', out
%load_fp6
// stack: ptr, retdest
DUP1 %offset_fp6
// stack: ptr', ptr, retdest
%load_fp6
// stack: f', ptr, retdest
// stack: f', out
%frobz_2
// stack: g', ptr, retdest
// stack: g', out
DUP1 %offset_fp6
// stack: ptr', g', ptr, retdest
// stack: out', g', out
%store_fp6
// stack: ptr, retdest
SWAP1
JUMP
// stack: out
%endmacro
global frob_fp12_3:
// stack: ptr, retdest
%macro frob_fp12_3
// stack: ptr
DUP1
// stack: ptr, ptr, retdest
// stack: ptr, ptr
%load_fp6
// stack: f, ptr, retdest
// stack: f, ptr
%frob_fp6_3
// stack: g, ptr, retdest
// stack: g, ptr
DUP7
// stack: ptr, g, ptr, retdest
%load_fp6
// stack: ptr, retdest
// stack: ptr, g, ptr
%store_fp6
// stack: ptr
DUP1 %offset_fp6
// stack: ptr', ptr, retdest
// stack: ptr', ptr
%load_fp6
// stack: f', ptr, retdest
// stack: f', ptr
%frobz_3
// stack: g', ptr, retdest
// stack: g', ptr
DUP1 %offset_fp6
// stack: ptr', g', ptr, retdest
// stack: ptr', g', ptr
%store_fp6
// stack: ptr, retdest
SWAP1
JUMP
// stack: ptr
%endmacro
global frob_fp12_6:
// stack: ptr, retdest
%macro frob_fp12_6:
// stack: ptr
DUP1 %offset_fp6
// stack: ptr', ptr, retdest
// stack: ptr', ptr
%load_fp6
// stack: f', ptr, retdest
// stack: f', ptr
%frobz_6
// stack: g', ptr, retdest
// stack: g', ptr
DUP7 %offset_fp6
// stack: ptr', g', ptr, retdest
// stack: ptr', g', ptr
%store_fp6
// stack: ptr, retdest
SWAP1
JUMP
// stack: ptr
%endmacro
%macro frobz_1
%frob_fp6_1