changeset be6658746087 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=be6658746087
description:
        ARM: Move the remaining microops out of the decoder and into the ISA 
desc.

diffstat:

3 files changed, 31 insertions(+), 18 deletions(-)
src/arch/arm/isa/decoder.isa          |   16 ++--------------
src/arch/arm/isa/formats/macromem.isa |   27 +++++++++++++++++++++++++++
src/arch/arm/isa/formats/util.isa     |    6 ++----

diffs (92 lines):

diff -r 7f10d636910b -r be6658746087 src/arch/arm/isa/decoder.isa
--- a/src/arch/arm/isa/decoder.isa      Wed Jul 08 23:02:19 2009 -0700
+++ b/src/arch/arm/isa/decoder.isa      Wed Jul 08 23:02:19 2009 -0700
@@ -37,19 +37,8 @@
 // in the ARM ISA specification document starting with Table B.1 or 3-1
 //
 //
-decode COND_CODE default Unknown::unknown() {
-    0xf: decode COND_CODE {
-        0x1: decode OPCODE {
-            // Just a simple trick to allow us to specify our new uops here
-            0x0: PredIntOp::mvtd_uop({{ Fd.ud = ((uint64_t) Rhi << 32)|Rlo; }},
-                                        'IsMicroop');
-            0x1: PredIntOp::mvfd_uop({{ Rhi = (Fd.ud >> 32) & 0xffffffff;
-                                        Rlo = Fd.ud & 0xffffffff; }},
-                                        'IsMicroop');
-        }
-        default: Unknown::unknown(); // TODO: Ignore other NV space for now
-    }
-default: decode ENCODING {
+
+decode ENCODING default Unknown::unknown() {
 format DataOp {
     0x0: decode SEVEN_AND_FOUR {
         1: decode MISC_OPCODE {
@@ -440,5 +429,4 @@
     }
 }
 }
-}
 
diff -r 7f10d636910b -r be6658746087 src/arch/arm/isa/formats/macromem.isa
--- a/src/arch/arm/isa/formats/macromem.isa     Wed Jul 08 23:02:19 2009 -0700
+++ b/src/arch/arm/isa/formats/macromem.isa     Wed Jul 08 23:02:19 2009 -0700
@@ -130,6 +130,33 @@
 
 ////////////////////////////////////////////////////////////////////
 //
+// Moving to/from double floating point registers
+//
+
+let {{
+    microMvtdUopIop = InstObjParams('mvtd_uop', 'MicroMvtdUop',
+                                    'PredOp',
+                                    {'code': 'Fd.ud = (Rhi.ud << 32) | Rlo;',
+                                     'predicate_test': predicateTest},
+                                    ['IsMicroop'])
+
+    microMvfdUopIop = InstObjParams('mvfd_uop', 'MicroMvfdUop',
+                                    'PredOp',
+                                    {'code': '''Rhi = bits(Fd.ud, 63, 32);
+                                                Rlo = bits(Fd.ud, 31, 0);''',
+                                     'predicate_test': predicateTest},
+                                    ['IsMicroop'])
+
+    header_output = BasicDeclare.subst(microMvtdUopIop) + \
+                    BasicDeclare.subst(microMvfdUopIop)
+    decoder_output = BasicConstructor.subst(microMvtdUopIop) + \
+                     BasicConstructor.subst(microMvfdUopIop)
+    exec_output = PredOpExecute.subst(microMvtdUopIop) + \
+                  PredOpExecute.subst(microMvfdUopIop)
+}};
+
+////////////////////////////////////////////////////////////////////
+//
 // Macro Memory-format instructions
 //
 
diff -r 7f10d636910b -r be6658746087 src/arch/arm/isa/formats/util.isa
--- a/src/arch/arm/isa/formats/util.isa Wed Jul 08 23:02:19 2009 -0700
+++ b/src/arch/arm/isa/formats/util.isa Wed Jul 08 23:02:19 2009 -0700
@@ -106,18 +106,16 @@
     emit_ldfstf_uops(StaticInstPtr* microOps, int index, ExtMachInst machInst,
                      bool loadop, bool up, int32_t disp)
     {
-        MachInst newMachInst = machInst & 0xf000f000;
-
         if (loadop)
         {
             microOps[index++] = new MicroLdrUop(machInst, 19, RN, disp);
             microOps[index++] =
                 new MicroLdrUop(machInst, 18, RN, disp + (up ? 4 : -4));
-            microOps[index++] = new Mvtd_uop(newMachInst);
+            microOps[index++] = new MicroMvtdUop(machInst);
         }
         else
         {
-            microOps[index++] = new Mvfd_uop(newMachInst);
+            microOps[index++] = new MicroMvfdUop(machInst);
             microOps[index++] = new MicroStrUop(machInst, 19, RN, disp);
             microOps[index++] =
                 new MicroStrUop(machInst, 18, RN, disp + (up ? 4 : -4));
_______________________________________________
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to