sp1_core_machine/cpu/columns/ecall.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
use sp1_derive::AlignedBorrow;
use sp1_stark::{air::PV_DIGEST_NUM_WORDS, Word};
use std::mem::size_of;
use crate::operations::{BabyBearWordRangeChecker, IsZeroOperation};
pub const NUM_ECALL_COLS: usize = size_of::<EcallCols<u8>>();
#[derive(AlignedBorrow, Default, Debug, Clone, Copy)]
#[repr(C)]
pub struct EcallCols<T> {
/// Whether the current ecall is ENTER_UNCONSTRAINED.
pub is_enter_unconstrained: IsZeroOperation<T>,
/// Whether the current ecall is HINT_LEN.
pub is_hint_len: IsZeroOperation<T>,
/// Whether the current ecall is HALT.
pub is_halt: IsZeroOperation<T>,
/// Whether the current ecall is a COMMIT.
pub is_commit: IsZeroOperation<T>,
/// Whether the current ecall is a COMMIT_DEFERRED_PROOFS.
pub is_commit_deferred_proofs: IsZeroOperation<T>,
/// Field to store the word index passed into the COMMIT ecall. index_bitmap[word index]
/// should be set to 1 and everything else set to 0.
pub index_bitmap: [T; PV_DIGEST_NUM_WORDS],
/// The nonce of the syscall operation.
pub syscall_nonce: T,
/// Columns to babybear range check the halt/commit_deferred_proofs operand.
pub operand_range_check_cols: BabyBearWordRangeChecker<T>,
/// The operand value to babybear range check.
pub operand_to_check: Word<T>,
}