arm: Use a static_assert to test that miscRegName[] is complete
authorAndreas Sandberg <Andreas.Sandberg@arm.com>
Tue, 25 Sep 2012 16:49:40 +0000 (11:49 -0500)
committerAndreas Sandberg <Andreas.Sandberg@arm.com>
Tue, 25 Sep 2012 16:49:40 +0000 (11:49 -0500)
Instead of statically defining miscRegName to contain NUM_MISCREGS
elements, let the compiler determine the length of the array. This
allows us to use a static_assert to test that all registers are listed
in the name vector.

src/arch/arm/miscregs.hh

index 7af4ec6058606b67b23c7d47a378b817e2ee05d7..2dceab70c05669b706706e1bdf0d86951965ceb4 100644 (file)
@@ -43,6 +43,7 @@
 #define __ARCH_ARM_MISCREGS_HH__
 
 #include "base/bitunion.hh"
+#include "base/compiler.hh"
 
 namespace ArmISA
 {
@@ -250,7 +251,7 @@ namespace ArmISA
                                unsigned crm, unsigned opc2);
 
 
-    const char * const miscRegName[NUM_MISCREGS] = {
+    const char * const miscRegName[] = {
         "cpsr", "cpsr_q", "spsr", "spsr_fiq", "spsr_irq", "spsr_svc",
         "spsr_mon", "spsr_und", "spsr_abt",
         "fpsr", "fpsid", "fpscr", "fpscr_qc", "fpscr_exc", "fpexc",
@@ -325,6 +326,9 @@ namespace ArmISA
         "nop", "raz"
     };
 
+    static_assert(sizeof(miscRegName) / sizeof(*miscRegName) == NUM_MISCREGS,
+                  "The miscRegName array and NUM_MISCREGS are inconsistent.");
+
     BitUnion32(CPSR)
         Bitfield<31,30> nz;
         Bitfield<29> c;