risc0_circuit_recursion_sys/
lib.rs1use risc0_core::field::baby_bear::{BabyBearElem, BabyBearExtElem};
16
17#[repr(C)]
18pub struct RawExecBuffers {
19 pub ctrl: *const BabyBearElem,
20 pub data: *const BabyBearElem,
21 pub global: *const BabyBearElem,
22}
23
24#[repr(C)]
25pub struct RawAccumBuffers {
26 pub ctrl: *const BabyBearElem,
27 pub global: *const BabyBearElem,
28 pub data: *const BabyBearElem,
29 pub mix: *const BabyBearElem,
30 pub accum: *const BabyBearElem,
31}
32
33#[derive(Clone, Debug, PartialEq)]
34#[repr(C)]
35pub struct RawPreflightCycle {
36 pub iop_idx: u32,
37 pub is_par_safe: u32,
38}
39
40#[repr(C)]
41pub struct RawPreflightTrace {
42 pub wom: *const BabyBearExtElem,
43 pub cycles: *const RawPreflightCycle,
44 pub iops: *const BabyBearExtElem,
45 pub num_woms: u32,
46 pub num_cycles: u32,
47 pub num_iops: u32,
48}
49
50#[derive(Clone, Copy, PartialEq)]
51#[repr(u32)]
52pub enum StepMode {
53 Parallel,
54 SeqForward,
55 SeqReverse,
56}
57
58extern "C" {
59 pub fn risc0_circuit_recursion_cpu_witgen(
60 mode: StepMode,
61 buffers: *const RawExecBuffers,
62 preflight: *const RawPreflightTrace,
63 total_cycles: u32,
64 ) -> *const std::os::raw::c_char;
65
66 pub fn risc0_circuit_recursion_cpu_accum(
67 buffers: *const RawAccumBuffers,
68 work_cycles: u32,
69 total_cycles: u32,
70 ) -> *const std::os::raw::c_char;
71
72 pub fn risc0_circuit_recursion_cpu_eval_check(
73 buffers: *const RawAccumBuffers,
74 poly_mix: *const BabyBearExtElem,
75 check: *const BabyBearElem,
76 rou: BabyBearElem,
77 po2: u32,
78 steps: u32,
79 ) -> *const std::os::raw::c_char;
80}
81
82#[cfg(feature = "cuda")]
83extern "C" {
84 pub fn risc0_circuit_recursion_cuda_witgen(
85 mode: StepMode,
86 buffers: *const RawExecBuffers,
87 preflight: *const RawPreflightTrace,
88 steps: u32,
89 ) -> *const std::os::raw::c_char;
90
91 pub fn risc0_circuit_recursion_cuda_accum(
92 buffers: *const RawAccumBuffers,
93 steps: u32,
94 cycles: u32,
95 ) -> *const std::os::raw::c_char;
96
97 pub fn risc0_circuit_recursion_cuda_eval_check(
98 check: *const BabyBearElem,
99 ctrl: *const BabyBearElem,
100 data: *const BabyBearElem,
101 accum: *const BabyBearElem,
102 mix: *const BabyBearElem,
103 out: *const BabyBearElem,
104 rou: *const BabyBearElem,
105 po2: u32,
106 domain: u32,
107 poly_mix: *const BabyBearExtElem,
108 ) -> *const std::os::raw::c_char;
109}