diff --git a/evm/src/cpu/kernel/asm/fields/fp12_mul.asm b/evm/src/cpu/kernel/asm/fields/fp12_mul.asm index c7a2b872..328c53df 100644 --- a/evm/src/cpu/kernel/asm/fields/fp12_mul.asm +++ b/evm/src/cpu/kernel/asm/fields/fp12_mul.asm @@ -1,17 +1,29 @@ /// Note: uncomment this to test global test_mul_Fp12: - // stack: in0, f, in0', f', in1, g, in1', g', in1, out, in0, out + // stack: f, in0 , f', g, in1 , g', in1, out, in0, out + DUP7 + // stack: in0, f, in0 , f', g, in1 , g', in1, out, in0, out %store_fp6 + // stack: in0 , f', g, in1 , g', in1, out, in0, out + %add_const(6) + // stack: in0', f', g, in1 , g', in1, out, in0, out %store_fp6 + // stack: g, in1 , g', in1, out, in0, out + DUP7 + // stack: in1, g, in1 , g', in1, out, in0, out %store_fp6 + // stack: in1 , g', in1, out, in0, out + %add_const(6) + // stack: in1', g', in1, out, in0, out %store_fp6 - // stack: in1, out, in0, out - PUSH return_on_stack + // stack: in1, out, in0, out + PUSH ret_stack + // stack: ret_stack, in1, out, in0, out SWAP3 - // stack: in0, in1, out, return_on_stack, out + // stack: in0, in1, out, ret_stack, out %jump(mul_Fp12) -return_on_stack: +ret_stack: // stack: out DUP1 %add_const(6) diff --git a/evm/src/cpu/kernel/asm/fields/fp6_mul.asm b/evm/src/cpu/kernel/asm/fields/fp6_mul.asm index 6ec69192..21368bd2 100644 --- a/evm/src/cpu/kernel/asm/fields/fp6_mul.asm +++ b/evm/src/cpu/kernel/asm/fields/fp6_mul.asm @@ -238,7 +238,7 @@ global mul_fp6: // stack: c0d2_ + c2d0_, c0_, d2, c1d1_, c1_d1, c2_, d0 SWAP2 MULFP254 - // stack: c0_d2 , c0d2_ + c2d0_ , c1d1_ , c1_d1 , c2_, d0 + // stack: c0_d2 , c0d2_ + c2d0_ , c1d1_ , c1_d1 , c2_, d0 ADDFP254 ADDFP254 ADDFP254 diff --git a/evm/src/cpu/kernel/tests/fields.rs b/evm/src/cpu/kernel/tests/fields.rs index c5328a94..718c337f 100644 --- a/evm/src/cpu/kernel/tests/fields.rs +++ b/evm/src/cpu/kernel/tests/fields.rs @@ -126,31 +126,6 @@ fn as_stack(xs: Vec) -> Vec { xs.iter().map(|&x| U256::from(x)).rev().collect() } -fn make_initial_stack( - f0: [[u32; 2]; 3], - f1: [[u32; 2]; 3], - g0: [[u32; 2]; 3], - g1: [[u32; 2]; 3], -) -> Vec { - // stack: in0, f, in0', f', in1, g, in1', g', in1, out, in0, out - let f0: Vec = f0.into_iter().flatten().collect(); - let f1: Vec = f1.into_iter().flatten().collect(); - let g0: Vec = g0.into_iter().flatten().collect(); - let g1: Vec = g1.into_iter().flatten().collect(); - - let mut input = vec![0]; - input.extend(f0); - input.extend(vec![6]); - input.extend(f1); - input.extend(vec![12]); - input.extend(g0); - input.extend(vec![18]); - input.extend(g1); - input.extend(vec![12, 24, 0, 24]); - - as_stack(input) -} - #[test] fn test_fp6() -> Result<()> { let c = gen_fp6(); @@ -174,6 +149,29 @@ fn test_fp6() -> Result<()> { Ok(()) } +fn make_initial_stack( + f0: [[u32; 2]; 3], + f1: [[u32; 2]; 3], + g0: [[u32; 2]; 3], + g1: [[u32; 2]; 3], +) -> Vec { + // stack: in0, f, in0', f', in1, g, in1', g', in1, out, in0, out + let f0: Vec = f0.into_iter().flatten().collect(); + let f1: Vec = f1.into_iter().flatten().collect(); + let g0: Vec = g0.into_iter().flatten().collect(); + let g1: Vec = g1.into_iter().flatten().collect(); + + let mut input = f0; + input.extend(vec![0]); + input.extend(f1); + input.extend(g0); + input.extend(vec![12]); + input.extend(g1); + input.extend(vec![12, 24, 0, 24]); + + as_stack(input) +} + #[test] fn test_fp12() -> Result<()> { let f0 = gen_fp6();