mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-08 08:43:06 +00:00
inverse works
This commit is contained in:
parent
7788a29f4a
commit
c246297158
@ -971,44 +971,3 @@
|
||||
%mstore_kernel_general
|
||||
// stack:
|
||||
%endmacro
|
||||
|
||||
%macro assert_eq_fp12_unit
|
||||
// stack: ptr
|
||||
DUP1 %mload_kernel_code
|
||||
// stack: x00, ptr
|
||||
%assert_eq_const(1)
|
||||
// stack: ptr
|
||||
DUP1 %add_const(01) %mload_kernel_code
|
||||
// stack: x01, ptr
|
||||
%assert_eq_const(0)
|
||||
DUP1 %add_const(02) %mload_kernel_code
|
||||
// stack: x02, ptr
|
||||
%assert_eq_const(0)
|
||||
DUP1 %add_const(03) %mload_kernel_code
|
||||
// stack: x03, ptr
|
||||
%assert_eq_const(0)
|
||||
DUP1 %add_const(04) %mload_kernel_code
|
||||
// stack: x04, ptr
|
||||
%assert_eq_const(0)
|
||||
DUP1 %add_const(05) %mload_kernel_code
|
||||
// stack: x05, ptr
|
||||
%assert_eq_const(0)
|
||||
DUP1 %add_const(06) %mload_kernel_code
|
||||
// stack: x06, ptr
|
||||
%assert_eq_const(0)
|
||||
DUP1 %add_const(07) %mload_kernel_code
|
||||
// stack: x07, ptr
|
||||
%assert_eq_const(0)
|
||||
DUP1 %add_const(08) %mload_kernel_code
|
||||
// stack: x08, ptr
|
||||
%assert_eq_const(0)
|
||||
DUP1 %add_const(09) %mload_kernel_code
|
||||
// stack: x09, ptr
|
||||
%assert_eq_const(0)
|
||||
DUP1 %add_const(10) %mload_kernel_code
|
||||
// stack: x10, ptr
|
||||
%assert_eq_const(0)
|
||||
DUP1 %add_const(11) %mload_kernel_code
|
||||
// stack: x11, ptr
|
||||
%assert_eq_const(0)
|
||||
%endmacro
|
||||
|
||||
@ -21,9 +21,15 @@
|
||||
// stack: x^-1
|
||||
%endmacro
|
||||
|
||||
global test_inverse_fp12:
|
||||
// stack: ptr, f, ptr, inv, retdest
|
||||
%store_fp12
|
||||
// stack: ptr, inv, retdest
|
||||
%jump(inverse_fp12)
|
||||
|
||||
global inverse_fp12:
|
||||
// stack: ptr, inv, retdest
|
||||
// DUP1 %load_fp12
|
||||
DUP1 %load_fp12
|
||||
// stack: f, ptr, inv, retdest
|
||||
DUP14
|
||||
// stack: inv, f, ptr, inv, retdest
|
||||
@ -40,9 +46,6 @@ global inverse_fp12:
|
||||
PROVER_INPUT(ffe::bn254_base::ext_inv1)
|
||||
PROVER_INPUT(ffe::bn254_base::ext_inv0)
|
||||
// stack: f^-1, inv, f, ptr, inv, retdest
|
||||
|
||||
%jump(0xdeadbeef)
|
||||
|
||||
DUP13
|
||||
// stack: inv, f^-1, inv, f, ptr, inv, retdest
|
||||
%store_fp12
|
||||
@ -56,11 +59,21 @@ global inverse_fp12:
|
||||
%jump(mul_fp12)
|
||||
global check_inv:
|
||||
// stack: 200, ptr, inv, retdest
|
||||
%assert_eq_fp12_unit
|
||||
%load_fp12
|
||||
// stack: unit?, ptr, inv, retdest
|
||||
%assert_eq_const(1)
|
||||
%assert_eq_const(0)
|
||||
%assert_eq_const(0)
|
||||
%assert_eq_const(0)
|
||||
%assert_eq_const(0)
|
||||
%assert_eq_const(0)
|
||||
%assert_eq_const(0)
|
||||
%assert_eq_const(0)
|
||||
%assert_eq_const(0)
|
||||
%assert_eq_const(0)
|
||||
%assert_eq_const(0)
|
||||
%assert_eq_const(0)
|
||||
// stack: ptr, inv, retdest
|
||||
%pop2
|
||||
// stack: retdest
|
||||
%jump(0xdeadbeef)
|
||||
// SWAP1
|
||||
// stack: retdest, inv
|
||||
// JUMP
|
||||
JUMP
|
||||
|
||||
@ -661,27 +661,20 @@ fn test_mul_fp12() -> Result<()> {
|
||||
fn test_inv_fp12() -> Result<()> {
|
||||
let ptr = U256::from(100);
|
||||
let inv = U256::from(200);
|
||||
let f: Vec<U256> = gen_fp12().into_iter().flatten().flatten().collect();
|
||||
|
||||
let f: Fp12 = gen_fp12();
|
||||
let flat_f: Vec<U256> = f.into_iter().flatten().flatten().collect();
|
||||
let mut stack: Vec<U256> = flat_f.clone();
|
||||
stack.extend(vec![ptr, inv]);
|
||||
stack.reverse();
|
||||
let initial_offset = KERNEL.global_labels["test_inverse_fp12"];
|
||||
|
||||
let g = inv_fp12(f);
|
||||
let one = mul_fp12(f, g);
|
||||
println!("ONE? {:#?}", one);
|
||||
let mut initial_stack = vec![ptr];
|
||||
initial_stack.extend(f);
|
||||
initial_stack.extend(vec![ptr, inv, U256::from_str("0xdeadbeef").unwrap()]);
|
||||
initial_stack.reverse();
|
||||
|
||||
let mut expected: Vec<U256> = g.into_iter().flatten().flatten().collect();
|
||||
expected.extend(vec![inv]);
|
||||
expected.extend(flat_f);
|
||||
expected.extend(vec![ptr, inv]);
|
||||
expected.reverse();
|
||||
let output: Vec<U256> = run_interpreter(initial_offset, initial_stack)?
|
||||
.stack()
|
||||
.to_vec();
|
||||
|
||||
let initial_offset = KERNEL.global_labels["inverse_fp12"];
|
||||
let output: Vec<U256> = run_interpreter(initial_offset, stack)?.stack().to_vec();
|
||||
|
||||
assert_eq!(output, expected);
|
||||
assert_eq!(output, vec![]);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -237,7 +237,6 @@ impl EvmField {
|
||||
}
|
||||
|
||||
fn ext_inv(&self, xs: Vec<U256>, offset: usize) -> [U256; 12] {
|
||||
|
||||
let f0 = xs.clone().into_iter().nth(offset).unwrap();
|
||||
let f1 = xs.clone().into_iter().nth(offset + 1).unwrap();
|
||||
let f2 = xs.clone().into_iter().nth(offset + 2).unwrap();
|
||||
@ -261,8 +260,8 @@ impl EvmField {
|
||||
let g = inv_fp12(f);
|
||||
|
||||
[
|
||||
g[0][0][0], g[0][0][1], g[0][1][0], g[0][1][1], g[0][2][0], g[0][2][1],
|
||||
g[1][0][0], g[1][0][1], g[1][1][0], g[1][1][1], g[1][2][0], g[1][2][1],
|
||||
g[0][0][0], g[0][0][1], g[0][1][0], g[0][1][1], g[0][2][0], g[0][2][1], g[1][0][0],
|
||||
g[1][0][1], g[1][1][0], g[1][1][1], g[1][2][0], g[1][2][1],
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user