From: Gabe Black Date: Wed, 2 Jun 2010 17:58:07 +0000 (-0500) Subject: ARM: Decode the rbit instruction. X-Git-Tag: stable_2012_02_02~1243 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=00320a53ab67e5f7b7a22b67f6b14ade31348c50;p=gem5.git ARM: Decode the rbit instruction. --- diff --git a/src/arch/arm/isa/formats/data.isa b/src/arch/arm/isa/formats/data.isa index 51cb4fd03..9dca0e8a3 100644 --- a/src/arch/arm/isa/formats/data.isa +++ b/src/arch/arm/isa/formats/data.isa @@ -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); }