From: Gabe Black Date: Wed, 2 Jun 2010 17:58:09 +0000 (-0500) Subject: ARM: Implement the enterx and leavex instructions. X-Git-Tag: stable_2012_02_02~1210 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6a4ea7cca9095bfc30597ed7cd1c694aaae071a2;p=gem5.git 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. --- 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) }};