use crate::instructions::Instruction;
use crate::instructions::rv32::m::Rv32MInstruction;
use crate::instructions::test_utils::make_r_type;
use crate::registers::general_purpose::Reg;
#[test]
fn test_mul() {
let inst = make_r_type(0b0110011, 1, 0b000, 2, 3, 0b0000001);
let decoded = Rv32MInstruction::<Reg<u32>>::try_decode(inst);
assert_eq!(
decoded,
Some(Rv32MInstruction::Mul {
rd: Reg::Ra,
rs1: Reg::Sp,
rs2: Reg::Gp
})
);
}
#[test]
fn test_mulh() {
let inst = make_r_type(0b0110011, 1, 0b001, 2, 3, 0b0000001);
let decoded = Rv32MInstruction::<Reg<u32>>::try_decode(inst);
assert_eq!(
decoded,
Some(Rv32MInstruction::Mulh {
rd: Reg::Ra,
rs1: Reg::Sp,
rs2: Reg::Gp
})
);
}
#[test]
fn test_mulhsu() {
let inst = make_r_type(0b0110011, 1, 0b010, 2, 3, 0b0000001);
let decoded = Rv32MInstruction::<Reg<u32>>::try_decode(inst);
assert_eq!(
decoded,
Some(Rv32MInstruction::Mulhsu {
rd: Reg::Ra,
rs1: Reg::Sp,
rs2: Reg::Gp
})
);
}
#[test]
fn test_mulhu() {
let inst = make_r_type(0b0110011, 1, 0b011, 2, 3, 0b0000001);
let decoded = Rv32MInstruction::<Reg<u32>>::try_decode(inst);
assert_eq!(
decoded,
Some(Rv32MInstruction::Mulhu {
rd: Reg::Ra,
rs1: Reg::Sp,
rs2: Reg::Gp
})
);
}
#[test]
fn test_div() {
let inst = make_r_type(0b0110011, 1, 0b100, 2, 3, 0b0000001);
let decoded = Rv32MInstruction::<Reg<u32>>::try_decode(inst);
assert_eq!(
decoded,
Some(Rv32MInstruction::Div {
rd: Reg::Ra,
rs1: Reg::Sp,
rs2: Reg::Gp
})
);
}
#[test]
fn test_divu() {
let inst = make_r_type(0b0110011, 1, 0b101, 2, 3, 0b0000001);
let decoded = Rv32MInstruction::<Reg<u32>>::try_decode(inst);
assert_eq!(
decoded,
Some(Rv32MInstruction::Divu {
rd: Reg::Ra,
rs1: Reg::Sp,
rs2: Reg::Gp
})
);
}
#[test]
fn test_rem() {
let inst = make_r_type(0b0110011, 1, 0b110, 2, 3, 0b0000001);
let decoded = Rv32MInstruction::<Reg<u32>>::try_decode(inst);
assert_eq!(
decoded,
Some(Rv32MInstruction::Rem {
rd: Reg::Ra,
rs1: Reg::Sp,
rs2: Reg::Gp
})
);
}
#[test]
fn test_remu() {
let inst = make_r_type(0b0110011, 1, 0b111, 2, 3, 0b0000001);
let decoded = Rv32MInstruction::<Reg<u32>>::try_decode(inst);
assert_eq!(
decoded,
Some(Rv32MInstruction::Remu {
rd: Reg::Ra,
rs1: Reg::Sp,
rs2: Reg::Gp
})
);
}