ARM: Implement the enterx and leavex instructions.
authorGabe Black <gblack@eecs.umich.edu>
Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)
committerGabe Black <gblack@eecs.umich.edu>
Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)
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.

src/arch/arm/isa/insts/misc.isa

index 42dea7b95dc8c75c4feeb475e5bad125038a5666..7ec18c9e96ae26ab4f0ab2ac6173c408a5dc2721 100644 (file)
@@ -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)
 }};