sp1_core_machine/syscall/instructions/
columns.rs1use sp1_derive::AlignedBorrow;
2use sp1_hypercube::{air::PV_DIGEST_NUM_WORDS, Word};
3use std::mem::size_of;
4use struct_reflection::{StructReflection, StructReflectionHelper};
5
6use crate::{
7 adapter::{register::r_type::RTypeReader, state::CPUState},
8 operations::{IsZeroOperation, SP1FieldWordRangeChecker, U16toU8Operation},
9 SupervisorMode, TrustMode, UserMode,
10};
11
12pub const NUM_SYSCALL_INSTR_COLS_USER: usize = size_of::<SyscallInstrColumns<u8, UserMode>>();
13pub const NUM_SYSCALL_INSTR_COLS_SUPERVISOR: usize =
14 size_of::<SyscallInstrColumns<u8, SupervisorMode>>();
15
16#[derive(AlignedBorrow, Default, Debug, Clone, Copy, StructReflection)]
17#[repr(C)]
18pub struct SyscallInstrColumns<T, M: TrustMode> {
19 pub state: CPUState<T>,
21
22 pub adapter: RTypeReader<T>,
24
25 pub next_pc: [T; 3],
27
28 pub is_halt: T,
31
32 pub op_a_value: Word<T>,
34
35 pub a_low_bytes: U16toU8Operation<T>,
37
38 pub is_enter_unconstrained: IsZeroOperation<T>,
40
41 pub is_hint_len: IsZeroOperation<T>,
43
44 pub is_halt_check: IsZeroOperation<T>,
46
47 pub is_commit: IsZeroOperation<T>,
49
50 pub is_commit_deferred_proofs: IsZeroOperation<T>,
52
53 pub index_bitmap: [T; PV_DIGEST_NUM_WORDS],
56
57 pub expected_public_values_digest: [T; 4],
59
60 pub op_b_range_check: SP1FieldWordRangeChecker<T>,
62
63 pub op_c_range_check: SP1FieldWordRangeChecker<T>,
65
66 pub is_real: T,
68
69 pub user_mode_cols: M::SyscallInstrCols<T>,
71}