sp1_recursion_core/air/
instruction.rs1use 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}