1#![allow(non_upper_case_globals)]
2
3use crate::asm::encode32::Encode32;
4use crate::asm::encode16::Encode16;
5use crate::isa::data::Fin;
6use crate::isa::rv32::RV32Instr::*;
7use crate::isa::typed::Reg;
8
9pub mod encode32;
10pub mod encode16;
11pub mod traits;
12
13pub const zero: Reg = Reg::ZERO;
14pub const ra: Reg = Reg::X(Fin::new(1));
15pub const sp: Reg = Reg::X(Fin::new(2));
16pub const gp: Reg = Reg::X(Fin::new(3));
17pub const tp: Reg = Reg::X(Fin::new(4));
18pub const t0: Reg = Reg::X(Fin::new(5));
19pub const t1: Reg = Reg::X(Fin::new(6));
20pub const t2: Reg = Reg::X(Fin::new(7));
21pub const s0: Reg = Reg::X(Fin::new(8));
22pub const s1: Reg = Reg::X(Fin::new(9));
23pub const a0: Reg = Reg::X(Fin::new(10));
24pub const a1: Reg = Reg::X(Fin::new(11));
25pub const a2: Reg = Reg::X(Fin::new(12));
26pub const a3: Reg = Reg::X(Fin::new(13));
27pub const a4: Reg = Reg::X(Fin::new(14));
28pub const a5: Reg = Reg::X(Fin::new(15));
29pub const a6: Reg = Reg::X(Fin::new(16));
30pub const a7: Reg = Reg::X(Fin::new(17));
31pub const s2: Reg = Reg::X(Fin::new(18));
32pub const s3: Reg = Reg::X(Fin::new(19));
33pub const s4: Reg = Reg::X(Fin::new(20));
34pub const s5: Reg = Reg::X(Fin::new(21));
35pub const s6: Reg = Reg::X(Fin::new(22));
36pub const s7: Reg = Reg::X(Fin::new(23));
37pub const s8: Reg = Reg::X(Fin::new(24));
38pub const s9: Reg = Reg::X(Fin::new(25));
39pub const s10: Reg = Reg::X(Fin::new(26));
40pub const s11: Reg = Reg::X(Fin::new(27));
41pub const t3: Reg = Reg::X(Fin::new(28));
42pub const t4: Reg = Reg::X(Fin::new(29));
43pub const t5: Reg = Reg::X(Fin::new(30));
44pub const t6: Reg = Reg::X(Fin::new(31));
45
46#[derive(Default)]
47pub struct Assembler {
48 pub code: Vec<u8>,
49}
50
51impl Assembler {
52 pub fn emit32<T: Encode32>(&mut self, _code: T) {
53 }
54
55 pub fn emit16<T: Encode16>(&mut self, _code: T) {
56 }
57
58 pub fn lui(&mut self, rd: Reg, imm: i32) {
59 self.emit32(LUI(rd.into(), imm.into()));
60 }
61}
62
63#[cfg(test)]
64mod test {
65 use super::*;
66
67 #[test]
68 fn test() {
69 let mut asm = Assembler::default();
70 asm.lui(ra, 114514);
71 }
72}