From 31095e1b239051934ca656e6fed963a564b3ae9f Mon Sep 17 00:00:00 2001 From: Dmitry Vagner Date: Wed, 8 Feb 2023 09:37:27 -0800 Subject: [PATCH] stack macro --- .../bn254/field_arithmetic/degree_12_mul.asm | 14 ++-- .../asm/curve/bn254/field_arithmetic/util.asm | 77 +------------------ 2 files changed, 11 insertions(+), 80 deletions(-) diff --git a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/degree_12_mul.asm b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/degree_12_mul.asm index 21e11a36..3d384380 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/degree_12_mul.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/degree_12_mul.asm @@ -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 diff --git a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/util.asm b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/util.asm index 87cba2eb..d40ea03d 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/util.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/util.asm @@ -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