misc: Appease gcc 5.1
authorAndreas Hansson <andreas.hansson@arm.com>
Fri, 15 May 2015 17:39:53 +0000 (13:39 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Fri, 15 May 2015 17:39:53 +0000 (13:39 -0400)
Three minor issues are resolved:

1. Apparently gcc 5.1 does not like negation of booleans followed by
   bitwise AND.

2. Somehow the compiler also gets confused and warns about
   NoopMachInst being unused (removing it causes compilation errors
   though). Most likely a compiler bug.

3. There seems to be a number of instances where loop unrolling causes
   false positives for the array-bounds check. For now, switch to
   std::array. Potentially we could disable the warning for newer gcc
   versions, but switching to std::array is probably a good move in
   any case.

src/arch/x86/insts/microop.cc
src/arch/x86/isa_traits.hh
src/cpu/base_dyn_inst.hh
src/cpu/o3/dyn_inst.hh

index 4f464927a684d71ac7a9f71a438bd3dd4afbf69b..35ee9efaa7636b71f6d12984021de22bb5baddf0 100644 (file)
@@ -55,7 +55,7 @@ namespace X86ISA
           case ConditionTests::EZF:
             return ccflags.ezf;
           case ConditionTests::SZnZF:
-            return !(!ccflags.ezf & ccflags.zf);
+            return !(!ccflags.ezf && ccflags.zf);
           case ConditionTests::MSTRZ:
             panic("This condition is not implemented!");
           case ConditionTests::STRZ:
@@ -63,7 +63,7 @@ namespace X86ISA
           case ConditionTests::MSTRC:
             panic("This condition is not implemented!");
           case ConditionTests::STRZnEZF:
-            return !ccflags.ezf & ccflags.zf;
+            return !ccflags.ezf && ccflags.zf;
                 //And no interrupts or debug traps are waiting
           case ConditionTests::OF:
             return ccflags.of;
@@ -88,7 +88,7 @@ namespace X86ISA
           case ConditionTests::NotEZF:
             return !ccflags.ezf;
           case ConditionTests::NotSZnZF:
-            return !ccflags.ezf & ccflags.zf;
+            return !ccflags.ezf && ccflags.zf;
           case ConditionTests::NotMSTRZ:
             panic("This condition is not implemented!");
           case ConditionTests::NotSTRZ:
@@ -96,7 +96,7 @@ namespace X86ISA
           case ConditionTests::NotMSTRC:
             panic("This condition is not implemented!");
           case ConditionTests::STRnZnEZF:
-            return !ccflags.ezf & !ccflags.zf;
+            return !ccflags.ezf && !ccflags.zf;
                 //And no interrupts or debug traps are waiting
           case ConditionTests::NotOF:
             return !ccflags.of;
index f4fdb59e546f4b50b78e7942d791b3dce91c44bf..6e5373ca16aa59f0348872ee9fc04b1bfa01afbb 100644 (file)
@@ -68,7 +68,7 @@ namespace X86ISA
     const bool CurThreadInfoImplemented = false;
     const int CurThreadInfoReg = -1;
 
-    const ExtMachInst NoopMachInst = {
+    const ExtMachInst NoopMachInst M5_VAR_USED = {
         0x0,                            // No legacy prefixes.
         0x0,                            // No rex prefix.
         { OneByteOpcode, 0x90 },          // One opcode byte, 0x90.
index 50b1b12ced20e57c0e699e97046802d822ed749a..5b54679c9b98b3afb6912511a6c0a3ade7053a89 100644 (file)
@@ -46,6 +46,7 @@
 #ifndef __CPU_BASE_DYN_INST_HH__
 #define __CPU_BASE_DYN_INST_HH__
 
+#include <array>
 #include <bitset>
 #include <list>
 #include <string>
@@ -258,22 +259,22 @@ class BaseDynInst : public ExecContext, public RefCounted
     /** Flattened register index of the destination registers of this
      *  instruction.
      */
-    TheISA::RegIndex _flatDestRegIdx[TheISA::MaxInstDestRegs];
+    std::array<TheISA::RegIndex, TheISA::MaxInstDestRegs> _flatDestRegIdx;
 
     /** Physical register index of the destination registers of this
      *  instruction.
      */
-    PhysRegIndex _destRegIdx[TheISA::MaxInstDestRegs];
+    std::array<PhysRegIndex, TheISA::MaxInstDestRegs> _destRegIdx;
 
     /** Physical register index of the source registers of this
      *  instruction.
      */
-    PhysRegIndex _srcRegIdx[TheISA::MaxInstSrcRegs];
+    std::array<PhysRegIndex, TheISA::MaxInstSrcRegs> _srcRegIdx;
 
     /** Physical register index of the previous producers of the
      *  architected destinations.
      */
-    PhysRegIndex _prevDestRegIdx[TheISA::MaxInstDestRegs];
+    std::array<PhysRegIndex, TheISA::MaxInstDestRegs> _prevDestRegIdx;
 
 
   public:
index 80d502f0ebc6dcace3309166876c78ae810ae190..6740c601dc7d5079ce6ec727c7edc5c3fec06fc1 100644 (file)
@@ -44,6 +44,8 @@
 #ifndef __CPU_O3_DYN_INST_HH__
 #define __CPU_O3_DYN_INST_HH__
 
+#include <array>
+
 #include "arch/isa_traits.hh"
 #include "config/the_isa.hh"
 #include "cpu/o3/cpu.hh"
@@ -108,13 +110,13 @@ class BaseO3DynInst : public BaseDynInst<Impl>
 
   protected:
     /** Values to be written to the destination misc. registers. */
-    MiscReg _destMiscRegVal[TheISA::MaxMiscDestRegs];
+    std::array<MiscReg, TheISA::MaxMiscDestRegs> _destMiscRegVal;
 
     /** Indexes of the destination misc. registers. They are needed to defer
      * the write accesses to the misc. registers until the commit stage, when
      * the instruction is out of its speculative state.
      */
-    short _destMiscRegIdx[TheISA::MaxMiscDestRegs];
+    std::array<short, TheISA::MaxMiscDestRegs> _destMiscRegIdx;
 
     /** Number of destination misc. registers. */
     uint8_t _numDestMiscRegs;