]> Witch of Git - jade-rose/blob - toolchain/src/inst.rs
Add encode and decode traits
[jade-rose] / toolchain / src / inst.rs
1 pub mod decode;
2 pub mod encode;
3
4 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
5 pub struct Reg(u8);
6
7 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
8 pub enum Op1 {
9 Zero,
10 Lsl1,
11 Lsr1,
12 Asr1,
13 Incr,
14 Decr,
15 Comp,
16 Negt,
17 }
18
19 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
20 pub enum OpR {
21 Add,
22 Sub,
23 And,
24 Ior,
25 Xor,
26 Lsl,
27 Lsr,
28 Asr,
29 }
30
31 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
32 pub enum Data {
33 D1,
34 D2,
35 }
36
37 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
38 pub enum Special {
39 Data(Data),
40 Code,
41 }
42
43 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
44 pub struct U3(u8);
45 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
46 pub struct AddImm(i8);
47
48 impl U3 {
49 pub fn new(x: u8) -> Option<U3> {
50 match x {
51 0..=7 => Some(U3(x)),
52 _ => None,
53 }
54 }
55 }
56
57 impl AddImm {
58 pub fn new(x: i8) -> Option<AddImm> {
59 match x {
60 -64..=127 => Some(AddImm(x)),
61 _ => None,
62 }
63 }
64 }
65
66 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
67 pub enum AluI {
68 And(u8),
69 Ior(u8),
70 Xor(u8),
71 Add(AddImm),
72 Rol(U3),
73 Lsl(U3),
74 Lsr(U3),
75 Asr(U3),
76 }
77
78 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
79 pub enum Inst {
80 Trap,
81 JAbs,
82 CAbs,
83 JOff,
84 COff,
85 Swap(Reg),
86 GetR(Reg),
87 SetR(Reg),
88 Get(Special),
89 Set(Special),
90 Alu1(Op1),
91 IsLt(Reg),
92 AluR(OpR, Reg),
93 LdD(Data, Reg),
94 StD(Data, Reg),
95 AluI(AluI),
96 BEzI(i8),
97 JOfI(i8),
98 COfI(i8),
99 }