diff options
author | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-05-12 17:02:54 +0200 |
---|---|---|
committer | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-05-12 17:02:54 +0200 |
commit | f9541157b62ec44deff0b906757c223ca0220102 (patch) | |
tree | 4a1792e3623247eb5bd0487b836dc9fa76091f6f /emulator/hart_test.c | |
parent | 8ebaea458322a2df925cf351bf6b4f300567150d (diff) |
Division
Diffstat (limited to 'emulator/hart_test.c')
-rw-r--r-- | emulator/hart_test.c | 30 |
1 files changed, 30 insertions, 0 deletions
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[])
|