summaryrefslogtreecommitdiff
path: root/src/arch/arm/isa/formats/pred.isa
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:00 -0500
committerGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:00 -0500
commitaf91d272711632e63514d5d5866e0f60bf7974d6 (patch)
tree3d4aeaa74255395c50d1b5853d467f6cc05dfac5 /src/arch/arm/isa/formats/pred.isa
parentbfe1a194ddf371a9520023765ade1070d89232d5 (diff)
downloadgem5-af91d272711632e63514d5d5866e0f60bf7974d6.tar.xz
ARM: Add a base class for 32 bit thumb data processing immediate instructions.
Diffstat (limited to 'src/arch/arm/isa/formats/pred.isa')
-rw-r--r--src/arch/arm/isa/formats/pred.isa32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/arch/arm/isa/formats/pred.isa b/src/arch/arm/isa/formats/pred.isa
index 0d6ee32f7..03eb3a492 100644
--- a/src/arch/arm/isa/formats/pred.isa
+++ b/src/arch/arm/isa/formats/pred.isa
@@ -1,5 +1,17 @@
// -*- mode:c++ -*-
+// Copyright (c) 2010 ARM Limited
+// All rights reserved
+//
+// The license below extends only to copyright in the software and shall
+// not be construed as granting a license to any other intellectual
+// property including but not limited to intellectual property relating
+// to a hardware implementation of the functionality of the software
+// licensed hereunder. You may use the software subject to the license
+// terms below provided that you ensure that this notice is replicated
+// unmodified and in its entirety in all distributions of the software,
+// modified or unmodified, in source code or in binary form.
+//
// Copyright (c) 2007-2008 The Florida State University
// All rights reserved.
//
@@ -165,6 +177,9 @@ let {{
elif flagtype == "rsb":
icValue = 'findCarry(32, resTemp, rotated_imm, ~Rn)'
ivValue = 'findOverflow(32, resTemp, rotated_imm, ~Rn)'
+ elif flagtype == "modImm":
+ icValue = 'rotated_carry'
+ ivValue = 'CondCodes<28:>'
else:
icValue = '(rotate ? rotated_carry:CondCodes<29:>)'
ivValue = 'CondCodes<28:>'
@@ -223,6 +238,23 @@ def format DataImmOp(code, flagtype = logic) {{
decode_block = DataImmDecode.subst(iop)
}};
+def format DataModImmOp(code, flagtype = modImm) {{
+ code += "resTemp = resTemp;"
+ iop = InstObjParams(name, Name + "ModImm", 'PredModImmOp',
+ {"code": code,
+ "predicate_test": predicateTest})
+ ccIop = InstObjParams(name, Name + "ModImmCc", 'PredModImmOp',
+ {"code": code + getImmCcCode(flagtype),
+ "predicate_test": predicateTest})
+ header_output = BasicDeclare.subst(iop) + \
+ BasicDeclare.subst(ccIop)
+ decoder_output = BasicConstructor.subst(iop) + \
+ BasicConstructor.subst(ccIop)
+ exec_output = PredOpExecute.subst(iop) + \
+ PredOpExecute.subst(ccIop)
+ decode_block = DataImmDecode.subst(iop)
+}};
+
def format PredOp(code, *opt_flags) {{
iop = InstObjParams(name, Name, 'PredOp',
{"code": code,