use crate::adapter::{register::i_type::ITypeReader, state::CPUState};
use crate::{SupervisorMode, TrustMode, UserMode};
use sp1_derive::AlignedBorrow;
use std::mem::size_of;
use struct_reflection::{StructReflection, StructReflectionHelper};
use crate::operations::AddOperation;
pub const NUM_JALR_COLS_SUPERVISOR: usize = size_of::<JalrColumns<u8, SupervisorMode>>();
pub const NUM_JALR_COLS_USER: usize = size_of::<JalrColumns<u8, UserMode>>();
#[derive(AlignedBorrow, Default, Debug, Clone, Copy, StructReflection)]
#[repr(C)]
pub struct JalrColumns<T, M: TrustMode> {
pub state: CPUState<T>,
pub adapter: ITypeReader<T>,
pub is_real: T,
pub add_operation: AddOperation<T>,
pub op_a_operation: AddOperation<T>,
pub lsb: T,
pub adapter_cols: M::AdapterCols<T>,
}