openvm_algebra_circuit/modular_chip/
mod.rs1use openvm_circuit::arch::{VmAirWrapper, VmChipWrapper};
2use openvm_circuit_derive::PreflightExecutor;
3use openvm_instructions::riscv::{RV32_CELL_BITS, RV32_REGISTER_NUM_LIMBS};
4use openvm_mod_circuit_builder::{FieldExpressionCoreAir, FieldExpressionFiller};
5use openvm_rv32_adapters::{
6 Rv32IsEqualModAdapterAir, Rv32IsEqualModAdapterExecutor, Rv32IsEqualModAdapterFiller,
7 Rv32VecHeapAdapterAir, Rv32VecHeapAdapterFiller,
8};
9
10use crate::FieldExprVecHeapExecutor;
11
12mod is_eq;
13pub use is_eq::*;
14mod addsub;
15pub use addsub::*;
16mod muldiv;
17pub use muldiv::*;
18
19#[cfg(feature = "cuda")]
20mod cuda;
21#[cfg(feature = "cuda")]
22pub use cuda::*;
23
24#[cfg(test)]
25mod tests;
26
27pub type ModularAir<const BLOCKS: usize, const BLOCK_SIZE: usize> = VmAirWrapper<
28 Rv32VecHeapAdapterAir<2, BLOCKS, BLOCKS, BLOCK_SIZE, BLOCK_SIZE>,
29 FieldExpressionCoreAir,
30>;
31
32pub type ModularExecutor<const BLOCKS: usize, const BLOCK_SIZE: usize> =
33 FieldExprVecHeapExecutor<BLOCKS, BLOCK_SIZE, false>;
34
35pub type ModularChip<F, const BLOCKS: usize, const BLOCK_SIZE: usize> = VmChipWrapper<
36 F,
37 FieldExpressionFiller<Rv32VecHeapAdapterFiller<2, BLOCKS, BLOCKS, BLOCK_SIZE, BLOCK_SIZE>>,
38>;
39
40pub type ModularIsEqualAir<
42 const NUM_LANES: usize,
43 const LANE_SIZE: usize,
44 const TOTAL_LIMBS: usize,
45> = VmAirWrapper<
46 Rv32IsEqualModAdapterAir<2, NUM_LANES, LANE_SIZE, TOTAL_LIMBS>,
47 ModularIsEqualCoreAir<TOTAL_LIMBS, RV32_REGISTER_NUM_LIMBS, RV32_CELL_BITS>,
48>;
49
50#[derive(Clone, PreflightExecutor)]
51pub struct VmModularIsEqualExecutor<
52 const NUM_LANES: usize,
53 const LANE_SIZE: usize,
54 const TOTAL_LIMBS: usize,
55>(
56 ModularIsEqualExecutor<
57 Rv32IsEqualModAdapterExecutor<2, NUM_LANES, LANE_SIZE, TOTAL_LIMBS>,
58 TOTAL_LIMBS,
59 RV32_REGISTER_NUM_LIMBS,
60 RV32_CELL_BITS,
61 >,
62);
63
64pub type ModularIsEqualChip<
65 F,
66 const NUM_LANES: usize,
67 const LANE_SIZE: usize,
68 const TOTAL_LIMBS: usize,
69> = VmChipWrapper<
70 F,
71 ModularIsEqualFiller<
72 Rv32IsEqualModAdapterFiller<2, NUM_LANES, LANE_SIZE, TOTAL_LIMBS>,
73 TOTAL_LIMBS,
74 RV32_REGISTER_NUM_LIMBS,
75 RV32_CELL_BITS,
76 >,
77>;