sp1_recursion_core/
sys.rs1use 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}