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