From 00baeb742d8ff3f735466131253bf457664ecc6b Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Wed, 2 Jun 2010 12:58:07 -0500 Subject: ARM: Decode the usad8 and usada8 instructions. --- src/arch/arm/isa/decoder/arm.isa | 5 +---- src/arch/arm/isa/formats/data.isa | 16 ++++++++++++++++ src/arch/arm/isa/formats/mult.isa | 4 ++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/arch/arm/isa/decoder/arm.isa b/src/arch/arm/isa/decoder/arm.isa index be3a8787a..fe8e1ed2e 100644 --- a/src/arch/arm/isa/decoder/arm.isa +++ b/src/arch/arm/isa/decoder/arm.isa @@ -120,10 +120,7 @@ format DataOp { 0x1: ArmPackUnpackSatReverse::armPackUnpackSatReverse(); 0x2: ArmSignedMultiplies::armSignedMultiplies(); 0x3: decode MEDIA_OPCODE { - 0x18: decode RN { - 0xf: WarnUnimpl::usada8(); - default: WarnUnimpl::usad8(); - } + 0x18: ArmUsad::armUsad(); } } } diff --git a/src/arch/arm/isa/formats/data.isa b/src/arch/arm/isa/formats/data.isa index 2efd9c18f..7679aa355 100644 --- a/src/arch/arm/isa/formats/data.isa +++ b/src/arch/arm/isa/formats/data.isa @@ -35,6 +35,22 @@ // // Authors: Gabe Black +def format ArmUsad() {{ + decode_block = ''' + { + const IntRegIndex rd = (IntRegIndex)(uint32_t)bits(machInst, 19, 16); + const IntRegIndex rn = (IntRegIndex)(uint32_t)bits(machInst, 3, 0); + const IntRegIndex rm = (IntRegIndex)(uint32_t)bits(machInst, 11, 8); + const IntRegIndex ra = (IntRegIndex)(uint32_t)bits(machInst, 15, 12); + if (ra == 0xf) { + return new Usad8(machInst, rd, rn, rm); + } else { + return new Usada8(machInst, rd, rn, rm, ra); + } + } + ''' +}}; + def format ArmDataProcReg() {{ pclr = ''' return new %(className)ssRegPclr(machInst, %(dest)s, diff --git a/src/arch/arm/isa/formats/mult.isa b/src/arch/arm/isa/formats/mult.isa index 653abefdb..bd101374a 100644 --- a/src/arch/arm/isa/formats/mult.isa +++ b/src/arch/arm/isa/formats/mult.isa @@ -267,9 +267,9 @@ def format Thumb32MulMulAccAndAbsDiff() {{ if (op2 != 0x0) { return new Unknown(machInst); } else if (ra == 0xf) { - return new WarnUnimplemented("usada8", machInst); + return new Usad8(machInst, rd, rn, rm); } else { - return new WarnUnimplemented("usad8", machInst); + return new Usada8(machInst, rd, rn, rm, ra); } } } -- cgit v1.2.3