From 444da8f760c8798458660ea1aca37ae369c01949 Mon Sep 17 00:00:00 2001 From: Dmitry Vagner Date: Mon, 13 Feb 2023 14:31:53 -0800 Subject: [PATCH] better comments --- .../curve_arithmetic/invariant_exponent.asm | 222 +++++++++--------- 1 file changed, 111 insertions(+), 111 deletions(-) diff --git a/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/invariant_exponent.asm b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/invariant_exponent.asm index 9d72767d..2fcd5d2b 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/invariant_exponent.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/invariant_exponent.asm @@ -12,14 +12,14 @@ global bn254_invariant_exponent: /// first, exponentiate by (p^6 - 1) via /// def first_exp(y): /// return y.frob(6) / y - // stack: out, retdest {out: y} + // stack: out, retdest {out: y} %stack (out) -> (out, 0, first_exp, out) // stack: out, 0, first_exp, out, retdest {out: y} %jump(inv_fp254_12) first_exp: - // stack: out, retdest {out: y , 0: y^-1} + // stack: out, retdest {out: y , 0: y^-1} %frob_fp254_12_6 - // stack: out, retdest {out: y_6, 0: y^-1} + // stack: out, retdest {out: y_6, 0: y^-1} %stack (out) -> (out, 0, out, second_exp, out) // stack: out, 0, out, second_exp, out, retdest {out: y_6, 0: y^-1} %jump(mul_fp254_12) @@ -28,7 +28,7 @@ first_exp: /// def second_exp(y): /// return y.frob(2) * y second_exp: - // stack: out, retdest {out: y} + // stack: out, retdest {out: y} %stack (out) -> (out, 0, out, out, final_exp, out) // stack: out, 0, out, out, final_exp, out, retdest {out: y} %frob_fp254_12_2_ @@ -53,18 +53,18 @@ second_exp: final_exp: // stack: val, retdest - %stack (val) -> (val, 60, val) - // stack: val, 60, val, retdest + %stack (val) -> (val, 12, val) + // stack: val, 12, val, retdest %move_fp254_12 - // stack: 60, val, retdest + // stack: 12, val, retdest {12: sqr} %stack () -> (1, 1, 1) - // stack: 1, 1, 1, 60, val, retdest - %mstore_kernel_bn254_pairing(12) + // stack: 1, 1, 1, 12, val, retdest + %mstore_kernel_bn254_pairing(24) %mstore_kernel_bn254_pairing(36) - %mstore_kernel_bn254_pairing(24) - // stack: 60, val, retdest {12: y0, 24: y2, 36: y4} + %mstore_kernel_bn254_pairing(48) + // stack: 12, val, retdest {12: sqr, 24: y0, 36: y2, 48: y4} %stack () -> (64, 62, 65) - // stack: 64, 62, 65, 60, val, retdest {12: y0, 24: y2, 36: y4} + // stack: 64, 62, 65, 12, val, retdest {12: sqr, 24: y0, 36: y2, 48: y4} %jump(power_loop_4) /// After computing the powers @@ -87,49 +87,49 @@ final_exp: /// return y * y2 * y1 * y0 custom_powers: - // stack: val, retdest {12: y0, 24: y2, 36: y4} - %stack () -> (12, 48, make_term_1) - // stack: 12, 48, make_term_1, val, retdest {12: y0, 24: y2, 36: y4} + // stack: val, retdest {24: y0, 36: y2, 48: y4} + %stack () -> (24, 60, make_term_1) + // stack: 24, 60, make_term_1, val, retdest {24: y0, 36: y2, 48: y4} %jump(inv_fp254_12) make_term_1: - // stack: val, retdest {24: y2, 36: y4, 48: y0^-1} - %stack () -> (24, 36, 36, make_term_2) - // stack: 24, 36, 36, make_term_2, val, retdest {24: y2, 36: y4, 48: y0^-1} + // stack: val, retdest {36: y2, 48: y4, 60: y0^-1} + %stack () -> (36, 48, 48, make_term_2) + // stack: 36, 48, 48, make_term_2, val, retdest {36: y2, 48: y4, 60: y0^-1} %jump(mul_fp254_12) make_term_2: - // stack: val, retdest {24: y2, 36: y4 * y2, 48: y0^-1} - %stack () -> (24, 36, 36, make_term_3) - // stack: 24, 36, 36, make_term_3, val, retdest {24: y2, 36: y4 * y2, 48: y0^-1} + // stack: val, retdest {36: y2, 48: y4 * y2, 60: y0^-1} + %stack () -> (36, 48, 48, make_term_3) + // stack: 36, 48, 48, make_term_3, val, retdest {36: y2, 48: y4 * y2, 60: y0^-1} %jump(mul_fp254_12) make_term_3: - // stack: val, retdest {24: y2, 36: y4 * y2^2, 48: y0^-1} - %stack () -> (48, 36, 36, final_power) - // stack: 48, 36, 36, final_power, val, retdest {24: y2, 36: y4 * y2^2, 48: y0^-1} + // stack: val, retdest {36: y2, 48: y4 * y2^2, 60: y0^-1} + %stack () -> (60, 48, 48, final_power) + // stack: 60, 48, 48, final_power, val, retdest {36: y2, 48: y4 * y2^2, 60: y0^-1} %jump(mul_fp254_12) final_power: - // stack: val, retdest {val: y , 24: y^a2 , 36: y^a1 , 48: y^a0} + // stack: val, retdest {val: y , 36: y^a2 , 48: y^a1 , 60: y^a0} %frob_fp254_12_3 - // stack: val, retdest {val: y_3, 24: y^a2 , 36: y^a1 , 48: y^a0} - %stack () -> (24, 24) + // stack: val, retdest {val: y_3, 36: y^a2 , 48: y^a1 , 60: y^a0} + %stack () -> (36, 36) %frob_fp254_12_2_ POP - // stack: val, retdest {val: y_3, 24: (y^a2)_2, 36: y^a1 , 48: y^a0} - PUSH 36 + // stack: val, retdest {val: y_3, 36: (y^a2)_2, 48: y^a1 , 60: y^a0} + PUSH 48 %frob_fp254_12_1 POP - // stack: val, retdest {val: y_3, 24: (y^a2)_2, 36: (y^a1)_1, 48: y^a0} - %stack (val) -> (24, val, val, penult_mul, val) - // stack: 24, val, val, penult_mul, val, retdest {val: y_3, 24: (y^a2)_2, 36: (y^a1)_1, 48: y^a0} + // stack: val, retdest {val: y_3, 36: (y^a2)_2, 48: (y^a1)_1, 60: y^a0} + %stack (val) -> (36, val, val, penult_mul, val) + // stack: 36, val, val, penult_mul, val, retdest {val: y_3, 36: (y^a2)_2, 48: (y^a1)_1, 60: y^a0} %jump(mul_fp254_12) penult_mul: - // stack: val, retdest {val: y_3 * (y^a2)_2, 36: (y^a1)_1, 48: y^a0} - %stack (val) -> (36, val, val, final_mul, val) - // stack: 36, val, val, final_mul, val, retdest {val: y_3 * (y^a2)_2, 36: (y^a1)_1, 48: y^a0} + // stack: val, retdest {val: y_3 * (y^a2)_2, 48: (y^a1)_1, 60: y^a0} + %stack (val) -> (48, val, val, final_mul, val) + // stack: 48, val, val, final_mul, val, retdest {val: y_3 * (y^a2)_2, 48: (y^a1)_1, 60: y^a0} %jump(mul_fp254_12) final_mul: - // stack: val, retdest {val: y_3 * (y^a2)_2 * (y^a1)_1, 48: y^a0} - %stack (val) -> (48, val, val) - // stack: 48, val, val, retdest {val: y_3 * (y^a2)_2 * (y^a1)_1, 48: y^a0} + // stack: val, retdest {val: y_3 * (y^a2)_2 * (y^a1)_1, 60: y^a0} + %stack (val) -> (60, val, val) + // stack: 60, val, val, retdest {val: y_3 * (y^a2)_2 * (y^a1)_1, 60: y^a0} %jump(mul_fp254_12) @@ -164,156 +164,156 @@ final_mul: /// y0 *= acc power_loop_4: - // stack: i , j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: i , j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP1 ISZERO - // stack: break?, i , j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: break?, i , j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jumpi(power_loop_4_end) - // stack: i , j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: i , j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %sub_const(1) - // stack: i-1, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: i-1, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP1 %mload_kernel_code(power_data_4) - // stack: abc, i-1, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: abc, i-1, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP1 %lt_const(100) - // stack: skip?, abc, i-1, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: skip?, abc, i-1, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jumpi(power_loop_4_b) - // stack: abc, i-1, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: abc, i-1, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %sub_const(100) - // stack: bc, i-1, j, k, sqr {12: y0, 24: y2, 36: y4} - %stack () -> (36, 36, power_loop_4_b) - // stack: 36, 36, power_loop_4_b, bc, i-1, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: bc, i-1, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} + %stack () -> (48, 48, power_loop_4_b) + // stack: 48, 48, power_loop_4_b, bc, i-1, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP8 - // stack: sqr, 36, 36, power_loop_4_b, bc, i-1, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: sqr, 48, 48, power_loop_4_b, bc, i-1, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jump(mul_fp254_12) power_loop_4_b: - // stack: bc, i, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: bc, i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP1 %lt_const(10) - // stack: skip?, bc, i, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: skip?, bc, i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jumpi(power_loop_4_c) - // stack: bc, i, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: bc, i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %sub_const(10) - // stack: c, i, j, k, sqr {12: y0, 24: y2, 36: y4} - %stack () -> (24, 24, power_loop_4_c) - // stack: 24, 24, power_loop_4_c, c, i, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: c, i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} + %stack () -> (36, 36, power_loop_4_c) + // stack: 36, 36, power_loop_4_c, c, i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP8 - // stack: sqr, 24, 24, power_loop_4_c, c, i, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: sqr, 36, 36, power_loop_4_c, c, i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jump(mul_fp254_12) power_loop_4_c: - // stack: c, i, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: c, i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} ISZERO - // stack: skip?, i, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: skip?, i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jumpi(power_loop_4_sq) - // stack: i, j, k, sqr {12: y0, 24: y2, 36: y4} - %stack () -> (12, 12, power_loop_4_sq) - // stack: 12, 12, power_loop_4_sq, i, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} + %stack () -> (24, 24, power_loop_4_sq) + // stack: 24, 24, power_loop_4_sq, i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP7 - // stack: sqr, 12, 12, power_loop_4_sq, i, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: sqr, 24, 24, power_loop_4_sq, i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jump(mul_fp254_12) power_loop_4_sq: - // stack: i, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} PUSH power_loop_4 - // stack: power_loop_4, i, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: power_loop_4, i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP5 DUP1 - // stack: sqr, sqr, power_loop_4, i, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: sqr, sqr, power_loop_4, i, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jump(square_fp254_12) power_loop_4_end: - // stack: 0, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: 0, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} POP - // stack: j, k, sqr {12: y0, 24: y2, 36: y4} - %stack () -> (36, 36, power_loop_2) - // stack: 36, 36, power_loop_2, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} + %stack () -> (48, 48, power_loop_2) + // stack: 48, 48, power_loop_2, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP6 - // stack: sqr, 36, 36, power_loop_2, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: sqr, 48, 48, power_loop_2, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jump(mul_fp254_12) power_loop_2: - // stack: j , k, sqr {12: y0, 24: y2, 36: y4} + // stack: j , k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP1 ISZERO - // stack: break?, j , k, sqr {12: y0, 24: y2, 36: y4} + // stack: break?, j , k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jumpi(power_loop_2_end) - // stack: j , k, sqr {12: y0, 24: y2, 36: y4} + // stack: j , k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %sub_const(1) - // stack: j-1, k, sqr {12: y0, 24: y2, 36: y4} + // stack: j-1, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP1 %mload_kernel_code(power_data_2) - // stack: ab, j-1, k, sqr {12: y0, 24: y2, 36: y4} + // stack: ab, j-1, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP1 %lt_const(10) - // stack: skip?, ab, j-1, k, sqr {12: y0, 24: y2, 36: y4} + // stack: skip?, ab, j-1, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jumpi(power_loop_2_b) - // stack: ab, j-1, k, sqr {12: y0, 24: y2, 36: y4} + // stack: ab, j-1, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %sub_const(10) - // stack: b, j-1, k, sqr {12: y0, 24: y2, 36: y4} - %stack () -> (24, 24, power_loop_2_b) - // stack: 24, 24, power_loop_2_b, b, j-1, k, sqr {12: y0, 24: y2, 36: y4} + // stack: b, j-1, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} + %stack () -> (36, 36, power_loop_2_b) + // stack: 36, 36, power_loop_2_b, b, j-1, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP7 - // stack: sqr, 24, 24, power_loop_2_b, b, j-1, k, sqr {12: y0, 24: y2, 36: y4} + // stack: sqr, 36, 36, power_loop_2_b, b, j-1, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jump(mul_fp254_12) power_loop_2_b: - // stack: b, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: b, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} ISZERO - // stack: skip?, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: skip?, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jumpi(power_loop_2_sq) - // stack: j, k, sqr {12: y0, 24: y2, 36: y4} - %stack () -> (12, 12, power_loop_2_sq) - // stack: 12, 12, power_loop_2_sq, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} + %stack () -> (24, 24, power_loop_2_sq) + // stack: 24, 24, power_loop_2_sq, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP6 - // stack: sqr, 12, 12, power_loop_2_sq, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: sqr, 24, 24, power_loop_2_sq, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jump(mul_fp254_12) power_loop_2_sq: - // stack: j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} PUSH power_loop_2 - // stack: power_loop_2, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: power_loop_2, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP4 DUP1 - // stack: sqr, sqr, power_loop_2, j, k, sqr {12: y0, 24: y2, 36: y4} + // stack: sqr, sqr, power_loop_2, j, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jump(square_fp254_12) power_loop_2_end: - // stack: 0, k, sqr {12: y0, 24: y2, 36: y4} + // stack: 0, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} POP - // stack: k, sqr {12: y0, 24: y2, 36: y4} - %stack () -> (24, 24, power_loop_0) - // stack: 24, 24, power_loop_0, k, sqr {12: y0, 24: y2, 36: y4} + // stack: k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} + %stack () -> (36, 36, power_loop_0) + // stack: 36, 36, power_loop_0, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP5 - // stack: sqr, 24, 24, power_loop_0, k, sqr {12: y0, 24: y2, 36: y4} + // stack: sqr, 36, 36, power_loop_0, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jump(mul_fp254_12) power_loop_0: - // stack: k , sqr {12: y0, 24: y2, 36: y4} + // stack: k , sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP1 ISZERO - // stack: break?, k , sqr {12: y0, 24: y2, 36: y4} + // stack: break?, k , sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jumpi(power_loop_0_end) - // stack: k , sqr {12: y0, 24: y2, 36: y4} + // stack: k , sqr {12: sqr, 24: y0, 36: y2, 48: y4} %sub_const(1) - // stack: k-1, sqr {12: y0, 24: y2, 36: y4} + // stack: k-1, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP1 %mload_kernel_code(power_data_0) - // stack: a, k-1, sqr {12: y0, 24: y2, 36: y4} + // stack: a, k-1, sqr {12: sqr, 24: y0, 36: y2, 48: y4} ISZERO - // stack: skip?, k-1, sqr {12: y0, 24: y2, 36: y4} + // stack: skip?, k-1, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jumpi(power_loop_0_sq) - // stack: k-1, sqr {12: y0, 24: y2, 36: y4} - %stack () -> (12, 12, power_loop_0_sq) - // stack: 12, 12, power_loop_0_sq, k-1, sqr {12: y0, 24: y2, 36: y4} + // stack: k-1, sqr {12: sqr, 24: y0, 36: y2, 48: y4} + %stack () -> (24, 24, power_loop_0_sq) + // stack: 24, 24, power_loop_0_sq, k-1, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP5 - // stack: sqr, 12, 12, power_loop_0_sq, k-1, sqr {12: y0, 24: y2, 36: y4} + // stack: sqr, 24, 24, power_loop_0_sq, k-1, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jump(mul_fp254_12) power_loop_0_sq: - // stack: k, sqr {12: y0, 24: y2, 36: y4} + // stack: k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} PUSH power_loop_0 - // stack: power_loop_0, k, sqr {12: y0, 24: y2, 36: y4} + // stack: power_loop_0, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} DUP3 DUP1 - // stack: sqr, sqr, power_loop_0, k, sqr {12: y0, 24: y2, 36: y4} + // stack: sqr, sqr, power_loop_0, k, sqr {12: sqr, 24: y0, 36: y2, 48: y4} %jump(square_fp254_12) power_loop_0_end: - // stack: 0, sqr {12: y0, 24: y2, 36: y4} - %stack (i, sqr) -> (12, sqr, 12, custom_powers) - // stack: 12, sqr, 12, custom_powers {12: y0, 24: y2, 36: y4} + // stack: 0, sqr {12: sqr, 24: y0, 36: y2, 48: y4} + %stack (i, sqr) -> (24, sqr, 24, custom_powers) + // stack: 24, sqr, 24, custom_powers {12: sqr, 24: y0, 36: y2, 48: y4} %jump(mul_fp254_12)