From 74b2508f918ea76dce361f54b714eaeb675dbc45 Mon Sep 17 00:00:00 2001
From: Recolic Keghart <root@recolic.net>
Date: Sun, 29 Dec 2019 18:01:26 +0800
Subject: [PATCH] >  Manual commit:  Finished diff test U201614531 recolic
 Linux RECOLICPC 5.4.6-arch3-1 #1 SMP PREEMPT Tue, 24 Dec 2019 04:36:53 +0000
 x86_64 GNU/Linux  18:01:25 up 23:35,  1 user,  load average: 3.32, 3.11, 2.01
 fea1bdde59a33e51ea8aace1826b8351a56a154

---
 nemu/src/monitor/diff-test/diff-test.cc | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/nemu/src/monitor/diff-test/diff-test.cc b/nemu/src/monitor/diff-test/diff-test.cc
index 2c29044..75ebdc0 100644
--- a/nemu/src/monitor/diff-test/diff-test.cc
+++ b/nemu/src/monitor/diff-test/diff-test.cc
@@ -69,7 +69,22 @@ void difftest_step(uint32_t eip) {
   ref_difftest_exec(1);
   ref_difftest_getregs(&ref_r);
 
-  // TODO: Check the registers state with the reference design.
+  // Check the registers state with the reference design.
   // Set `nemu_state` to `NEMU_ABORT` if they are not the same.
-  TODO();
+  #define RLIB_IMPL_REG_DIFF(which) (ref_r.which xor cpu.which)
+  if(
+    RLIB_IMPL_REG_DIFF(eax) or
+    RLIB_IMPL_REG_DIFF(ecx) or
+    RLIB_IMPL_REG_DIFF(edx) or
+    RLIB_IMPL_REG_DIFF(ebx) or
+    RLIB_IMPL_REG_DIFF(esp) or
+    RLIB_IMPL_REG_DIFF(ebp) or
+    RLIB_IMPL_REG_DIFF(esi) or
+    RLIB_IMPL_REG_DIFF(edi) or
+    RLIB_IMPL_REG_DIFF(eip) or
+    true
+  ) {
+    nemu_state = NEMU_ABORT;
+  }
+  #undef RLIB_IMPL_REG_DIFF
 }
-- 
GitLab