From f9541157b62ec44deff0b906757c223ca0220102 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Sun, 12 May 2024 17:02:54 +0200 Subject: Division --- emulator/hart_test.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'emulator/hart_test.c') diff --git a/emulator/hart_test.c b/emulator/hart_test.c index 1611804..0dea92a 100644 --- a/emulator/hart_test.c +++ b/emulator/hart_test.c @@ -263,6 +263,36 @@ static void test_m() execute(&hart, 0x022091b3); // mulh x3, x1, x2 assert(hart.regs[3] == 0x00000000); + + hart.regs[1] = (uint32_t)-63; + hart.regs[2] = 4; + + execute(&hart, 0x0220c1b3); // div x3, x1, x2 + assert(hart.regs[3] == (uint32_t)-15); + + execute(&hart, 0x0220d1b3); // divu x3, x1, x2 + assert(hart.regs[3] == 0x3FFFFFF0); + + execute(&hart, 0x0220e1b3); // rem x3, x1, x2 + assert(hart.regs[3] == (uint32_t)-3); + + execute(&hart, 0x0220f1b3); // remu x3, x1, x2 + assert(hart.regs[3] == 1); + + hart.regs[1] = 30; + hart.regs[2] = 0; + + execute(&hart, 0x0220c1b3); // div x3, x1, x2 + assert(hart.regs[3] == 0xFFFFFFFF); + + execute(&hart, 0x0220d1b3); // divu x3, x1, x2 + assert(hart.regs[3] == 0xFFFFFFFF); + + execute(&hart, 0x0220e1b3); // rem x3, x1, x2 + assert(hart.regs[3] == 30); + + execute(&hart, 0x0220f1b3); // remu x3, x1, x2 + assert(hart.regs[3] == 30); } int main(int argc, char* argv[]) -- cgit