sp1_recursion_core/air/
instruction.rs

1use crate::air::Block;
2use sp1_derive::AlignedBorrow;
3use std::{iter::once, vec::IntoIter};
4
5#[derive(AlignedBorrow, Default, Debug, Clone, Copy)]
6#[repr(C)]
7pub struct InstructionCols<T> {
8    pub opcode: T,
9    pub op_a: T,
10    pub op_b: Block<T>,
11    pub op_c: Block<T>,
12    pub imm_b: T,
13    pub imm_c: T,
14    pub offset_imm: T,
15    pub size_imm: T,
16}
17
18impl<T> IntoIterator for InstructionCols<T> {
19    type Item = T;
20    type IntoIter = IntoIter<T>;
21
22    fn into_iter(self) -> Self::IntoIter {
23        once(self.opcode)
24            .chain(once(self.op_a))
25            .chain(self.op_b)
26            .chain(self.op_c)
27            .chain(once(self.imm_b))
28            .chain(once(self.imm_c))
29            .chain(once(self.offset_imm))
30            .chain(once(self.size_imm))
31            .collect::<Vec<_>>()
32            .into_iter()
33    }
34}