1use std::fmt::{Display, Formatter};
2
3#[repr(u8)]
4pub enum OpCode {
5 Hlt, AddI32,
10 MulI32,
11 NegI32,
12
13 AddF32,
15 MulF32,
16 NegF32,
17
18 LtI32,
20
21 Bnz,
23 Bz,
24 Jmp,
26
27 Call, Enter,
30 Ret,
31
32 Mov,
34 MovLp,
35
36 Ld8,
38 Ld16,
39 Ld32,
40
41 LdConst, VecFromSlice,
52 VecPush,
53 VecIterInit,
54 VecIterNext,
55 VecIterNextPair,
56 Nop,
57
58 MapNewFromPairs,
62 MapRemove,
63 MapIterInit,
64 MapIterNext,
65 MapIterNextPair,
66
67 StringFromConstantSlice,
69 StringAppend,
70
71 Eq8Imm,
73 Tst8,
74 GtI32,
75 HostCall, StringLen,
77}
78
79impl Display for OpCode {
80 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
81 match self {
82 Self::Hlt => write!(f, "hlt"), Self::Ld8 => write!(f, "ld8"),
86 Self::Ld16 => write!(f, "ld16"),
87 Self::Ld32 => write!(f, "ld32"),
88
89 Self::LdConst => write!(f, "ldconst"),
90
91 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"),
118 Self::Tst8 => write!(f, "tst8"),
119
120 Self::VecPush => write!(f, "vec_push"),
122 Self::VecFromSlice => write!(f, "vec_from_slice"),
123 Self::VecIterInit => write!(f, "vec_iter_init"),
124 Self::VecIterNext => write!(f, "vec_iter_next"),
125 Self::VecIterNextPair => write!(f, "vec_iter_next_pair"),
126
127 Self::MapNewFromPairs => write!(f, "map_new_from_pairs"),
129 Self::MapRemove => write!(f, "map_remove"),
130 Self::MapIterInit => write!(f, "map_iter_init"),
131 Self::MapIterNext => write!(f, "map_iter_next"),
132 Self::MapIterNextPair => write!(f, "map_iter_next_pair"),
133
134 Self::StringFromConstantSlice => write!(f, "str_from_const"),
136 Self::StringAppend => write!(f, "str_append"),
137 Self::StringLen => write!(f, "str_len"),
138
139 Self::Nop => write!(f, "nop"),
140 }
141 }
142}
143
144impl From<u8> for OpCode {
146 fn from(value: u8) -> Self {
147 unsafe { std::mem::transmute(value) }
150 }
151}