renumber memory

This commit is contained in:
Dmitry Vagner 2023-04-20 20:31:26 -07:00
parent f1bbf66cda
commit ff0695d760
2 changed files with 38 additions and 42 deletions

View File

@ -100,19 +100,19 @@ mul_tangent:
// stack: out, out, mul_tangent_1, out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out // stack: out, out, mul_tangent_1, out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out
%jump(square_fp254_12) %jump(square_fp254_12)
mul_tangent_1: 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
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
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 %tangent
// stack: 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, 0, out) %stack (out) -> (out, 12, out)
// stack: out, 0, out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out {0: line} // stack: out, 12, out, mul_tangent_2, retdest, 0xnm, times, O, P, Q, out {0: line}
%jump(mul_fp254_12_sparse) %jump(mul_fp254_12_sparse)
mul_tangent_2: mul_tangent_2:
// stack: retdest, 0xnm, times, O, P, Q, out {0: line} // stack: retdest, 0xnm, times, O, P, Q, out {0: line}
@ -137,26 +137,26 @@ after_double:
/// O += P /// O += P
mul_cord: mul_cord:
// stack: 0xnm, times, O, P, Q, out // stack: 0xnm, times, O, P, Q, out
PUSH mul_cord_1 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
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
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
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 %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 DUP12
// stack: 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, 0, out) %stack (out) -> (out, 12, out)
// stack: out, 0, out, mul_cord_1, 0xnm, times, O, P, Q, out {0: line} // stack: out, 12, out, mul_cord_1, 0xnm, times, O, P, Q, out {0: line}
%jump(mul_fp254_12_sparse) %jump(mul_fp254_12_sparse)
mul_cord_1: mul_cord_1:
// stack: 0xnm, times, O , P, Q, out // stack: 0xnm, times, O , P, Q, out
@ -193,7 +193,7 @@ after_add:
// stack: py^2 , 9, px, py, qx, qx_, qy, qy_ // stack: py^2 , 9, px, py, qx, qx_, qy, qy_
SUBFP254 SUBFP254
// stack: py^2 - 9, px, py, qx, qx_, qy, qy_ // 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_ // stack: px, py, qx, qx_, qy, qy_
DUP1 DUP1
MULFP254 MULFP254
@ -209,7 +209,7 @@ after_add:
DUP3 DUP3
MULFP254 MULFP254
// stack: (-3*px^2)qx, py, -3px^2, qx_, qy, qy_ // 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_ // stack: py, -3px^2, qx_, qy, qy_
PUSH 2 PUSH 2
MULFP254 MULFP254
@ -219,15 +219,15 @@ after_add:
DUP4 DUP4
MULFP254 MULFP254
// stack: (2py)qy, -3px^2, qx_, 2py, qy_ // stack: (2py)qy, -3px^2, qx_, 2py, qy_
%mstore_kernel_bn254_pairing(8) %mstore_kernel_bn254_pairing(20)
// stack: -3px^2, qx_, 2py, qy_ // stack: -3px^2, qx_, 2py, qy_
MULFP254 MULFP254
// stack: (-3px^2)*qx_, 2py, qy_ // stack: (-3px^2)*qx_, 2py, qy_
%mstore_kernel_bn254_pairing(3) %mstore_kernel_bn254_pairing(15)
// stack: 2py, qy_ // stack: 2py, qy_
MULFP254 MULFP254
// stack: (2py)*qy_ // stack: (2py)*qy_
%mstore_kernel_bn254_pairing(9) %mstore_kernel_bn254_pairing(21)
%endmacro %endmacro
/// def cord(p1x, p1y, p2x, p2y, qx, qy): /// 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_ // stack: p1y*p2x , p2y*p1x, p1x , p1y, p2x , p2y, qx, qx_, qy, qy_
SUBFP254 SUBFP254
// stack: p1y*p2x - p2y*p1x, p1x , p1y, p2x , p2y, qx, qx_, qy, qy_ // 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_ // stack: p1x , p1y, p2x , p2y, qx, qx_, qy, qy_
SWAP3 SWAP3
// stack: p2y , p1y, p2x , p1x, qx, qx_, qy, qy_ // stack: p2y , p1y, p2x , p1x, qx, qx_, qy, qy_
@ -264,20 +264,20 @@ after_add:
DUP5 DUP5
MULFP254 MULFP254
// stack: (p1x - p2x)qy, p2y - p1y, qx, qx_, p1x - p2x, qy_ // 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_ // stack: p2y - p1y, qx, qx_, p1x - p2x, qy_
SWAP1 SWAP1
// stack: qx, p2y - p1y, qx_, p1x - p2x, qy_ // stack: qx, p2y - p1y, qx_, p1x - p2x, qy_
DUP2 DUP2
MULFP254 MULFP254
// stack: (p2y - p1y)qx, p2y - p1y, qx_, p1x - p2x, qy_ // 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_ // stack: p2y - p1y, qx_, p1x - p2x, qy_
MULFP254 MULFP254
// stack: (p2y - p1y)qx_, p1x - p2x, qy_ // stack: (p2y - p1y)qx_, p1x - p2x, qy_
%mstore_kernel_bn254_pairing(3) %mstore_kernel_bn254_pairing(15)
// stack: p1x - p2x, qy_ // stack: p1x - p2x, qy_
MULFP254 MULFP254
// stack: (p1x - p2x)*qy_ // stack: (p1x - p2x)*qy_
%mstore_kernel_bn254_pairing(9) %mstore_kernel_bn254_pairing(21)
%endmacro %endmacro

View File

@ -11,15 +11,8 @@
/// return bn254_final_exponent(out) /// return bn254_final_exponent(out)
global bn254_pairing: global bn254_pairing:
// stack: k, inp, out, retdest // 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
DUP1 DUP1
// stack: k, k, inp, out, retdest
bn254_input_check: bn254_input_check:
// stack: j , k, inp // stack: j , k, inp
@ -54,22 +47,25 @@ bn254_input_check:
%jump(bn254_input_check) %jump(bn254_input_check)
bn254_pairing_start: bn254_pairing_start:
// stack: 0, k, inp, out, retdest // stack: 0, k, inp, out, retdest
POP %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: bn254_pairing_loop:
// stack: k , inp, out, retdest // stack: k, inp, out, retdest
DUP1 DUP1
ISZERO ISZERO
// stack: end?, k , inp, out, retdest // stack: end?, k, inp, out, retdest
%jumpi(bn254_final_exponent) %jumpi(bn254_final_exponent)
// stack: k , inp, out, retdest // stack: k, inp, out, retdest
%sub_const(1) %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, out) -> (k, inp, 0, mul_fp254_12, 0, 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, 0, mul_fp254_12, 0, out, out, bn254_pairing_loop, k, inp, out retdest
%mul_const(6) %mul_const(6)
ADD 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) %jump(bn254_miller)