changeset cc5e64f8423f in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=cc5e64f8423f
description:
        ARM: Add support for moving predicated false dest operands from sources.

diffstat:

 src/arch/arm/isa/insts/misc.isa         |   3 +-
 src/arch/arm/isa/templates/basic.isa    |   5 ++
 src/arch/arm/isa/templates/branch.isa   |  30 +++++++++++++++
 src/arch/arm/isa/templates/macromem.isa |  60 ++++++++++++++++++++++++++++++
 src/arch/arm/isa/templates/mem.isa      |  60 ++++++++++++++++++++++++++++++
 src/arch/arm/isa/templates/misc.isa     |  65 +++++++++++++++++++++++++++++++++
 src/arch/arm/isa/templates/mult.isa     |  10 +++++
 src/arch/arm/isa/templates/neon.isa     |  25 ++++++++++++
 src/arch/arm/isa/templates/pred.isa     |  15 +++++++
 src/arch/arm/isa/templates/vfp.isa      |  20 ++++++++++
 src/arch/arm/registers.hh               |   6 ++-
 src/cpu/o3/dyn_inst.hh                  |  12 ++++++
 src/cpu/o3/iew_impl.hh                  |   2 +
 src/cpu/o3/lsq_unit_impl.hh             |   5 ++
 14 files changed, 315 insertions(+), 3 deletions(-)

diffs (truncated from 805 to 300 lines):

diff -r 0c6613ad8f18 -r cc5e64f8423f src/arch/arm/isa/insts/misc.isa
--- a/src/arch/arm/isa/insts/misc.isa   Tue Jan 18 16:30:01 2011 -0600
+++ b/src/arch/arm/isa/insts/misc.isa   Tue Jan 18 16:30:02 2011 -0600
@@ -467,8 +467,7 @@
     exec_output += PredOpExecute.subst(usada8Iop)
 
     bkptCode = 'return new PrefetchAbort(PC, ArmFault::DebugEvent);\n'
-    bkptIop = InstObjParams("bkpt", "BkptInst", "ArmStaticInst",
-            bkptCode)
+    bkptIop = InstObjParams("bkpt", "BkptInst", "PredOp", bkptCode)
     header_output += BasicDeclare.subst(bkptIop)
     decoder_output += BasicConstructor.subst(bkptIop)
     exec_output += BasicExecute.subst(bkptIop)
diff -r 0c6613ad8f18 -r cc5e64f8423f src/arch/arm/isa/templates/basic.isa
--- a/src/arch/arm/isa/templates/basic.isa      Tue Jan 18 16:30:01 2011 -0600
+++ b/src/arch/arm/isa/templates/basic.isa      Tue Jan 18 16:30:02 2011 -0600
@@ -52,6 +52,11 @@
         inline %(class_name)s::%(class_name)s(ExtMachInst machInst)  : 
%(base_class)s("%(mnemonic)s", machInst, %(op_class)s)
         {
                 %(constructor)s;
+                if (!(condCode == COND_AL || condCode == COND_UC)) {
+                    for (int x = 0; x < _numDestRegs; x++) {
+                        _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+                    }
+                }
         }
 }};
 
diff -r 0c6613ad8f18 -r cc5e64f8423f src/arch/arm/isa/templates/branch.isa
--- a/src/arch/arm/isa/templates/branch.isa     Tue Jan 18 16:30:01 2011 -0600
+++ b/src/arch/arm/isa/templates/branch.isa     Tue Jan 18 16:30:02 2011 -0600
@@ -53,6 +53,11 @@
         : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _imm)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
     }
 }};
 
@@ -75,6 +80,11 @@
                          _imm, _condCode)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
     }
 }};
 
@@ -94,6 +104,11 @@
         : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _op1)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
     }
 }};
 
@@ -116,6 +131,11 @@
                          _op1, _condCode)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
     }
 }};
 
@@ -152,6 +172,11 @@
         : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _op1, _op2)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
     }
 }};
 
@@ -173,5 +198,10 @@
         : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _imm, _op1)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
     }
 }};
diff -r 0c6613ad8f18 -r cc5e64f8423f src/arch/arm/isa/templates/macromem.isa
--- a/src/arch/arm/isa/templates/macromem.isa   Tue Jan 18 16:30:01 2011 -0600
+++ b/src/arch/arm/isa/templates/macromem.isa   Tue Jan 18 16:30:02 2011 -0600
@@ -69,6 +69,11 @@
                          _ura, _urb, _up, _imm)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
     }
 }};
 
@@ -89,6 +94,11 @@
         {
             memAccessFlags |= extraMemFlags;
             %(constructor)s;
+            if (!(condCode == COND_AL || condCode == COND_UC)) {
+                for (int x = 0; x < _numDestRegs; x++) {
+                    _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+                }
+            }
         }
 
         %(BasicExecDeclare)s
@@ -121,6 +131,11 @@
                          _ura, _urb, _urc)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
     }
 }};
 
@@ -158,6 +173,11 @@
                            _dest, _op1, _step)
         {
             %(constructor)s;
+            if (!(condCode == COND_AL || condCode == COND_UC)) {
+                for (int x = 0; x < _numDestRegs; x++) {
+                    _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+                }
+            }
         }
 
         %(BasicExecDeclare)s
@@ -208,6 +228,11 @@
                            _dest, _op1, _step, _lane)
         {
             %(constructor)s;
+            if (!(condCode == COND_AL || condCode == COND_UC)) {
+                for (int x = 0; x < _numDestRegs; x++) {
+                    _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+                }
+            }
         }
 
         %(BasicExecDeclare)s
@@ -236,6 +261,11 @@
                          _ura, _urb)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
     }
 }};
 
@@ -264,6 +294,11 @@
                          _ura, _urb, _imm)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
     }
 }};
 
@@ -286,6 +321,11 @@
                          _ura, _urb, _urc, _shiftAmt, _shiftType)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
     }
 }};
 
@@ -317,6 +357,11 @@
                      index, up, user, writeback, load, reglist)
 {
     %(constructor)s;
+    if (!(condCode == COND_AL || condCode == COND_UC)) {
+        for (int x = 0; x < _numDestRegs; x++) {
+            _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+        }
+    }
 }
 
 }};
@@ -341,6 +386,11 @@
                      rn, vd, regs, inc, size, align, rm)
 {
     %(constructor)s;
+    if (!(condCode == COND_AL || condCode == COND_UC)) {
+        for (int x = 0; x < _numDestRegs; x++) {
+            _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+        }
+    }
 }
 }};
 
@@ -364,6 +414,11 @@
                      rn, vd, regs, inc, size, align, rm, lane)
 {
     %(constructor)s;
+    if (!(condCode == COND_AL || condCode == COND_UC)) {
+        for (int x = 0; x < _numDestRegs; x++) {
+            _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+        }
+    }
 }
 }};
 
@@ -390,6 +445,11 @@
                      vd, single, up, writeback, load, offset)
 {
     %(constructor)s;
+    if (!(condCode == COND_AL || condCode == COND_UC)) {
+        for (int x = 0; x < _numDestRegs; x++) {
+            _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+        }
+    }
 }
 
 }};
diff -r 0c6613ad8f18 -r cc5e64f8423f src/arch/arm/isa/templates/mem.isa
--- a/src/arch/arm/isa/templates/mem.isa        Tue Jan 18 16:30:01 2011 -0600
+++ b/src/arch/arm/isa/templates/mem.isa        Tue Jan 18 16:30:02 2011 -0600
@@ -913,6 +913,11 @@
                  (IntRegIndex)_base, (AddrMode)_mode, _wb)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
 #if %(use_uops)d
         assert(numMicroops >= 2);
         uops = new StaticInstPtr[numMicroops];
@@ -931,6 +936,11 @@
                  (OperatingMode)_regMode, (AddrMode)_mode, _wb)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
 #if %(use_uops)d
         assert(numMicroops >= 2);
         uops = new StaticInstPtr[numMicroops];
@@ -949,6 +959,11 @@
                  (IntRegIndex)_dest, (IntRegIndex)_op1, (IntRegIndex)_base)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
     }
 }};
 
@@ -961,6 +976,11 @@
                  (IntRegIndex)_base, _add, _imm)
     {
         %(constructor)s;
+        if (!(condCode == COND_AL || condCode == COND_UC)) {
+            for (int x = 0; x < _numDestRegs; x++) {
+                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
+            }
+        }
 #if %(use_uops)d
         assert(numMicroops >= 2);
         uops = new StaticInstPtr[numMicroops];
_______________________________________________
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to