summaryrefslogtreecommitdiff
path: root/src/arch/arm/isa/insts/mem.isa
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:10 -0500
committerGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:10 -0500
commita2cb503ba6d504838e0db95335b518266577d6d9 (patch)
tree85a15c976a2e4a602541e8ee44a18633e22cdce1 /src/arch/arm/isa/insts/mem.isa
parentec4cd00b1101d7436ff2019dfc9fc1c09442c9c9 (diff)
downloadgem5-a2cb503ba6d504838e0db95335b518266577d6d9.tar.xz
ARM: Implement the RFE instruction.
Diffstat (limited to 'src/arch/arm/isa/insts/mem.isa')
-rw-r--r--src/arch/arm/isa/insts/mem.isa21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/arch/arm/isa/insts/mem.isa b/src/arch/arm/isa/insts/mem.isa
index dc447cf8b..7f893bbed 100644
--- a/src/arch/arm/isa/insts/mem.isa
+++ b/src/arch/arm/isa/insts/mem.isa
@@ -38,7 +38,7 @@
// Authors: Gabe Black
let {{
- def loadStoreBaseWork(name, Name, imm, swp, codeBlobs, memFlags,
+ def loadStoreBaseWork(name, Name, imm, swp, rfe, codeBlobs, memFlags,
instFlags, double, base = 'Memory',
execTemplateBase = ''):
# Make sure flags are in lists (convert to lists if not).
@@ -66,6 +66,9 @@ let {{
if swp:
declareTemplate = SwapDeclare
constructTemplate = SwapConstructor
+ elif rfe:
+ declareTemplate = RfeDeclare
+ constructTemplate = RfeConstructor
elif imm:
if double:
declareTemplate = LoadStoreDImmDeclare
@@ -94,8 +97,16 @@ let {{
codeBlobs = { "ea_code": eaCode,
"memacc_code": accCode,
"predicate_test": predicateTest }
- return loadStoreBaseWork(name, Name, imm, False, codeBlobs, memFlags,
- instFlags, double, base, execTemplateBase)
+ return loadStoreBaseWork(name, Name, imm, False, False, codeBlobs,
+ memFlags, instFlags, double, base,
+ execTemplateBase)
+
+ def RfeBase(name, Name, eaCode, accCode, memFlags, instFlags):
+ codeBlobs = { "ea_code": eaCode,
+ "memacc_code": accCode,
+ "predicate_test": predicateTest }
+ return loadStoreBaseWork(name, Name, False, False, True, codeBlobs,
+ memFlags, instFlags, False, 'RfeOp', 'Load')
def SwapBase(name, Name, eaCode, preAccCode, postAccCode, memFlags,
instFlags):
@@ -103,8 +114,8 @@ let {{
"preacc_code": preAccCode,
"postacc_code": postAccCode,
"predicate_test": predicateTest }
- return loadStoreBaseWork(name, Name, False, True, codeBlobs, memFlags,
- instFlags, False, 'Swap', 'Swap')
+ return loadStoreBaseWork(name, Name, False, True, False, codeBlobs,
+ memFlags, instFlags, False, 'Swap', 'Swap')
def memClassName(base, post, add, writeback, \
size=4, sign=False, user=False):