Merge branch 'decode_print' of gitlab.istic.univ-rennes1.fr:simpleos/burritos into decode_print
This commit is contained in:
commit
c5291b7a3b
@ -41,6 +41,6 @@ impl Machine {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use crate::{_init_machine};
|
use super::Machine;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
41
src/print.rs
41
src/print.rs
@ -131,7 +131,7 @@ const RISCV_FP_FMVW: u8 = 0x78;
|
|||||||
|
|
||||||
|
|
||||||
const names_op: [&str; 8] = ["add", "sll", "slt", "sltu", "xor", "sr", "or", "and"];
|
const names_op: [&str; 8] = ["add", "sll", "slt", "sltu", "xor", "sr", "or", "and"];
|
||||||
const names_opi: [&str; 8] = ["addi", "slli", "slti", "cmpltuii", "xori", "slri", "ori", "andi"];
|
const names_opi: [&str; 8] = ["addi", "slli", "slti", "sltiu", "xori", "slri", "ori", "andi"];
|
||||||
const names_mul: [&str; 8] = ["mpylo", "mpyhi", "mpyhi", "mpyhi", "divhi", "divhi", "divlo", "divlo"];
|
const names_mul: [&str; 8] = ["mpylo", "mpyhi", "mpyhi", "mpyhi", "divhi", "divhi", "divlo", "divlo"];
|
||||||
const names_br: [&str; 8] = ["beq", "bne", "", "", "blt", "bge", "bltu", "bgeu"];
|
const names_br: [&str; 8] = ["beq", "bne", "", "", "blt", "bge", "bltu", "bgeu"];
|
||||||
const names_st: [&str; 4] = ["sb", "sh", "sw", "sd"];
|
const names_st: [&str; 4] = ["sb", "sh", "sw", "sd"];
|
||||||
@ -184,7 +184,7 @@ pub fn print(ins: Instruction, pc: i32) -> String { //TODO pc should be u64
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
RISCV_LUI => {
|
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 => {
|
RISCV_AUIPC => {
|
||||||
format!("auipc x{}, {:X}", ins.rd.to_string(), ins.imm31_12)
|
format!("auipc x{}, {:X}", ins.rd.to_string(), ins.imm31_12)
|
||||||
@ -261,6 +261,7 @@ pub fn print(ins: Instruction, pc: i32) -> String { //TODO pc should be u64
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
|
|
||||||
use crate::{print, decode};
|
use crate::{print, decode};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -282,7 +283,43 @@ mod test {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_opi() {
|
fn test_opi() {
|
||||||
let addi = decode::decode(0b0000000000_10001_000_11100_0010011);
|
let addi = decode::decode(0b0000000000_10001_000_11100_0010011);
|
||||||
|
let slli = decode::decode(0b0000000000_10001_001_11100_0010011);
|
||||||
|
let slti = decode::decode(0b0000000000_10001_010_11100_0010011);
|
||||||
|
let sltiu = decode::decode(0b0000000000_10001_011_11100_0010011);
|
||||||
|
let xori = decode::decode(0b_0000000000010001_100_11100_0010011);
|
||||||
|
let ori = decode::decode(0b00000000000_10001_110_11100_0010011);
|
||||||
assert_eq!("addi x28, x17, 0", print::print(addi, 0));
|
assert_eq!("addi x28, x17, 0", print::print(addi, 0));
|
||||||
|
assert_eq!("slli x28, x17, 0", print::print(slli, 0));
|
||||||
|
assert_eq!("slti x28, x17, 0", print::print(slti, 0));
|
||||||
|
assert_eq!("sltiu x28, x17, 0", print::print(sltiu, 0));
|
||||||
|
assert_eq!("xori x28, x17, 0", print::print(xori, 0));
|
||||||
|
assert_eq!("ori x28, x17, 0", print::print(ori, 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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user