From af91d272711632e63514d5d5866e0f60bf7974d6 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Wed, 2 Jun 2010 12:58:00 -0500 Subject: ARM: Add a base class for 32 bit thumb data processing immediate instructions. --- src/arch/arm/isa/formats/pred.isa | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/arch/arm/isa/formats/pred.isa') 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, -- cgit v1.2.3