diff --git a/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/tate_pairing.asm b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/tate_pairing.asm index a109796c..01dfb7ea 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/tate_pairing.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/curve_arithmetic/tate_pairing.asm @@ -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): diff --git a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/frobenius.asm b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/frobenius.asm index fbca28b3..6bab7ab0 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/frobenius.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/frobenius.asm @@ -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