]> Witch of Git - jade-rose/blob - toolchain/src/inst.rs
Add Reg constructor
[jade-rose] / toolchain / src / inst.rs
1 pub mod decode;
2 pub mod encode;
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 Reg(U3);
42 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
43 pub struct U3(u8);
44 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
45 pub struct AddImm(i8);
46
47 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
48 pub enum AluI {
49 And(u8),
50 Ior(u8),
51 Xor(u8),
52 Add(AddImm),
53 Rol(U3),
54 Lsl(U3),
55 Lsr(U3),
56 Asr(U3),
57 }
58
59 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
60 pub enum Inst {
61 Trap,
62 JAbs,
63 CAbs,
64 JOff,
65 COff,
66 Swap(Reg),
67 GetR(Reg),
68 SetR(Reg),
69 Get(Special),
70 Set(Special),
71 Alu1(Op1),
72 IsLt(Reg),
73 AluR(OpR, Reg),
74 LdD(Data, Reg),
75 StD(Data, Reg),
76 AluI(AluI),
77 BEzI(i8),
78 JOfI(i8),
79 COfI(i8),
80 }
81
82 impl Reg {
83 pub fn new(x: u8) -> Option<Reg> {
84 U3::new(x).map(Reg)
85 }
86 }
87
88 impl U3 {
89 pub fn new(x: u8) -> Option<U3> {
90 match x {
91 0..=7 => Some(U3(x)),
92 _ => None,
93 }
94 }
95 }
96
97 impl AddImm {
98 pub fn new(x: i8) -> Option<AddImm> {
99 match x {
100 -64..=127 => Some(AddImm(x)),
101 _ => None,
102 }
103 }
104 }