sp1_recursion_core/
sys.rs

1use crate::{
2    air::Block,
3    chips::{
4        alu_base::{BaseAluAccessCols, BaseAluValueCols},
5        alu_ext::{ExtAluAccessCols, ExtAluValueCols},
6        batch_fri::{BatchFRICols, BatchFRIPreprocessedCols},
7        exp_reverse_bits::{ExpReverseBitsLenCols, ExpReverseBitsLenPreprocessedCols},
8        fri_fold::{FriFoldCols, FriFoldPreprocessedCols},
9        poseidon2_skinny::columns::{preprocessed::Poseidon2PreprocessedColsSkinny, Poseidon2},
10        poseidon2_wide::columns::preprocessed::Poseidon2PreprocessedColsWide,
11        public_values::{PublicValuesCols, PublicValuesPreprocessedCols},
12        select::{SelectCols, SelectPreprocessedCols},
13    },
14    BaseAluInstr, BaseAluIo, BatchFRIEvent, BatchFRIInstrFFI, CommitPublicValuesEvent,
15    CommitPublicValuesInstr, ExpReverseBitsEventFFI, ExpReverseBitsInstrFFI, ExtAluInstr, ExtAluIo,
16    FriFoldEvent, FriFoldInstrFFI, Poseidon2Event, Poseidon2Instr, SelectEvent, SelectInstr,
17};
18use p3_baby_bear::BabyBear;
19
20#[link(name = "sp1-recursion-core-sys", kind = "static")]
21extern "C-unwind" {
22    pub fn alu_base_event_to_row_babybear(
23        io: &BaseAluIo<BabyBear>,
24        cols: &mut BaseAluValueCols<BabyBear>,
25    );
26    pub fn alu_base_instr_to_row_babybear(
27        instr: &BaseAluInstr<BabyBear>,
28        cols: &mut BaseAluAccessCols<BabyBear>,
29    );
30
31    pub fn alu_ext_event_to_row_babybear(
32        io: &ExtAluIo<Block<BabyBear>>,
33        cols: &mut ExtAluValueCols<BabyBear>,
34    );
35    pub fn alu_ext_instr_to_row_babybear(
36        instr: &ExtAluInstr<BabyBear>,
37        cols: &mut ExtAluAccessCols<BabyBear>,
38    );
39
40    pub fn batch_fri_event_to_row_babybear(
41        io: &BatchFRIEvent<BabyBear>,
42        cols: &mut BatchFRICols<BabyBear>,
43    );
44    pub fn batch_fri_instr_to_row_babybear(
45        instr: &BatchFRIInstrFFI<BabyBear>,
46        cols: &mut BatchFRIPreprocessedCols<BabyBear>,
47        index: usize,
48    );
49
50    pub fn exp_reverse_bits_event_to_row_babybear(
51        io: &ExpReverseBitsEventFFI<BabyBear>,
52        i: usize,
53        cols: &mut ExpReverseBitsLenCols<BabyBear>,
54    );
55    pub fn exp_reverse_bits_instr_to_row_babybear(
56        instr: &ExpReverseBitsInstrFFI<BabyBear>,
57        i: usize,
58        len: usize,
59        cols: &mut ExpReverseBitsLenPreprocessedCols<BabyBear>,
60    );
61
62    pub fn fri_fold_event_to_row_babybear(
63        io: &FriFoldEvent<BabyBear>,
64        cols: &mut FriFoldCols<BabyBear>,
65    );
66    pub fn fri_fold_instr_to_row_babybear(
67        instr: &FriFoldInstrFFI<BabyBear>,
68        i: usize,
69        cols: &mut FriFoldPreprocessedCols<BabyBear>,
70    );
71
72    pub fn public_values_event_to_row_babybear(
73        io: &CommitPublicValuesEvent<BabyBear>,
74        digest_idx: usize,
75        cols: &mut PublicValuesCols<BabyBear>,
76    );
77    pub fn public_values_instr_to_row_babybear(
78        instr: &CommitPublicValuesInstr<BabyBear>,
79        digest_idx: usize,
80        cols: &mut PublicValuesPreprocessedCols<BabyBear>,
81    );
82
83    pub fn select_event_to_row_babybear(
84        io: &SelectEvent<BabyBear>,
85        cols: &mut SelectCols<BabyBear>,
86    );
87    pub fn select_instr_to_row_babybear(
88        instr: &SelectInstr<BabyBear>,
89        cols: &mut SelectPreprocessedCols<BabyBear>,
90    );
91
92    pub fn poseidon2_skinny_event_to_row_babybear(
93        io: &Poseidon2Event<BabyBear>,
94        cols: *mut Poseidon2<BabyBear>,
95    );
96    pub fn poseidon2_skinny_instr_to_row_babybear(
97        instr: &Poseidon2Instr<BabyBear>,
98        i: usize,
99        cols: &mut Poseidon2PreprocessedColsSkinny<BabyBear>,
100    );
101
102    pub fn poseidon2_wide_event_to_row_babybear(
103        input: *const BabyBear,
104        input_row: *mut BabyBear,
105        sbox_state: bool,
106    );
107    pub fn poseidon2_wide_instr_to_row_babybear(
108        instr: &Poseidon2Instr<BabyBear>,
109        cols: &mut Poseidon2PreprocessedColsWide<BabyBear>,
110    );
111}