miden_air/constraints/decoder/
columns.rs1use crate::trace::decoder::{
2 NUM_HASHER_COLUMNS, NUM_OP_BATCH_FLAGS, NUM_OP_BITS, NUM_OP_BITS_EXTRA_COLS,
3 NUM_USER_OP_HELPERS,
4};
5
6#[repr(C)]
8#[derive(Debug, Clone, Default)]
9pub struct DecoderCols<T> {
10 pub addr: T,
12 pub op_bits: [T; NUM_OP_BITS],
14 pub hasher_state: [T; NUM_HASHER_COLUMNS],
16 pub in_span: T,
18 pub group_count: T,
20 pub op_index: T,
22 pub batch_flags: [T; NUM_OP_BATCH_FLAGS],
24 pub extra: [T; NUM_OP_BITS_EXTRA_COLS],
26}
27
28impl<T: Copy> DecoderCols<T> {
29 pub fn user_op_helpers(&self) -> [T; NUM_USER_OP_HELPERS] {
31 [
32 self.hasher_state[2],
33 self.hasher_state[3],
34 self.hasher_state[4],
35 self.hasher_state[5],
36 self.hasher_state[6],
37 self.hasher_state[7],
38 ]
39 }
40
41 pub fn end_block_flags(&self) -> EndBlockFlags<T> {
43 EndBlockFlags {
44 is_loop_body: self.hasher_state[4],
45 is_loop: self.hasher_state[5],
46 is_call: self.hasher_state[6],
47 is_syscall: self.hasher_state[7],
48 }
49 }
50}
51
52#[repr(C)]
54#[derive(Clone, Debug)]
55pub struct EndBlockFlags<T> {
56 pub is_loop_body: T,
57 pub is_loop: T,
58 pub is_call: T,
59 pub is_syscall: T,
60}