From f61bb9adb95e704ced44ea4efefa3fe6630de371 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Wed, 2 Jun 2010 12:58:05 -0500 Subject: [PATCH] ARM: Hook up the push/pop versions of stm/ldm in thumb. --- src/arch/arm/isa/formats/data.isa | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/arch/arm/isa/formats/data.isa b/src/arch/arm/isa/formats/data.isa index f6e093b80..43bd65589 100644 --- a/src/arch/arm/isa/formats/data.isa +++ b/src/arch/arm/isa/formats/data.isa @@ -531,7 +531,12 @@ def format Thumb16Misc() {{ (IntRegIndex)(uint32_t)bits(machInst, 2, 0)); case 0x4: case 0x5: - return new WarnUnimplemented("push", machInst); + { + const uint32_t m = bits(machInst, 8); + const uint32_t regList = bits(machInst, 7, 0) | (m << 14); + return new LdmStm(machInst, INTREG_SP, false, false, false, + true, false, regList); + } case 0x6: { const uint32_t opBits = bits(machInst, 7, 5); @@ -565,7 +570,12 @@ def format Thumb16Misc() {{ (IntRegIndex)(uint32_t)bits(machInst, 2, 0)); case 0xc: case 0xd: - return new WarnUnimplemented("pop", machInst); + { + const uint32_t p = bits(machInst, 8); + const uint32_t regList = bits(machInst, 7, 0) | (p << 15); + return new LdmStm(machInst, INTREG_SP, true, true, false, + true, true, regList); + } case 0xe: return new WarnUnimplemented("bkpt", machInst); case 0xf: