From c377929ce10739d66501a370f01934db8dd3aa7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Rativel?= Date: Wed, 9 Nov 2022 15:59:05 +0100 Subject: [PATCH 1/2] Creating machine.rs file --- src/machine.rs | 27 +++++++++++++++++++++++++++ src/main.rs | 1 + 2 files changed, 28 insertions(+) create mode 100644 src/machine.rs diff --git a/src/machine.rs b/src/machine.rs new file mode 100644 index 0000000..5845ae3 --- /dev/null +++ b/src/machine.rs @@ -0,0 +1,27 @@ +use crate::decode::*; + + +pub struct Machine { + pub _pc : u32, + pub _int_reg : [u32 ; 32], + pub _instructions : [u32 ; 100] +} + + +impl Machine { + + fn _init_machine() -> Machine { + + Machine { + _pc : 0, + _instructions : [0 ; 100], + _int_reg : [0 ; 32] + } + } +} + +#[cfg(test)] + mod test { + use crate::{_init_machine}; + + } diff --git a/src/main.rs b/src/main.rs index aefc218..346a5b8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,6 @@ mod decode; mod print; +mod machine; fn main() { let instr = decode::decode(98); From c920f71c45cb9d910e47b2fae2e30e480d394046 Mon Sep 17 00:00:00 2001 From: Samy Solhi Date: Wed, 9 Nov 2022 16:08:51 +0100 Subject: [PATCH 2/2] tests lui and ld --- src/print.rs | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/print.rs b/src/print.rs index 2435951..6aaa052 100644 --- a/src/print.rs +++ b/src/print.rs @@ -184,7 +184,7 @@ pub fn print(ins: Instruction, pc: i32) -> String { //TODO pc should be u64 } }, RISCV_LUI => { - format!("lui x{}, {:X}", ins.rd.to_string(), ins.imm31_12) + format!("lui x{}, 0x{:X}", ins.rd.to_string(), ins.imm31_12) }, RISCV_AUIPC => { format!("auipc x{}, {:X}", ins.rd.to_string(), ins.imm31_12) @@ -285,4 +285,30 @@ mod test { assert_eq!("addi x28, x17, 0", print::print(addi, 0)); } + #[test] + fn test_lui() { + let lui = decode::decode(0b01110001000011111000_11100_0110111); + assert_eq!("lui x28, 0x710F8000", print::print(lui, 0)); + } + + #[test] + fn test_ld() { + // imm rs1 f3 rd opcode + let lb = decode::decode(0b010111110000_10001_000_11100_0000011); + let lh = decode::decode(0b010111110000_10001_001_11100_0000011); + let lw = decode::decode(0b010111110000_10001_010_11100_0000011); + let lbu = decode::decode(0b010111110000_10001_100_11100_0000011); + let lhu = decode::decode(0b010111110000_10001_101_11100_0000011); + let ld = decode::decode(0b010111110000_10001_011_11100_0000011); + let lwu = decode::decode(0b010111110000_10001_110_11100_0000011); + // TODO: imm négatif produit une erreur + assert_eq!("lb x28, 1520(x17)", print::print(lb, 0)); + assert_eq!("lh x28, 1520(x17)", print::print(lh, 0)); + assert_eq!("lw x28, 1520(x17)", print::print(lw, 0)); + assert_eq!("lbu x28, 1520(x17)", print::print(lbu, 0)); + assert_eq!("lhu x28, 1520(x17)", print::print(lhu, 0)); + assert_eq!("ld x28, 1520(x17)", print::print(ld, 0)); + assert_eq!("lwu x28, 1520(x17)", print::print(lwu, 0)); + } + } \ No newline at end of file