From: Gabe Black Date: Wed, 2 Jun 2010 17:58:08 +0000 (-0500) Subject: ARM: Implement the bfc and bfi instructions. X-Git-Tag: stable_2012_02_02~1236 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a37b6b6bce6b0aa04de270b756d624fd9c3afad2;p=gem5.git ARM: Implement the bfc and bfi instructions. --- diff --git a/src/arch/arm/isa/insts/misc.isa b/src/arch/arm/isa/insts/misc.isa index e3c3132d9..d6ab47f5d 100644 --- a/src/arch/arm/isa/insts/misc.isa +++ b/src/arch/arm/isa/insts/misc.isa @@ -479,4 +479,25 @@ let {{ header_output += RegRegImmImmOpDeclare.subst(sbfxIop) decoder_output += RegRegImmImmOpConstructor.subst(sbfxIop) exec_output += PredOpExecute.subst(sbfxIop) + + bfcCode = ''' + Dest = Op1 & ~(mask(imm2 - imm1 + 1) << imm1); + ''' + bfcIop = InstObjParams("bfc", "Bfc", "RegRegImmImmOp", + { "code": bfcCode, + "predicate_test": predicateTest }, []) + header_output += RegRegImmImmOpDeclare.subst(bfcIop) + decoder_output += RegRegImmImmOpConstructor.subst(bfcIop) + exec_output += PredOpExecute.subst(bfcIop) + + bfiCode = ''' + uint32_t bitMask = (mask(imm2 - imm1 + 1) << imm1); + Dest = ((Op1 << imm1) & bitMask) | (Dest & ~bitMask); + ''' + bfiIop = InstObjParams("bfi", "Bfi", "RegRegImmImmOp", + { "code": bfiCode, + "predicate_test": predicateTest }, []) + header_output += RegRegImmImmOpDeclare.subst(bfiIop) + decoder_output += RegRegImmImmOpConstructor.subst(bfiIop) + exec_output += PredOpExecute.subst(bfiIop) }};