diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2010-06-02 12:58:01 -0500 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2010-06-02 12:58:01 -0500 |
commit | a86491fbf27588356b8a4463d967b6e6358d83cb (patch) | |
tree | 10227ba2d9df13c0ad7467c2ef1eae6728fa6d76 /src | |
parent | dc8af1b211f6619788dd78009a2025171041275b (diff) | |
download | gem5-a86491fbf27588356b8a4463d967b6e6358d83cb.tar.xz |
ARM: Decode 16 bit thumb PC relative memory instructions.
Diffstat (limited to 'src')
-rw-r--r-- | src/arch/arm/isa/decoder/thumb.isa | 2 | ||||
-rw-r--r-- | src/arch/arm/isa/formats/mem.isa | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/src/arch/arm/isa/decoder/thumb.isa b/src/arch/arm/isa/decoder/thumb.isa index 580232b1d..56dbcfe28 100644 --- a/src/arch/arm/isa/decoder/thumb.isa +++ b/src/arch/arm/isa/decoder/thumb.isa @@ -89,7 +89,7 @@ 0xc, 0xd: WarnUnimpl::bx(); 0xe, 0xf: WarnUnimpl::blx(); //register } - 0x2, 0x3: WarnUnimpl::ldr(); + 0x2, 0x3: Thumb16MemLit::thumb16MemLit(); default: Thumb16MemReg::thumb16MemReg(); } 0x3, 0x4: Thumb16MemImm::thumb16MemImm(); diff --git a/src/arch/arm/isa/formats/mem.isa b/src/arch/arm/isa/formats/mem.isa index edefb3325..2935890c2 100644 --- a/src/arch/arm/isa/formats/mem.isa +++ b/src/arch/arm/isa/formats/mem.isa @@ -450,6 +450,16 @@ def format Thumb16MemImm() {{ decode_block = decode % classNames }}; +def format Thumb16MemLit() {{ + decode_block = ''' + { + const uint32_t rt = bits(machInst, 10, 8); + const uint32_t imm8 = bits(machInst, 7, 0); + return new %s(machInst, rt, INTREG_PC, true, imm8 << 2); + } + ''' % loadImmClassName(False, True, False) +}}; + def format ArmLoadMemory(memacc_code, ea_code = {{ EA = Rn + disp; }}, mem_flags = [], inst_flags = []) {{ ea_code = ArmGenericCodeSubs(ea_code) |