summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:09 -0500
committerGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:09 -0500
commit6a4ea7cca9095bfc30597ed7cd1c694aaae071a2 (patch)
tree1e0d85d13ef9825385e30ebea7250f69069fea35 /src
parenteb0823c4f2666e6b3de441fa661e9e17ef908d8f (diff)
downloadgem5-6a4ea7cca9095bfc30597ed7cd1c694aaae071a2.tar.xz
ARM: Implement the enterx and leavex instructions.
These enter and leave thumbEE mode. Currently thumbEE mode behaves exactly the same as Thumb mode, but at least this will make it -look- like we're enter and leaving it. The actual behavioral changes will be implemented in future changes.
Diffstat (limited to 'src')
-rw-r--r--src/arch/arm/isa/insts/misc.isa20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/arch/arm/isa/insts/misc.isa b/src/arch/arm/isa/insts/misc.isa
index 42dea7b95..7ec18c9e9 100644
--- a/src/arch/arm/isa/insts/misc.isa
+++ b/src/arch/arm/isa/insts/misc.isa
@@ -514,4 +514,24 @@ let {{
header_output += RegRegOpDeclare.subst(mcr15Iop)
decoder_output += RegRegOpConstructor.subst(mcr15Iop)
exec_output += PredOpExecute.subst(mcr15Iop)
+
+ enterxCode = '''
+ FNPC = NPC | (1ULL << PcJBitShift) | (1ULL << PcTBitShift);
+ '''
+ enterxIop = InstObjParams("enterx", "Enterx", "PredOp",
+ { "code": enterxCode,
+ "predicate_test": predicateTest }, [])
+ header_output += BasicDeclare.subst(enterxIop)
+ decoder_output += BasicConstructor.subst(enterxIop)
+ exec_output += PredOpExecute.subst(enterxIop)
+
+ leavexCode = '''
+ FNPC = (NPC & ~(1ULL << PcJBitShift)) | (1ULL << PcTBitShift);
+ '''
+ leavexIop = InstObjParams("leavex", "Leavex", "PredOp",
+ { "code": leavexCode,
+ "predicate_test": predicateTest }, [])
+ header_output += BasicDeclare.subst(leavexIop)
+ decoder_output += BasicConstructor.subst(leavexIop)
+ exec_output += PredOpExecute.subst(leavexIop)
}};