openvm_algebra_circuit/modular_chip/
mod.rs

1use 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(test)]
20mod tests;
21
22pub type ModularAir<const BLOCKS: usize, const BLOCK_SIZE: usize> = VmAirWrapper<
23    Rv32VecHeapAdapterAir<2, BLOCKS, BLOCKS, BLOCK_SIZE, BLOCK_SIZE>,
24    FieldExpressionCoreAir,
25>;
26
27pub type ModularExecutor<const BLOCKS: usize, const BLOCK_SIZE: usize> =
28    FieldExprVecHeapExecutor<BLOCKS, BLOCK_SIZE, false>;
29
30pub type ModularChip<F, const BLOCKS: usize, const BLOCK_SIZE: usize> = VmChipWrapper<
31    F,
32    FieldExpressionFiller<Rv32VecHeapAdapterFiller<2, BLOCKS, BLOCKS, BLOCK_SIZE, BLOCK_SIZE>>,
33>;
34
35// Must have TOTAL_LIMBS = NUM_LANES * LANE_SIZE
36pub type ModularIsEqualAir<
37    const NUM_LANES: usize,
38    const LANE_SIZE: usize,
39    const TOTAL_LIMBS: usize,
40> = VmAirWrapper<
41    Rv32IsEqualModAdapterAir<2, NUM_LANES, LANE_SIZE, TOTAL_LIMBS>,
42    ModularIsEqualCoreAir<TOTAL_LIMBS, RV32_REGISTER_NUM_LIMBS, RV32_CELL_BITS>,
43>;
44
45#[derive(Clone, PreflightExecutor)]
46pub struct VmModularIsEqualExecutor<
47    const NUM_LANES: usize,
48    const LANE_SIZE: usize,
49    const TOTAL_LIMBS: usize,
50>(
51    ModularIsEqualExecutor<
52        Rv32IsEqualModAdapterExecutor<2, NUM_LANES, LANE_SIZE, TOTAL_LIMBS>,
53        TOTAL_LIMBS,
54        RV32_REGISTER_NUM_LIMBS,
55        RV32_CELL_BITS,
56    >,
57);
58
59pub type ModularIsEqualChip<
60    F,
61    const NUM_LANES: usize,
62    const LANE_SIZE: usize,
63    const TOTAL_LIMBS: usize,
64> = VmChipWrapper<
65    F,
66    ModularIsEqualFiller<
67        Rv32IsEqualModAdapterFiller<2, NUM_LANES, LANE_SIZE, TOTAL_LIMBS>,
68        TOTAL_LIMBS,
69        RV32_REGISTER_NUM_LIMBS,
70        RV32_CELL_BITS,
71    >,
72>;