use sp1_derive::AlignedBorrow;
use sp1_hypercube::{air::PV_DIGEST_NUM_WORDS, Word};
use std::mem::size_of;
use crate::{
adapter::{register::r_type::RTypeReader, state::CPUState},
operations::{IsZeroOperation, SP1FieldWordRangeChecker, U16toU8Operation},
};
pub const NUM_SYSCALL_INSTR_COLS: usize = size_of::<SyscallInstrColumns<u8>>();
#[derive(AlignedBorrow, Default, Debug, Clone, Copy)]
#[repr(C)]
pub struct SyscallInstrColumns<T> {
pub state: CPUState<T>,
pub adapter: RTypeReader<T>,
pub next_pc: [T; 3],
pub is_halt: T,
pub op_a_value: Word<T>,
pub a_low_bytes: U16toU8Operation<T>,
pub is_enter_unconstrained: IsZeroOperation<T>,
pub is_hint_len: IsZeroOperation<T>,
pub is_halt_check: IsZeroOperation<T>,
pub is_commit: IsZeroOperation<T>,
pub is_commit_deferred_proofs: IsZeroOperation<T>,
pub index_bitmap: [T; PV_DIGEST_NUM_WORDS],
pub expected_public_values_digest: [T; 4],
pub op_b_range_check: SP1FieldWordRangeChecker<T>,
pub op_c_range_check: SP1FieldWordRangeChecker<T>,
pub is_real: T,
}