diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2010-06-02 12:58:05 -0500 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2010-06-02 12:58:05 -0500 |
commit | f61bb9adb95e704ced44ea4efefa3fe6630de371 (patch) | |
tree | 7b2208903b058fd8f5421b1aae2f2bccd85db54e /src/arch/arm/isa | |
parent | a76ab8e040c6582a1d60a8c70e90ce757b347485 (diff) | |
download | gem5-f61bb9adb95e704ced44ea4efefa3fe6630de371.tar.xz |
ARM: Hook up the push/pop versions of stm/ldm in thumb.
Diffstat (limited to 'src/arch/arm/isa')
-rw-r--r-- | src/arch/arm/isa/formats/data.isa | 14 |
1 files 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: |