qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [6125] Add SuperSPARC MMU breakpoint registers (Robert Reif


From: Blue Swirl
Subject: [Qemu-devel] [6125] Add SuperSPARC MMU breakpoint registers (Robert Reif)
Date: Tue, 23 Dec 2008 15:30:51 +0000

Revision: 6125
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6125
Author:   blueswir1
Date:     2008-12-23 15:30:50 +0000 (Tue, 23 Dec 2008)

Log Message:
-----------
Add SuperSPARC MMU breakpoint registers (Robert Reif)

Modified Paths:
--------------
    trunk/target-sparc/cpu.h
    trunk/target-sparc/op_helper.c

Modified: trunk/target-sparc/cpu.h
===================================================================
--- trunk/target-sparc/cpu.h    2008-12-23 15:08:13 UTC (rev 6124)
+++ trunk/target-sparc/cpu.h    2008-12-23 15:30:50 UTC (rev 6125)
@@ -301,6 +301,7 @@
     uint32_t mmuregs[32];
     uint64_t mxccdata[4];
     uint64_t mxccregs[8];
+    uint64_t mmubpregs[4];
     uint64_t prom_addr;
 #endif
     /* temporary float registers */

Modified: trunk/target-sparc/op_helper.c
===================================================================
--- trunk/target-sparc/op_helper.c      2008-12-23 15:08:13 UTC (rev 6124)
+++ trunk/target-sparc/op_helper.c      2008-12-23 15:30:50 UTC (rev 6125)
@@ -953,6 +953,28 @@
     case 0x39: /* data cache diagnostic register */
         ret = 0;
         break;
+    case 0x38: /* SuperSPARC MMU Breakpoint Control Registers */
+        {
+            int reg = (addr >> 8) & 3;
+
+            switch(reg) {
+            case 0: /* Breakpoint Value (Addr) */
+                ret = env->mmubpregs[reg];
+                break;
+            case 1: /* Breakpoint Mask */
+                ret = env->mmubpregs[reg];
+                break;
+            case 2: /* Breakpoint Control */
+                ret = env->mmubpregs[reg];
+                break;
+            case 3: /* Breakpoint Status */
+                ret = env->mmubpregs[reg];
+                env->mmubpregs[reg] = 0ULL;
+                break;
+            }
+            DPRINTF_MMU("read breakpoint reg[%d] 0x%016llx\n", reg, ret);
+        }
+        break;
     case 8: /* User code access, XXX */
     default:
         do_unassigned_access(addr, 0, 0, asi, size);
@@ -1283,9 +1305,30 @@
                // descriptor diagnostic
     case 0x36: /* I-cache flash clear */
     case 0x37: /* D-cache flash clear */
-    case 0x38: /* breakpoint diagnostics */
     case 0x4c: /* breakpoint action */
         break;
+    case 0x38: /* SuperSPARC MMU Breakpoint Control Registers*/
+        {
+            int reg = (addr >> 8) & 3;
+
+            switch(reg) {
+            case 0: /* Breakpoint Value (Addr) */
+                env->mmubpregs[reg] = (val & 0xfffffffffULL);
+                break;
+            case 1: /* Breakpoint Mask */
+                env->mmubpregs[reg] = (val & 0xfffffffffULL);
+                break;
+            case 2: /* Breakpoint Control */
+                env->mmubpregs[reg] = (val & 0x7fULL);
+                break;
+            case 3: /* Breakpoint Status */
+                env->mmubpregs[reg] = (val & 0xfULL);
+                break;
+            }
+            DPRINTF_MMU("write breakpoint reg[%d] 0x%016llx\n", reg,
+                        env->mmuregs[reg]);
+        }
+        break;
     case 8: /* User code access, XXX */
     case 9: /* Supervisor code access, XXX */
     default:






reply via email to

[Prev in Thread] Current Thread [Next in Thread]