]> Witch of Git - jade-mouse/blob - toolchain/src/inst.rs
Implement mov and add tests
[jade-mouse] / toolchain / src / inst.rs
1 mod decode;
2 mod encode;
3
4 #[derive(Clone, Copy, Debug, PartialOrd, Ord, PartialEq, Eq)]
5 pub enum Reg {
6 R0,
7 R1,
8 R2,
9 R3,
10 }
11
12 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
13 pub enum RegPair {
14 R1R0,
15 R3R2,
16 }
17
18 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
19 pub enum Op1 {
20 Inc,
21 Dec,
22 Neg,
23 Compl,
24 }
25
26 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
27 pub enum OpI {
28 Add7(Imm7),
29 Sub6(Imm6),
30 Lsl(Imm3),
31 Lsr(Imm3),
32 Asr(Imm3),
33 Rol(Imm3),
34 And(Imm8),
35 Or(Imm8),
36 Xor(Imm8),
37 }
38
39 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
40 pub enum Op2 {
41 Add,
42 Sub,
43 And,
44 Or,
45 Xor,
46 // These are preliminary
47 Lsl,
48 Rol,
49 Bic,
50 }
51
52 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
53 pub struct Imm3(u8);
54 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
55 pub struct Imm5(u8);
56 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
57 pub struct Imm6(u8);
58 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
59 pub struct Imm7(u8);
60 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
61 pub struct Imm8(u8);
62
63 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
64 pub enum Addr {
65 Imm(Imm7),
66 Off(Reg, Imm5),
67 One(Reg),
68 Pair(RegPair),
69 }
70
71 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
72 pub enum Cond {
73 Eq,
74 Ne,
75 Test,
76 TestNot,
77 Lt,
78 Ult,
79 }
80
81 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
82 pub enum Inst {
83 Move(Reg, Reg),
84 CallR(Reg),
85 Alu1(Reg, Op1),
86 Load(Reg, Addr),
87 Store(Addr, Reg),
88 JumpR(Reg),
89 JumpI(Imm8),
90 CallI(Imm8),
91 // @TODO: Implement the PartialEq for Cond symmetric in the registers for
92 // Eq, Ne, Test, and TestNot.
93 Branch(Cond, Reg, Reg),
94 AluI(Reg, OpI),
95 Skip(Reg, Reg),
96 Alu2(Reg, Op2, Reg),
97 }