sp1_core_executor/events/
instr.rs1use deepsize2::DeepSizeOf;
2use serde::{Deserialize, Serialize};
3
4use crate::{Instruction, Opcode};
5
6use super::MemoryRecordEnum;
7
8#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, DeepSizeOf)]
12#[repr(C)]
13pub struct AluEvent {
14 pub clk: u64,
16 pub pc: u64,
18 pub opcode: Opcode,
20 pub a: u64,
22 pub b: u64,
24 pub c: u64,
26 pub op_a_0: bool,
28}
29
30impl AluEvent {
31 #[must_use]
33 #[allow(clippy::too_many_arguments)]
34 pub fn new(clk: u64, pc: u64, opcode: Opcode, a: u64, b: u64, c: u64, op_a_0: bool) -> Self {
35 Self { clk, pc, opcode, a, b, c, op_a_0 }
36 }
37}
38
39#[derive(Debug, Clone, Copy, Serialize, Deserialize, DeepSizeOf)]
43#[repr(C)]
44pub struct MemInstrEvent {
45 pub clk: u64,
47 pub pc: u64,
49 pub opcode: Opcode,
51 pub a: u64,
53 pub b: u64,
55 pub c: u64,
57 pub op_a_0: bool,
59 pub mem_access: MemoryRecordEnum,
61}
62
63impl MemInstrEvent {
64 #[must_use]
66 #[allow(clippy::too_many_arguments)]
67 pub fn new(
68 clk: u64,
69 pc: u64,
70 opcode: Opcode,
71 a: u64,
72 b: u64,
73 c: u64,
74 op_a_0: bool,
75 mem_access: MemoryRecordEnum,
76 ) -> Self {
77 Self { clk, pc, opcode, a, b, c, op_a_0, mem_access }
78 }
79}
80
81#[derive(Debug, Clone, Copy, Serialize, Deserialize, DeepSizeOf)]
85#[repr(C)]
86pub struct BranchEvent {
87 pub clk: u64,
89 pub pc: u64,
91 pub next_pc: u64,
93 pub opcode: Opcode,
95 pub a: u64,
97 pub b: u64,
99 pub c: u64,
101 pub op_a_0: bool,
103}
104
105impl BranchEvent {
106 #[must_use]
108 #[allow(clippy::too_many_arguments)]
109 pub fn new(
110 clk: u64,
111 pc: u64,
112 next_pc: u64,
113 opcode: Opcode,
114 a: u64,
115 b: u64,
116 c: u64,
117 op_a_0: bool,
118 ) -> Self {
119 Self { clk, pc, next_pc, opcode, a, b, c, op_a_0 }
120 }
121}
122
123#[derive(Debug, Clone, Copy, Serialize, Deserialize, DeepSizeOf)]
127#[repr(C)]
128pub struct JumpEvent {
129 pub clk: u64,
131 pub pc: u64,
133 pub next_pc: u64,
135 pub opcode: Opcode,
137 pub a: u64,
139 pub b: u64,
141 pub c: u64,
143 pub op_a_0: bool,
145}
146
147impl JumpEvent {
148 #[must_use]
150 #[allow(clippy::too_many_arguments)]
151 pub fn new(
152 clk: u64,
153 pc: u64,
154 next_pc: u64,
155 opcode: Opcode,
156 a: u64,
157 b: u64,
158 c: u64,
159 op_a_0: bool,
160 ) -> Self {
161 Self { clk, pc, next_pc, opcode, a, b, c, op_a_0 }
162 }
163}
164#[derive(Debug, Clone, Copy, Serialize, Deserialize, DeepSizeOf)]
168#[repr(C)]
169pub struct UTypeEvent {
170 pub clk: u64,
172 pub pc: u64,
174 pub opcode: Opcode,
176 pub a: u64,
178 pub b: u64,
180 pub c: u64,
182 pub op_a_0: bool,
184}
185
186impl UTypeEvent {
187 #[must_use]
189 #[allow(clippy::too_many_arguments)]
190 pub fn new(clk: u64, pc: u64, opcode: Opcode, a: u64, b: u64, c: u64, op_a_0: bool) -> Self {
191 Self { clk, pc, opcode, a, b, c, op_a_0 }
192 }
193}
194
195#[derive(Debug, Clone, Copy, Serialize, Deserialize, DeepSizeOf)]
199#[repr(C)]
200pub struct InstructionFetchEvent {
201 pub clk: u64,
203 pub pc: u64,
205 pub instruction: Instruction,
207 pub encoded_instruction: u32,
209}
210
211impl InstructionFetchEvent {
212 #[must_use]
214 #[allow(clippy::too_many_arguments)]
215 pub fn new(clk: u64, pc: u64, instruction: Instruction, encoded_instruction: u32) -> Self {
216 Self { clk, pc, instruction, encoded_instruction }
217 }
218}
219
220#[derive(Debug, Clone, Copy, Serialize, Deserialize, DeepSizeOf)]
224#[repr(C)]
225pub struct InstructionDecodeEvent {
226 pub instruction: Instruction,
228 pub encoded_instruction: u32,
230 pub multiplicity: usize,
232}
233
234impl InstructionDecodeEvent {
235 #[must_use]
237 #[allow(clippy::too_many_arguments)]
238 pub fn new(instruction: Instruction, encoded_instruction: u32, multiplicity: usize) -> Self {
239 Self { instruction, encoded_instruction, multiplicity }
240 }
241}