arm: Use a const ThreadContext * and readMiscRegNoEffect in places.
authorGabe Black <gabeblack@google.com>
Wed, 26 Feb 2020 12:46:11 +0000 (04:46 -0800)
committerGabe Black <gabeblack@google.com>
Thu, 27 Feb 2020 13:02:57 +0000 (13:02 +0000)
Unlike readMiscReg, readMiscRegNoEffect won't have any read related
side effects and so can be used on a const ThreadContext. Also, using
a const ThreadContext * in a few functions which don't actually intend
to change state makes them usable in more situations.

Change-Id: I4fe538ba1158b25f512d3cccd779e12f6c91da6c
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/25944
Reviewed-by: Chun-Chen TK Hsu <chunchenhsu@google.com>
Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/arch/arm/utility.cc
src/arch/arm/utility.hh

index facb7f86fb95dcc713d9e7965bf13bc8102614c5..e1dffafabcc73d160e1c14f19d1e2ca62173c242 100644 (file)
@@ -397,17 +397,17 @@ ELUsingAArch32K(ThreadContext *tc, ExceptionLevel el)
 }
 
 bool
-isBigEndian64(ThreadContext *tc)
+isBigEndian64(const ThreadContext *tc)
 {
     switch (currEL(tc)) {
       case EL3:
-        return ((SCTLR) tc->readMiscReg(MISCREG_SCTLR_EL3)).ee;
+        return ((SCTLR) tc->readMiscRegNoEffect(MISCREG_SCTLR_EL3)).ee;
       case EL2:
-        return ((SCTLR) tc->readMiscReg(MISCREG_SCTLR_EL2)).ee;
+        return ((SCTLR) tc->readMiscRegNoEffect(MISCREG_SCTLR_EL2)).ee;
       case EL1:
-        return ((SCTLR) tc->readMiscReg(MISCREG_SCTLR_EL1)).ee;
+        return ((SCTLR) tc->readMiscRegNoEffect(MISCREG_SCTLR_EL1)).ee;
       case EL0:
-        return ((SCTLR) tc->readMiscReg(MISCREG_SCTLR_EL1)).e0e;
+        return ((SCTLR) tc->readMiscRegNoEffect(MISCREG_SCTLR_EL1)).e0e;
       default:
         panic("Invalid exception level");
         break;
index f16c0b5f3a34f11a55e622a5340664de373102a9..4636d1768b20d4b4ee5e85870a9ec78914962c64 100644 (file)
@@ -131,14 +131,14 @@ inPrivilegedMode(ThreadContext *tc)
 bool inAArch64(ThreadContext *tc);
 
 static inline OperatingMode
-currOpMode(ThreadContext *tc)
+currOpMode(const ThreadContext *tc)
 {
-    CPSR cpsr = tc->readMiscReg(MISCREG_CPSR);
+    CPSR cpsr = tc->readMiscRegNoEffect(MISCREG_CPSR);
     return (OperatingMode) (uint8_t) cpsr.mode;
 }
 
 static inline ExceptionLevel
-currEL(ThreadContext *tc)
+currEL(const ThreadContext *tc)
 {
     return opModeToEL(currOpMode(tc));
 }
@@ -182,7 +182,7 @@ bool ELIs64(ThreadContext *tc, ExceptionLevel el);
  */
 bool ELIsInHost(ThreadContext *tc, ExceptionLevel el);
 
-bool isBigEndian64(ThreadContext *tc);
+bool isBigEndian64(const ThreadContext *tc);
 
 /**
  * badMode is checking if the execution mode provided as an argument is
@@ -368,7 +368,7 @@ int decodePhysAddrRange64(uint8_t pa_enc);
  */
 uint8_t encodePhysAddrRange64(int pa_size);
 
-inline ByteOrder byteOrder(ThreadContext *tc)
+inline ByteOrder byteOrder(const ThreadContext *tc)
 {
     return isBigEndian64(tc) ? BigEndianByteOrder : LittleEndianByteOrder;
 };