diff --git a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/fp12_mul.asm b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/fp12_mul.asm index 5c2471d9..e4f13f60 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/fp12_mul.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/fp12_mul.asm @@ -418,4 +418,5 @@ post_sq2: // stack: out, ff + sh(f'f'), inp, out %store_fp6 // stack: inp, out - %pop2 JUMP + %pop2 + JUMP diff --git a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/inverse.asm b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/inverse.asm index 1fe61024..e8815fc3 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/inverse.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/inverse.asm @@ -23,9 +23,9 @@ global test_inv_fp12: - // stack: ptr, f, ptr, inv, retdest + // stack: ptr, f, ptr, inv, retdest %store_fp12 - // stack: ptr, inv, retdest + // stack: ptr, inv, retdest %jump(inv_fp12) global inv_fp12: diff --git a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/power.asm b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/power.asm index 52d8bf0e..548108d5 100644 --- a/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/power.asm +++ b/evm/src/cpu/kernel/asm/curve/bn254/field_arithmetic/power.asm @@ -22,17 +22,13 @@ global test_pow: /// return y2 * y1 * y0 global power: - // stack: ptr, out, retdest + // stack: ptr, out, retdest PUSH 1 DUP1 DUP1 - // stack: 1, 1, 1, ptr, out, retdest + // stack: 1, 1, 1, ptr, out, retdest %mstore_kernel_general(200) %mstore_kernel_general(212) %mstore_kernel_general(224) - // stack: ptr, out, retdest {200: y0, 212: y1, 224: y2} - PUSH power_loop_2 PUSH power_loop_1 PUSH power_return - // stack: power_return, power_loop_1, power_loop_2, ptr, out, retdest {200: y0, 212: y1, 224: y2} - SWAP3 - // stack: ptr, power_loop_1, power_loop_2, power_return, out, retdest {200: y0, 212: y1, 224: y2} + // stack: ptr, out, retdest {200: y0, 212: y1, 224: y2} PUSH 65 PUSH 62 PUSH 65 - // stack: 65, 62, 65, ptr, power_loop_1, power_loop_2, power_return, out, retdest {200: y0, 212: y1, 224: y2} + // stack: 65, 62, 65, ptr, out, retdest {200: y0, 212: y1, 224: y2} %jump(power_loop_0) power_return: @@ -45,14 +41,14 @@ power_return_1: PUSH power_return_2 PUSH 248 PUSH 224 // stack: 224, 248, power_return_2, out, retdest {200: y0, 212: y1, 224: y2} %jump(square_fp12) -power_return_2: +power_return_2: // stack: out, retdest {236: y0, 212: y1, 224: y2, 248: y2^2} PUSH power_return_3 PUSH 248 PUSH 224 PUSH 248 // stack: 248, 236, 248, power_return_3, out, retdest {236: y0, 212: y1, 224: y2, 248: y2^2} %jump(mul_fp12) power_return_3: // stack: out, retdest {236: y0, 212: y1, 224: y2, 248: y0*y2^2} - PUSH power_return_4 PUSH 212 PUSH 248 PUSH 212 + PUSH power_return_4 PUSH 212 PUSH 248 PUSH 212 // stack: 212, 248, 212, power_return_4, out, retdest {236: y0, 212: y1, 224: y2, 248: y0*y2^2} %jump(mul_fp12) power_return_4: @@ -69,10 +65,8 @@ power_return_4: // stack: 224, out, retdest {236: y0, 212: y1, 224: y2} POP // stack: out, retdest {236: y0, 212: y1, 224: y2} - PUSH power_return_5 SWAP1 - // stack: out, power_return_5, retdest {236: y0, 212: y1, 224: y2} - PUSH 236 PUSH 212 - // stack: 212, 236, out, power_return_5, retdest {236: y0, 212: y1, 224: y2} + PUSH power_return_5 DUP2 PUSH 236 PUSH 212 + // stack: 212, 236, out, power_return_5, out, retdest {236: y0, 212: y1, 224: y2} %jump(mul_fp12) power_return_5: // stack: out, retdest {236: y0, 212: y1, 224: y2} @@ -111,131 +105,131 @@ power_return_5: /// y0 *= acc power_loop_0: - // stack: i , j, k, ptr, retdest + // stack: i , j, k, ptr DUP1 ISZERO - // stack: break?, i , j, k, ptr, retdest + // stack: break?, i , j, k, ptr %jumpi(power_loop_0_end) - // stack: i , j, k, ptr, retdest + // stack: i , j, k, ptr %sub_const(1) - // stack: i-1, j, k, ptr, retdest + // stack: i-1, j, k, ptr DUP1 %mload_kernel_code(power_data_0) - // stack: abc, i-1, j, k, ptr, retdest + // stack: abc, i-1, j, k, ptr DUP1 %lt_const(100) - // stack: skip?, abc, i-1, j, k, ptr, retdest + // stack: skip?, abc, i-1, j, k, ptr %jumpi(power_loop_0_b) - // stack: abc, i-1, j, k, ptr, retdest + // stack: abc, i-1, j, k, ptr %sub_const(100) - // stack: bc, i-1, j, k, ptr, retdest + // stack: bc, i-1, j, k, ptr PUSH power_loop_0_b PUSH 212 DUP1 DUP8 - // stack: ptr, 212, 212, power_loop_0_b, bc, i-1, j, k, ptr, retdest + // stack: ptr, 212, 212, power_loop_0_b, bc, i-1, j, k, ptr %jump(mul_fp12) power_loop_0_b: - // stack: bc, i, j, k, ptr, retdest + // stack: bc, i, j, k, ptr DUP1 %lt_const(10) - // stack: skip?, bc, i, j, k, ptr, retdest + // stack: skip?, bc, i, j, k, ptr %jumpi(power_loop_0_c) - // stack: bc, i, j, k, ptr, retdest + // stack: bc, i, j, k, ptr %sub_const(10) - // stack: c, i, j, k, ptr, retdest + // stack: c, i, j, k, ptr PUSH power_loop_0_c PUSH 224 DUP1 DUP8 - // stack: ptr, 224, 224, power_loop_0_c, c, i, j, k, ptr, retdest + // stack: ptr, 224, 224, power_loop_0_c, c, i, j, k, ptr %jump(mul_fp12) power_loop_0_c: - // stack: c, i, j, k, ptr, retdest - DUP1 ISZERO - // stack: skip?, c, i, j, k, ptr, retdest + // stack: c, i, j, k, ptr + ISZERO + // stack: skip?, i, j, k, ptr %jumpi(power_loop_0_sq) - // stack: c, i, j, k, ptr, retdest - POP - // stack: i, j, k, ptr, retdest + // stack: i, j, k, ptr PUSH power_loop_0_sq PUSH 200 DUP1 DUP7 - // stack: ptr, 200, 200, power_loop_0_sq, i, j, k, ptr, retdest + // stack: ptr, 200, 200, power_loop_0_sq, i, j, k, ptr %jump(mul_fp12) power_loop_0_sq: - // stack: i, j, k, ptr, retdest + // stack: i, j, k, ptr PUSH power_loop_0 DUP5 DUP1 - // stack: ptr, ptr, power_loop_0, i, j, k, ptr, retdest - %jump(mul_fp12) + // stack: ptr, ptr, power_loop_0, i, j, k, ptr + %jump(square_fp12) power_loop_0_end: - // stack: 0, j, k, ptr, retdest + // stack: 0, j, k, ptr POP - // stack: j, k, ptr, retdest + // stack: j, k, ptr PUSH power_loop_1 PUSH 212 DUP1 DUP6 - // stack: ptr, 212, 212, power_loop_1, j, k, ptr, retdest + // stack: ptr, 212, 212, power_loop_1, j, k, ptr %jump(mul_fp12) power_loop_1: - // stack: j , k, ptr, retdest + // stack: j , k, ptr DUP1 ISZERO - // stack: break?, j , k, ptr, retdest + // stack: break?, j , k, ptr %jumpi(power_loop_1_end) - // stack: j , k, ptr, retdest + // stack: j , k, ptr %sub_const(1) - // stack: j-1, k, ptr, retdest + // stack: j-1, k, ptr DUP1 %mload_kernel_code(power_data_1) - // stack: ab, j-1, k, ptr, retdest + // stack: ab, j-1, k, ptr DUP1 %lt_const(10) - // stack: skip?, ab, j-1, k, ptr, retdest + // stack: skip?, ab, j-1, k, ptr %jumpi(power_loop_1_b) - // stack: ab, j-1, k, ptr, retdest + // stack: ab, j-1, k, ptr %sub_const(10) - // stack: b, j-1, k, ptr, retdest + // stack: b, j-1, k, ptr PUSH power_loop_1_b PUSH 224 DUP1 DUP7 - // stack: ptr, 224, 224, power_loop_1_b, b, j-1, k, ptr, retdest + // stack: ptr, 224, 224, power_loop_1_b, b, j-1, k, ptr %jump(mul_fp12) power_loop_1_b: - // stack: b, j, k, ptr, retdest - DUP1 ISZERO - // stack: skip?, b, j, k, ptr, retdest + // stack: b, j, k, ptr + ISZERO + // stack: skip?, j, k, ptr %jumpi(power_loop_1_sq) - // stack: b, j, k, ptr, retdest - POP - // stack: j, k, ptr, retdest + // stack: j, k, ptr PUSH power_loop_1_sq PUSH 200 DUP1 DUP6 - // stack: ptr, 200, 200, power_loop_1_sq, j, k, ptr, retdest + // stack: ptr, 200, 200, power_loop_1_sq, j, k, ptr %jump(mul_fp12) power_loop_1_sq: - // stack: j, k, ptr, retdest + // stack: j, k, ptr PUSH power_loop_1 DUP4 DUP1 - // stack: ptr, ptr, power_loop_1, j, k, ptr, retdest + // stack: ptr, ptr, power_loop_1, j, k, ptr %jump(square_fp12) power_loop_1_end: - // stack: 0, k, ptr, retdest + // stack: 0, k, ptr POP - // stack: k, ptr, retdest - PUSH power_loop_2 PUSH 224 DUP1 DUP6 - // stack: ptr, 224, 224, power_loop_2, k, ptr, retdest + // stack: k, ptr + PUSH power_loop_2 PUSH 224 DUP1 DUP5 + // stack: ptr, 224, 224, power_loop_2, k, ptr %jump(mul_fp12) power_loop_2: - // stack: k , ptr, retdest + // stack: k , ptr DUP1 ISZERO - // stack: break?, k , ptr, retdest + // stack: break?, k , ptr %jumpi(power_loop_2_end) - // stack: k , ptr, retdest + // stack: k , ptr %sub_const(1) - // stack: k-1, ptr, retdest + // stack: k-1, ptr DUP1 %mload_kernel_code(power_data_2) - // stack: a, k-1, ptr, retdest - DUP1 ISZERO - // stack: skip?, a, k-1, ptr, retdest + // stack: a, k-1, ptr + ISZERO + // stack: skip?, k-1, ptr %jumpi(power_loop_2_sq) - // stack: a, k-1, ptr, retdest - POP - // stack: k-1, ptr, retdest + // stack: k-1, ptr PUSH power_loop_2_sq PUSH 200 DUP1 DUP5 - // stack: ptr, 200, 200, power_loop_2_sq, k-1, ptr, retdest + // stack: ptr, 200, 200, power_loop_2_sq, k-1, ptr %jump(mul_fp12) power_loop_2_sq: - // stack: k, ptr, retdest + // stack: k, ptr PUSH power_loop_2 DUP3 DUP1 - // stack: ptr, ptr, power_loop_2, k, ptr, retdest + // stack: ptr, ptr, power_loop_2, k, ptr %jump(square_fp12) power_loop_2_end: - // stack: 0, ptr, retdest + // stack: 0, ptr POP - // stack: ptr, retdest - PUSH power_return PUSH 200 DUP1 DUP4 - // stack: ptr, 200, 200, power_return, ptr, retdest + // stack: ptr + PUSH 200 PUSH power_return SWAP2 DUP2 + // stack: 200, ptr, 200, power_return %jump(mul_fp12) + + +%macro check(lbl) + PUSH $lbl + %jump(ret_stack) +%endmacro \ No newline at end of file