sp1_core_machine/control_flow/branch/
columns.rs1use sp1_derive::AlignedBorrow;
2use std::mem::size_of;
3use struct_reflection::{StructReflection, StructReflectionHelper};
4
5use crate::{
6 adapter::{register::i_type::ITypeReader, state::CPUState},
7 operations::LtOperationSigned,
8 SupervisorMode, TrustMode, UserMode,
9};
10
11pub const NUM_BRANCH_COLS_SUPERVISOR: usize = size_of::<BranchColumns<u8, SupervisorMode>>();
13pub const NUM_BRANCH_COLS_USER: usize = size_of::<BranchColumns<u8, UserMode>>();
15
16#[derive(AlignedBorrow, Default, Debug, Clone, Copy, StructReflection)]
18#[repr(C)]
19pub struct BranchColumns<T, M: TrustMode> {
20 pub state: CPUState<T>,
22
23 pub adapter: ITypeReader<T>,
25
26 pub next_pc: [T; 3],
28
29 pub is_beq: T,
31 pub is_bne: T,
32 pub is_blt: T,
33 pub is_bge: T,
34 pub is_bltu: T,
35 pub is_bgeu: T,
36
37 pub is_branching: T,
44
45 pub compare_operation: LtOperationSigned<T>,
47
48 pub adapter_cols: M::AdapterCols<T>,
50}