ARM: Decode the rbit instruction.
authorGabe Black <gblack@eecs.umich.edu>
Wed, 2 Jun 2010 17:58:07 +0000 (12:58 -0500)
committerGabe Black <gblack@eecs.umich.edu>
Wed, 2 Jun 2010 17:58:07 +0000 (12:58 -0500)
src/arch/arm/isa/formats/data.isa

index 51cb4fd03454d88da4e6c76d431bedb36d642881..9dca0e8a3a753163ce85583fa3601832dae4451f 100644 (file)
@@ -283,26 +283,26 @@ def format ArmPackUnpackSatReverse() {{
             }
             break;
           case 0x7:
-            if (op2 == 0x1) {
-                return new WarnUnimplemented("rbit", machInst);
-            } else if (op2 == 0x3) {
+            {
                 const IntRegIndex rn =
                     (IntRegIndex)(uint32_t)bits(machInst, 19, 16);
                 const IntRegIndex rd =
                     (IntRegIndex)(uint32_t)bits(machInst, 15, 12);
                 const IntRegIndex rm =
                     (IntRegIndex)(uint32_t)bits(machInst, 3, 0);
-                const uint32_t rotation =
-                    (uint32_t)bits(machInst, 11, 10) << 3;
-                if (a == 0xf) {
-                    return new Uxth(machInst, rd, rotation, rm);
-                } else {
-                    return new Uxtah(machInst, rd, rn, rm, rotation);
+                if (op2 == 0x1) {
+                    return new Rbit(machInst, rd, rm);
+                } else if (op2 == 0x3) {
+                    const uint32_t rotation =
+                        (uint32_t)bits(machInst, 11, 10) << 3;
+                    if (a == 0xf) {
+                        return new Uxth(machInst, rd, rotation, rm);
+                    } else {
+                        return new Uxtah(machInst, rd, rn, rm, rotation);
+                    }
+                } else if (op2 == 0x5) {
+                    return new Revsh(machInst, rd, rm);
                 }
-            } else if (op2 == 0x5) {
-                IntRegIndex rd = (IntRegIndex)(uint32_t)bits(machInst, 15, 12);
-                IntRegIndex rm = (IntRegIndex)(uint32_t)bits(machInst, 3, 0);
-                return new Revsh(machInst, rd, rm);
             }
             break;
         }
@@ -791,7 +791,7 @@ def format Thumb32DataProcReg() {{
                       case 0x1:
                         return new Rev16(machInst, rd, rn);
                       case 0x2:
-                        return new WarnUnimplemented("rbit", machInst);
+                        return new Rbit(machInst, rd, rm);
                       case 0x3:
                         return new Revsh(machInst, rd, rn);
                     }