mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-09 09:13:09 +00:00
better comments
This commit is contained in:
parent
80e49caae1
commit
444da8f760
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user