stack macro

This commit is contained in:
Dmitry Vagner 2023-02-08 09:37:27 -08:00
parent a061b88a7a
commit 31095e1b23
2 changed files with 11 additions and 80 deletions

View File

@ -76,13 +76,13 @@ mul_fp254_12_1:
// stack: inB, inA, g' , f', inA, inB, out {0: sh(f'g'), 6: f'g'}
%load_fp254_6
// stack: g , inA, g' , f', inA, inB, out {0: sh(f'g'), 6: f'g'}
%swap_fp254_6_hole
%stack (f: 6, x, g: 6) -> (g, x, f)
// stack: g', inA, g , f', inA, inB, out {0: sh(f'g'), 6: f'g'}
%dup_fp254_6_7
// stack: g,g', inA, g , f', inA, inB, out {0: sh(f'g'), 6: f'g'}
%add_fp254_6
// stack: g+g', inA, g , f', inA, inB, out {0: sh(f'g'), 6: f'g'}
%swap_fp254_6_hole
%stack (f: 6, x, g: 6) -> (g, x, f)
// stack: g, inA, g+g', f', inA, inB, out {0: sh(f'g'), 6: f'g'}
PUSH mul_fp254_12_2
// stack: mul_fp254_12_2, g, inA, g+g', f', inA, inB, out {0: sh(f'g'), 6: f'g'}
@ -224,7 +224,7 @@ global mul_fp254_12_sparse:
// stack: G2 * sh2(f') , g0 * f, inB, f, inB, f', out, f, inB, f', inA, inB, out
%add_fp254_6
// stack: G2 * sh2(f') + g0 * f, inB, f, inB, f', out, f, inB, f', inA, inB, out
%swap_fp254_6_hole
%stack (f: 6, x, g: 6) -> (g, x, f)
// stack: f , inB, G2 * sh2(f') + g0 * f, inB, f', out, f, inB, f', inA, inB, out
DUP7 %add_const(2)
// stack: inB1, f , inB, G2 * sh2(f') + g0 * f, inB, f', out, f, inB, f', inA, inB, out
@ -242,7 +242,7 @@ global mul_fp254_12_sparse:
// stack: g0 , f', out, f, inB, f', inA, inB, out
%scale_re_fp254_6
// stack: g0 * f', out, f, inB, f', inA, inB, out
%swap_fp254_6_hole
%stack (f: 6, x, g: 6) -> (g, x, f)
// stack: f , out, g0 * f', inB, f', inA, inB, out
DUP14
%add_const(8)
@ -253,7 +253,7 @@ global mul_fp254_12_sparse:
// stack: G2 * sh(f) , out, g0 * f', inB, f', inA, inB, out
%add_fp254_6_hole
// stack: G2 * sh(f) + g0 * f', inB, f', inA, inB, out
%swap_fp254_6_hole
%stack (f: 6, x, g: 6) -> (g, x, f)
// stack: f' , inB, G2 * sh(f) + g0 * f', inA, inB, out
DUP7
%add_const(2)
@ -341,7 +341,7 @@ global square_fp254_12:
// stack: inp', square_fp254_12_1, out', f , square_fp254_12_2, inp, f, square_fp254_12_3, out
%load_fp254_6
// stack: f', square_fp254_12_1, out', f , square_fp254_12_2, inp, f, square_fp254_12_3, out
%swap_fp254_6_hole_2
%stack (f: 6, x: 2, g: 6) -> (g, x, f)
// stack: f , square_fp254_12_1, out', f', square_fp254_12_2, inp, f, square_fp254_12_3, out
%dup_fp254_6_8
// stack: f', f , square_fp254_12_1, out', f', square_fp254_12_2, inp, f, square_fp254_12_3, out
@ -359,7 +359,7 @@ square_fp254_12_2:
// stack: f'f', inp, f, square_fp254_12_3, out
%sh_fp254_6
// stack: sh(f'f'), inp, f, square_fp254_12_3, out
%swap_fp254_6_hole
%stack (f: 6, x, g: 6) -> (g, x, f)
// stack: f, inp, sh(f'f'), square_fp254_12_3, out
SWAP6
SWAP13

View File

@ -402,84 +402,15 @@
// stack: g0, g1, g2, g3, g4, g5, f0, f1, f2, f3, f4, f5
%endmacro
// cost: 16
// swap two fp254_6 elements with a stack term separating them
// (f: 6, X, g: 6) -> (g: 6, X, f: 6)
%macro swap_fp254_6_hole
// stack: f0, f1, f2, f3, f4, f5, X, g0, g1, g2, g3, g4, g5
SWAP7
// stack: g0, f1, f2, f3, f4, f5, X, f0, g1, g2, g3, g4, g5
SWAP1
SWAP8
SWAP1
// stack: g0, g1, f2, f3, f4, f5, X, f0, f1, g2, g3, g4, g5
SWAP2
SWAP9
SWAP2
// stack: g0, g1, g2, f3, f4, f5, X, f0, f1, f2, g3, g4, g5
SWAP3
SWAP10
SWAP3
// stack: g0, g1, g2, g3, f4, f5, X, f0, f1, f2, f3, g4, g5
SWAP4
SWAP11
SWAP4
// stack: g0, g1, g2, g3, g4, f5, X, f0, f1, f2, f3, f4, g5
SWAP5
SWAP12
SWAP5
// stack: g0, g1, g2, g3, g4, g5, X, f0, f1, f2, f3, f4, f5
%endmacro
// cost: 16
// swap two fp254_6 elements with two stack terms separating them
// (f: 6, X: 2, g: 6) -> (g: 6, X: 2, f: 6)
%macro swap_fp254_6_hole_2
// stack: f0, f1, f2, f3, f4, f5, X, g0, g1, g2, g3, g4, g5
SWAP8
// stack: g0, f1, f2, f3, f4, f5, X, f0, g1, g2, g3, g4, g5
SWAP1
SWAP9
SWAP1
// stack: g0, g1, f2, f3, f4, f5, X, f0, f1, g2, g3, g4, g5
SWAP2
SWAP10
SWAP2
// stack: g0, g1, g2, f3, f4, f5, X, f0, f1, f2, g3, g4, g5
SWAP3
SWAP11
SWAP3
// stack: g0, g1, g2, g3, f4, f5, X, f0, f1, f2, f3, g4, g5
SWAP4
SWAP12
SWAP4
// stack: g0, g1, g2, g3, g4, f5, X, f0, f1, f2, f3, f4, g5
SWAP5
SWAP13
SWAP5
// stack: g0, g1, g2, g3, g4, g5, X, f0, f1, f2, f3, f4, f5
%endmacro
/// multiply (a + bt + ct^2) by t:
/// t(a + bt + ct^2) = at + bt^2 + ct^3 = (9+i)c + at + bt^2
%macro sh_fp254_6
// stack: f0 , f0_, f1, f1_, f2 , f2_
SWAP2
// stack: f1 , f0_, g0 , f1_, f2 , f2_
SWAP4
// stack: f2 , f0_, g0 , f1_, g1 , f2_
SWAP1
// stack: f0_, f2 , g0 , f1_, g1 , f2_
SWAP3
// stack: f1_, f2 , g0 , g0_, g1 , f2_
SWAP5
// stack: f2_, f2 , g0 , g0_, g1 , g1_
SWAP1
// stack: f2 , f2_, g0 , g0_, g1 , g1_
// stack: a, b, c
%stack (a: 2, b: 2, c: 2) -> (c, a, b)
// stack: c, a, b
%i9
// stack: g2_, g2 , g0 , g0_, g1 , g1_
SWAP1
// stack: g2 , g2_, g0 , g0_, g1 , g1_
// stack: (9+i)c, a, b
%endmacro
// cost: 16