This commit is contained in:
Dmitry Vagner 2023-04-11 15:30:03 -07:00
parent f265041845
commit b202196b5f
2 changed files with 52 additions and 44 deletions

View File

@ -12,20 +12,6 @@
// stack: z0, z1
%endmacro
%macro mul_fp381
// stack: x0, x1, y0, y1
PROVER_INPUT(sf::bls381_base::mul_hi)
// stack: z1, x0, x1, y0, y1
SWAP4
// stack: y1, x0, x1, y0, z1
PROVER_INPUT(sf::bls381_base::mul_lo)
// stack: z0, y1, x0, x1, y0, z1
SWAP4
// stack: y0, y1, x0, x1, z0, z1
%pop4
// stack: z0, z1
%endmacro
%macro sub_fp381
// stack: x0, x1, y0, y1
PROVER_INPUT(sf::bls381_base::sub_hi)
@ -40,31 +26,65 @@
// stack: z0, z1
%endmacro
%macro mul_fp381
// stack: x0, x1, y0, y1
PROVER_INPUT(sf::bls381_base::mul_hi)
// stack: z1, x0, x1, y0, y1
SWAP4
// stack: y1, x0, x1, y0, z1
PROVER_INPUT(sf::bls381_base::mul_lo)
// stack: z0, y1, x0, x1, y0, z1
SWAP4
// stack: y0, y1, x0, x1, z0, z1
%pop4
// stack: z0, z1
%endmacro
global test_add_fp381:
%add_fp381
%jump(0xdeadbeef)
global test_mul_fp381:
%mul_fp381
%jump(0xdeadbeef)
global test_sub_fp381:
%sub_fp381
%jump(0xdeadbeef)
global test_mul_fp381:
%mul_fp381
%jump(0xdeadbeef)
global add_fp381_2:
// stack: x_re, x_im, y_re, y_im, jumpdest
%macro add_fp381_2
// stack: x_re, x_im, y_re, y_im
%stack (x_re: 2, x_im: 2, y_re: 2, y_im: 2) -> (y_im, x_im, y_re, x_re)
// stack: y_im, x_im, y_re, x_re, jumpdest
// stack: y_im, x_im, y_re, x_re
%add_fp381
// stack: z_im, y_re, x_re, jumpdest
// stack: z_im, y_re, x_re
%stack (z_im: 2, y_re: 2, x_re: 2) -> (x_re, y_re, z_im)
// stack: x_re, y_re, z_im, jumpdest
// stack: x_re, y_re, z_im
%add_fp381
// stack: z_re, z_im, jumpdest
%stack (z_re: 2, z_im: 2, jumpdest) -> (jumpdest, z_re, z_im)
JUMP
// stack: z_re, z_im
%endmacro
%macro sub_fp381_2
// stack: x_re, x_im, y_re, y_im
%stack (x_re: 2, x_im: 2, y_re: 2, y_im: 2) -> (x_im, y_im, y_re, x_re)
// stack: x_im, y_im, y_re, x_re
%sub_fp381
// stack: z_im, y_re, x_re
%stack (z_im: 2, y_re: 2, x_re: 2) -> (x_re, y_re, z_im)
// stack: x_re, y_re, z_im
%sub_fp381
// stack: z_re, z_im
%endmacro
global test_add_fp381_2:
%add_fp381_2
%jump(0xdeadbeef)
global test_sub_fp381_2:
%sub_fp381_2
%jump(0xdeadbeef)
global mul_fp381_2:
// stack: x_re, x_im, y_re, y_im, jumpdest
@ -100,16 +120,4 @@ global mul_fp381_2:
// stack: z_re, z_im, jumpdest
%stack (z_re: 2, z_im: 2, jumpdest) -> (jumpdest, z_re, z_im)
JUMP
global sub_fp381_2:
// stack: x_re, x_im, y_re, y_im, jumpdest
%stack (x_re: 2, x_im: 2, y_re: 2, y_im: 2) -> (x_im, y_im, y_re, x_re)
// stack: x_im, y_im, y_re, x_re, jumpdest
%sub_fp381
// stack: z_im, y_re, x_re, jumpdest
%stack (z_im: 2, y_re: 2, x_re: 2) -> (x_re, y_re, z_im)
// stack: x_re, y_re, z_im, jumpdest
%sub_fp381
// stack: z_re, z_im, jumpdest
%stack (z_re: 2, z_im: 2, jumpdest) -> (jumpdest, z_re, z_im)
JUMP

View File

@ -29,12 +29,12 @@ fn test_bls_ops() -> Result<()> {
let y: BLS381 = rng.gen::<BLS381>();
let output_add = run_bls_ops("test_add_fp381", x, y);
let output_mul = run_bls_ops("test_mul_fp381", x, y);
let output_sub = run_bls_ops("test_sub_fp381", x, y);
let output_mul = run_bls_ops("test_mul_fp381", x, y);
assert_eq!(output_add, x + y);
assert_eq!(output_mul, x * y);
assert_eq!(output_sub, x - y);
assert_eq!(output_mul, x * y);
Ok(())
}
@ -60,13 +60,13 @@ fn test_bls_fp2_ops() -> Result<()> {
let x: Fp2<BLS381> = rng.gen::<Fp2<BLS381>>();
let y: Fp2<BLS381> = rng.gen::<Fp2<BLS381>>();
let output_add = run_bls_fp2_ops("add_fp381_2", x, y);
let output_add = run_bls_fp2_ops("test_add_fp381_2", x, y);
let output_sub = run_bls_fp2_ops("test_sub_fp381_2", x, y);
let output_mul = run_bls_fp2_ops("mul_fp381_2", x, y);
let output_sub = run_bls_fp2_ops("sub_fp381_2", x, y);
assert_eq!(output_add, x + y);
assert_eq!(output_mul, x * y);
assert_eq!(output_sub, x - y);
assert_eq!(output_mul, x * y);
Ok(())
}