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