ARM: Expand the mode checking utility functions.
authorGabe Black <gblack@eecs.umich.edu>
Thu, 26 Aug 2010 00:10:41 +0000 (19:10 -0500)
committerGabe Black <gblack@eecs.umich.edu>
Thu, 26 Aug 2010 00:10:41 +0000 (19:10 -0500)
inUserMode now can take either a threadcontext or a CPSR value directly. If
given a thread context it just extracts the CPSR and calls the other version.
An inPrivelegedMode function was also implemented which just returns the
opposite of inUserMode.

src/arch/arm/utility.hh

index 076468e0d3308c7e2769f27c9b23d7b14166fe4c..65c94926e29653d3dfd21b3d3ce78e7c060de249 100644 (file)
@@ -122,10 +122,28 @@ namespace ArmISA {
 
     void initCPU(ThreadContext *tc, int cpuId);
     
+    static inline bool
+    inUserMode(CPSR cpsr)
+    {
+        return cpsr.mode == MODE_USER;
+    }
+
     static inline bool
     inUserMode(ThreadContext *tc)
     {
-        return (tc->readMiscRegNoEffect(MISCREG_CPSR) & 0x1f) == MODE_USER;
+        return inUserMode(tc->readMiscRegNoEffect(MISCREG_CPSR));
+    }
+
+    static inline bool
+    inPrivilegedMode(CPSR cpsr)
+    {
+        return !inUserMode(cpsr);
+    }
+
+    static inline bool
+    inPrivilegedMode(ThreadContext *tc)
+    {
+        return !inUserMode(tc);
     }
 
 uint64_t getArgument(ThreadContext *tc, int number, bool fp);