eva_asm/instruction/
logging.rs1use derive_more::Display;
4
5use super::Instruction;
6use crate::opcode::{Mnemonic, OpCode};
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display)]
11#[display("{}", self.opcode())]
12pub struct Log<const N: u8> {
13 _private: (),
15}
16
17impl<const N: u8> Log<N> {
18 const VALID: () = assert!(N <= 4, "invalid LOG instruction");
20
21 #[must_use]
36 pub const fn new() -> Self {
37 () = Self::VALID;
38 Self { _private: () }
39 }
40}
41
42impl<const N: u8> Default for Log<N> {
43 fn default() -> Self {
44 Self::new()
45 }
46}
47
48impl<const N: u8> Instruction for Log<N> {
49 fn opcode(&self) -> OpCode {
50 match N {
51 0 => OpCode::Known(Mnemonic::LOG0),
52 1 => OpCode::Known(Mnemonic::LOG1),
53 2 => OpCode::Known(Mnemonic::LOG2),
54 3 => OpCode::Known(Mnemonic::LOG3),
55 4 => OpCode::Known(Mnemonic::LOG4),
56 _ => unreachable!(),
57 }
58 }
59}