From ff0695d76046ff326e17f669e89fad21ce299b9d Mon Sep 17 00:00:00 2001 From: Dmitry Vagner Date: Thu, 20 Apr 2023 20:31:26 -0700 Subject: [PATCH] renumber memory --- .../bn254/curve_arithmetic/miller_loop.asm | 50 +++++++++---------- .../curve/bn254/curve_arithmetic/pairing.asm | 30 +++++------ 2 files changed, 38 insertions(+), 42 deletions(-) diff --git a/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/miller_loop.asm b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/miller_loop.asm index 0067e0ec..ce43d4f1 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/miller_loop.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/miller_loop.asm @@ -100,19 +100,19 @@ mul_tangent: // stack: out, out, mul_tangent_1, out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out %jump(square_fp254_12) mul_tangent_1: - // stack: out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out + // stack: out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out DUP13 DUP13 DUP13 DUP13 - // stack: Q, out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out + // stack: Q, out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out DUP11 DUP11 - // stack: O, Q, out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out + // stack: O, Q, out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out %tangent - // stack: out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out {0: line} - %stack (out) -> (out, 0, out) - // stack: out, 0, out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out {0: line} + // stack: out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out {0: line} + %stack (out) -> (out, 12, out) + // stack: out, 12, out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out {0: line} %jump(mul_fp254_12_sparse) mul_tangent_2: // stack: retdest, 0xnm, times, O, P, Q, out {0: line} @@ -137,26 +137,26 @@ after_double: /// O += P mul_cord: - // stack: 0xnm, times, O, P, Q, out + // stack: 0xnm, times, O, P, Q, out PUSH mul_cord_1 - // stack: mul_cord_1, 0xnm, times, O, P, Q, out + // stack: mul_cord_1, 0xnm, times, O, P, Q, out DUP11 DUP11 DUP11 DUP11 - // stack: Q, mul_cord_1, 0xnm, times, O, P, Q, out + // stack: Q, mul_cord_1, 0xnm, times, O, P, Q, out DUP9 DUP9 - // stack: O, Q, mul_cord_1, 0xnm, times, O, P, Q, out + // stack: O, Q, mul_cord_1, 0xnm, times, O, P, Q, out DUP13 DUP13 - // stack: P, O, Q, mul_cord_1, 0xnm, times, O, P, Q, out + // stack: P, O, Q, mul_cord_1, 0xnm, times, O, P, Q, out %cord - // stack: mul_cord_1, 0xnm, times, O, P, Q, out {0: line} + // stack: mul_cord_1, 0xnm, times, O, P, Q, out {0: line} DUP12 - // stack: out, mul_cord_1, 0xnm, times, O, P, Q, out {0: line} - %stack (out) -> (out, 0, out) - // stack: out, 0, out, mul_cord_1, 0xnm, times, O, P, Q, out {0: line} + // stack: out, mul_cord_1, 0xnm, times, O, P, Q, out {0: line} + %stack (out) -> (out, 12, out) + // stack: out, 12, out, mul_cord_1, 0xnm, times, O, P, Q, out {0: line} %jump(mul_fp254_12_sparse) mul_cord_1: // stack: 0xnm, times, O , P, Q, out @@ -193,7 +193,7 @@ after_add: // stack: py^2 , 9, px, py, qx, qx_, qy, qy_ SUBFP254 // stack: py^2 - 9, px, py, qx, qx_, qy, qy_ - %mstore_kernel_bn254_pairing(0) + %mstore_kernel_bn254_pairing(12) // stack: px, py, qx, qx_, qy, qy_ DUP1 MULFP254 @@ -209,7 +209,7 @@ after_add: DUP3 MULFP254 // stack: (-3*px^2)qx, py, -3px^2, qx_, qy, qy_ - %mstore_kernel_bn254_pairing(2) + %mstore_kernel_bn254_pairing(14) // stack: py, -3px^2, qx_, qy, qy_ PUSH 2 MULFP254 @@ -219,15 +219,15 @@ after_add: DUP4 MULFP254 // stack: (2py)qy, -3px^2, qx_, 2py, qy_ - %mstore_kernel_bn254_pairing(8) + %mstore_kernel_bn254_pairing(20) // stack: -3px^2, qx_, 2py, qy_ MULFP254 // stack: (-3px^2)*qx_, 2py, qy_ - %mstore_kernel_bn254_pairing(3) + %mstore_kernel_bn254_pairing(15) // stack: 2py, qy_ MULFP254 // stack: (2py)*qy_ - %mstore_kernel_bn254_pairing(9) + %mstore_kernel_bn254_pairing(21) %endmacro /// def cord(p1x, p1y, p2x, p2y, qx, qy): @@ -249,7 +249,7 @@ after_add: // stack: p1y*p2x , p2y*p1x, p1x , p1y, p2x , p2y, qx, qx_, qy, qy_ SUBFP254 // stack: p1y*p2x - p2y*p1x, p1x , p1y, p2x , p2y, qx, qx_, qy, qy_ - %mstore_kernel_bn254_pairing(0) + %mstore_kernel_bn254_pairing(12) // stack: p1x , p1y, p2x , p2y, qx, qx_, qy, qy_ SWAP3 // stack: p2y , p1y, p2x , p1x, qx, qx_, qy, qy_ @@ -264,20 +264,20 @@ after_add: DUP5 MULFP254 // stack: (p1x - p2x)qy, p2y - p1y, qx, qx_, p1x - p2x, qy_ - %mstore_kernel_bn254_pairing(8) + %mstore_kernel_bn254_pairing(20) // stack: p2y - p1y, qx, qx_, p1x - p2x, qy_ SWAP1 // stack: qx, p2y - p1y, qx_, p1x - p2x, qy_ DUP2 MULFP254 // stack: (p2y - p1y)qx, p2y - p1y, qx_, p1x - p2x, qy_ - %mstore_kernel_bn254_pairing(2) + %mstore_kernel_bn254_pairing(14) // stack: p2y - p1y, qx_, p1x - p2x, qy_ MULFP254 // stack: (p2y - p1y)qx_, p1x - p2x, qy_ - %mstore_kernel_bn254_pairing(3) + %mstore_kernel_bn254_pairing(15) // stack: p1x - p2x, qy_ MULFP254 // stack: (p1x - p2x)*qy_ - %mstore_kernel_bn254_pairing(9) + %mstore_kernel_bn254_pairing(21) %endmacro diff --git a/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/pairing.asm b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/pairing.asm index b5e8a034..3c91192b 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/pairing.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/pairing.asm @@ -11,15 +11,8 @@ /// return bn254_final_exponent(out) global bn254_pairing: - // stack: k, inp, out, retdest - %stack (k, inp, out) -> (out, 1, k, inp, out) - // stack: out, 1, k, inp, out, retdest - %mstore_kernel_bn254_pairing - // stack: k, inp, out, retdest - - // %jump(bn254_pairing_loop) // this short circuits the input checks + // stack: k, inp, out, retdest DUP1 - // stack: k, k, inp, out, retdest bn254_input_check: // stack: j , k, inp @@ -54,22 +47,25 @@ bn254_input_check: %jump(bn254_input_check) bn254_pairing_start: - // stack: 0, k, inp, out, retdest - POP + // stack: 0, k, inp, out, retdest + %stack (j, k, inp, out) -> (out, 1, k, inp, out) + // stack: out, 1, k, inp, out, retdest + %mstore_kernel_bn254_pairing + // stack: k, inp, out, retdest bn254_pairing_loop: - // stack: k , inp, out, retdest + // stack: k, inp, out, retdest DUP1 ISZERO - // stack: end?, k , inp, out, retdest + // stack: end?, k, inp, out, retdest %jumpi(bn254_final_exponent) - // stack: k , inp, out, retdest + // stack: k, inp, out, retdest %sub_const(1) - // stack: k=k-1, inp, out, retdest + // stack: k=k-1, inp, out, retdest - %stack (k, inp, out) -> (k, inp, 200, mul_fp254_12, 200, out, out, bn254_pairing_loop, k, inp, out) - // stack: k, inp, 200, mul_fp254_12, 200, out, out, bn254_pairing_loop, k, inp, out retdest + %stack (k, inp, out) -> (k, inp, 0, mul_fp254_12, 0, out, out, bn254_pairing_loop, k, inp, out) + // stack: k, inp, 0, mul_fp254_12, 0, out, out, bn254_pairing_loop, k, inp, out retdest %mul_const(6) ADD - // stack: inp_k, 200, mul_fp254_12, 200, out, out, bn254_pairing_loop, k, inp, out retdest + // stack: inp_k, 0, mul_fp254_12, 0, out, out, bn254_pairing_loop, k, inp, out retdest %jump(bn254_miller)