1use std::fmt::{Display, Formatter};
7
8#[repr(u8)]
9#[derive(Debug)]
10pub enum OpCode {
11 Hlt, AddI32,
16 MulI32,
17 NegI32,
18
19 AddF32,
21 MulF32,
22 NegF32,
23
24 LtI32,
26
27 Bnz,
29 Bz,
30 Jmp,
32
33 Call, Enter,
36 Ret,
37
38 Mov,
40 MovLp,
41
42 Ld8,
44 Ld16,
45 Ld32,
46
47 LdConst, VecFromSlice,
58 VecPush,
59 VecIterInit,
60 VecIterNext,
61 VecIterNextPair,
62 Nop,
63
64 MapNewFromPairs,
68 MapRemove,
69 MapIterInit,
70 MapIterNext,
71 MapIterNextPair,
72
73 StringFromConstantSlice,
75 StringAppend,
76
77 Eq8Imm,
79 Eq32,
80
81 Tst8,
82 GtI32,
83 HostCall, StringLen,
85}
86
87impl Display for OpCode {
88 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
89 match self {
90 Self::Hlt => write!(f, "hlt"), Self::Ld8 => write!(f, "ld8"),
94 Self::Ld16 => write!(f, "ld16"),
95 Self::Ld32 => write!(f, "ld32"),
96
97 Self::LdConst => write!(f, "ldconst"),
98
99 Self::Mov => write!(f, "mov"), Self::MovLp => write!(f, "movlp"), Self::AddI32 => write!(f, "sadd32"), Self::MulI32 => write!(f, "smul32"), Self::NegI32 => write!(f, "sneg32"), Self::AddF32 => write!(f, "fadd"), Self::MulF32 => write!(f, "fmul"), Self::NegF32 => write!(f, "fneg"), Self::Call => write!(f, "call"), Self::Enter => write!(f, "enter"), Self::Ret => write!(f, "ret"), Self::HostCall => write!(f, "host"), Self::Jmp => write!(f, "jmp"), Self::Bz => write!(f, "bz"), Self::Bnz => write!(f, "bnz"), Self::LtI32 => write!(f, "slt32"), Self::GtI32 => write!(f, "sgt32"), Self::Eq8Imm => write!(f, "eq8"),
126 Self::Eq32 => write!(f, "eq32"),
127 Self::Tst8 => write!(f, "tst8"),
128
129 Self::VecPush => write!(f, "vec_push"),
131 Self::VecFromSlice => write!(f, "vec_from_slice"),
132 Self::VecIterInit => write!(f, "vec_iter_init"),
133 Self::VecIterNext => write!(f, "vec_iter_next"),
134 Self::VecIterNextPair => write!(f, "vec_iter_next_pair"),
135
136 Self::MapNewFromPairs => write!(f, "map_new_from_pairs"),
138 Self::MapRemove => write!(f, "map_remove"),
139 Self::MapIterInit => write!(f, "map_iter_init"),
140 Self::MapIterNext => write!(f, "map_iter_next"),
141 Self::MapIterNextPair => write!(f, "map_iter_next_pair"),
142
143 Self::StringFromConstantSlice => write!(f, "str_from_const"),
145 Self::StringAppend => write!(f, "str_append"),
146 Self::StringLen => write!(f, "str_len"),
147
148 Self::Nop => write!(f, "nop"),
149 }
150 }
151}
152
153impl From<u8> for OpCode {
155 fn from(value: u8) -> Self {
156 unsafe { std::mem::transmute(value) }
159 }
160}