ARM: Move the modified_imm function from all ARM instructions to just data processing...
authorGabe Black <gblack@eecs.umich.edu>
Wed, 2 Jun 2010 17:58:02 +0000 (12:58 -0500)
committerGabe Black <gblack@eecs.umich.edu>
Wed, 2 Jun 2010 17:58:02 +0000 (12:58 -0500)
src/arch/arm/insts/pred_inst.hh
src/arch/arm/insts/static_inst.cc
src/arch/arm/insts/static_inst.hh

index 220cf6a0faecbf3adc941f4738d2d81d3fae4f60..3231894b0be41230035b435917c9a496fe976514 100644 (file)
@@ -54,6 +54,30 @@ rotate_imm(uint32_t immValue, int rotateValue)
             (immValue << (32 - (rotateValue & 31))));
 }
 
+static inline uint32_t
+modified_imm(uint8_t ctrlImm, uint8_t dataImm)
+{
+    uint32_t bigData = dataImm;
+    uint32_t bigCtrl = ctrlImm;
+    if (bigCtrl < 4) {
+        switch (bigCtrl) {
+          case 0:
+            return bigData;
+          case 1:
+            return bigData | (bigData << 16);
+          case 2:
+            return (bigData << 8) | (bigData << 24);
+          case 3:
+            return (bigData << 0) | (bigData << 8) |
+                   (bigData << 16) | (bigData << 24);
+        }
+    }
+    bigCtrl = (bigCtrl << 1) | ((bigData >> 7) & 0x1);
+    bigData |= (1 << 7);
+    return bigData << (32 - bigCtrl);
+}
+
+
 /**
  * Base class for predicated integer operations.
  */
index 027980b3c790f5f78b2e990848875afcdeaf110c..7f5f56f19c935f3eddaa24696fc02d394fdee577 100644 (file)
@@ -231,29 +231,6 @@ ArmStaticInstBase::arm_sub_overflow(int32_t result, int32_t lhs, int32_t rhs) co
     return findOverflow(32, result, lhs, ~rhs);
 }
 
-uint32_t
-ArmStaticInstBase::modified_imm(uint8_t ctrlImm, uint8_t dataImm) const
-{
-    uint32_t bigData = dataImm;
-    uint32_t bigCtrl = ctrlImm;
-    if (bigCtrl < 4) {
-        switch (bigCtrl) {
-          case 0:
-            return bigData;
-          case 1:
-            return bigData | (bigData << 16);
-          case 2:
-            return (bigData << 8) | (bigData << 24);
-          case 3:
-            return (bigData << 0) | (bigData << 8) |
-                   (bigData << 16) | (bigData << 24);
-        }
-    }
-    bigCtrl = (bigCtrl << 1) | ((bigData >> 7) & 0x1);
-    bigData |= (1 << 7);
-    return bigData << (32 - bigCtrl);
-}
-
 void
 ArmStaticInstBase::printReg(std::ostream &os, int reg) const
 {
index ec33c73a2cccfa5c38a086aa18cf57cd6e4bb7f9..99fa819b5f3a9c8ab43ce379845c94f58388968a 100644 (file)
@@ -66,8 +66,6 @@ class ArmStaticInstBase : public StaticInst
     bool arm_add_overflow(int32_t result, int32_t lhs, int32_t rhs) const;
     bool arm_sub_overflow(int32_t result, int32_t lhs, int32_t rhs) const;
 
-    uint32_t modified_imm(uint8_t ctrlImm, uint8_t dataImm) const;
-
     // Constructor
     ArmStaticInstBase(const char *mnem, ExtMachInst _machInst,
             OpClass __opClass)