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(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
40// Must have TOTAL_LIMBS = NUM_LANES * LANE_SIZE
41pub 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>;