clean up inverse

This commit is contained in:
Dmitry Vagner 2022-12-20 12:21:27 -08:00
parent 95383db49d
commit 950771a6ea
2 changed files with 30 additions and 25 deletions

View File

@ -21,6 +21,7 @@
// stack: x^-1
%endmacro
global test_inverse_fp12:
// stack: ptr, f, ptr, inv, retdest
%store_fp12
@ -28,11 +29,31 @@ global test_inverse_fp12:
%jump(inverse_fp12)
global inverse_fp12:
// stack: ptr, inv, retdest
// stack: ptr, inv, retdest
DUP1 %load_fp12
// stack: f, ptr, inv, retdest
// stack: f, ptr, inv, retdest
DUP14
// stack: inv, f, ptr, inv, retdest
// stack: inv, f, ptr, inv, retdest
%prover_inv_fp12
// stack: f^-1, inv, f, ptr, inv, retdest
DUP13 %store_fp12
// stack: inv, f, ptr, inv, retdest
POP %pop4 %pop4 %pop4
// stack: ptr, inv, retdest
PUSH 100 PUSH check_inv
// stack: check_inv, 100, ptr, inv, retdest
SWAP3 SWAP1 SWAP2
// stack: ptr, inv, 100, check_inv, retdest
%jump(mul_fp12)
global check_inv:
// stack: retdest
PUSH 100 %load_fp12
// stack: unit?, retdest
%assert_eq_unit_fp12
// stack: retdest
JUMP
%macro prover_inv_fp12
PROVER_INPUT(ffe::bn254_base::ext_inv11)
PROVER_INPUT(ffe::bn254_base::ext_inv10)
PROVER_INPUT(ffe::bn254_base::ext_inv9)
@ -45,22 +66,9 @@ global inverse_fp12:
PROVER_INPUT(ffe::bn254_base::ext_inv2)
PROVER_INPUT(ffe::bn254_base::ext_inv1)
PROVER_INPUT(ffe::bn254_base::ext_inv0)
// stack: f^-1, inv, f, ptr, inv, retdest
DUP13
// stack: inv, f^-1, inv, f, ptr, inv, retdest
%store_fp12
// stack: inv, f, ptr, inv, retdest
POP %pop4 %pop4 %pop4
// stack: ptr, inv, retdest
PUSH 200 PUSH check_inv
// stack: check_inv, 200, ptr, inv, retdest
DUP2 DUP5 DUP5
// stack: ptr, inv, 200, check_inv, 200, ptr, inv, retdest
%jump(mul_fp12)
global check_inv:
// stack: 200, ptr, inv, retdest
%load_fp12
// stack: unit?, ptr, inv, retdest
%endmacro
%macro assert_eq_unit_fp12
%assert_eq_const(1)
%assert_eq_const(0)
%assert_eq_const(0)
@ -73,7 +81,4 @@ global check_inv:
%assert_eq_const(0)
%assert_eq_const(0)
%assert_eq_const(0)
// stack: ptr, inv, retdest
%pop2
// stack: retdest
JUMP
%endmacro

View File

@ -707,8 +707,8 @@ fn test_frob_fp12() -> Result<()> {
}
fn make_inv_stack(f: Fp12) -> Vec<U256> {
let ptr = U256::from(100);
let inv = U256::from(200);
let ptr = U256::from(200);
let inv = U256::from(300);
let f: Vec<U256> = f.into_iter().flatten().flatten().collect();
let mut input = vec![ptr];