From 358fdc2a40e8a455f508532b47e55f3252053805 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Wed, 2 Jun 2010 12:58:17 -0500 Subject: ARM: Decode to specialized conditional/unconditional versions of instructions. This is to avoid condition code based dependences from effectively serializing instructions when the instruction doesn't actually use them. --- src/arch/arm/isa/insts/data.isa | 6 +++--- src/arch/arm/isa/insts/macromem.isa | 2 +- src/arch/arm/isa/insts/mem.isa | 22 ++++++++++++++-------- src/arch/arm/isa/insts/misc.isa | 16 ++++++++-------- src/arch/arm/isa/insts/mult.isa | 2 +- 5 files changed, 27 insertions(+), 21 deletions(-) (limited to 'src/arch/arm/isa/insts') diff --git a/src/arch/arm/isa/insts/data.isa b/src/arch/arm/isa/insts/data.isa index 09019d0f4..5cb9e545b 100644 --- a/src/arch/arm/isa/insts/data.isa +++ b/src/arch/arm/isa/insts/data.isa @@ -129,7 +129,7 @@ let {{ immIopCc = InstObjParams(mnem + "s", mnem.capitalize() + suffix + "Cc", "DataImmOp", {"code" : immCode + immCcCode, - "predicate_test": predicateTest}) + "predicate_test": condPredicateTest}) def subst(iop): global header_output, decoder_output, exec_output @@ -166,7 +166,7 @@ let {{ regIopCc = InstObjParams(mnem + "s", mnem.capitalize() + suffix + "Cc", "DataRegOp", {"code" : regCode + regCcCode, - "predicate_test": predicateTest}) + "predicate_test": condPredicateTest}) def subst(iop): global header_output, decoder_output, exec_output @@ -206,7 +206,7 @@ let {{ mnem.capitalize() + suffix + "Cc", "DataRegRegOp", {"code" : regRegCode + regRegCcCode, - "predicate_test": predicateTest}) + "predicate_test": condPredicateTest}) def subst(iop): global header_output, decoder_output, exec_output diff --git a/src/arch/arm/isa/insts/macromem.isa b/src/arch/arm/isa/insts/macromem.isa index 2b42dfac8..ca2c7c6ab 100644 --- a/src/arch/arm/isa/insts/macromem.isa +++ b/src/arch/arm/isa/insts/macromem.isa @@ -77,7 +77,7 @@ let {{ {'memacc_code': microLdrRetUopCode, 'ea_code': 'EA = Rb + (up ? imm : -imm);', - 'predicate_test': predicateTest}, + 'predicate_test': condPredicateTest}, ['IsMicroop']) microStrUopCode = "Mem = cSwap(Ra.uw, ((CPSR)Cpsr).e);" diff --git a/src/arch/arm/isa/insts/mem.isa b/src/arch/arm/isa/insts/mem.isa index 51805c28e..f5631a3b7 100644 --- a/src/arch/arm/isa/insts/mem.isa +++ b/src/arch/arm/isa/insts/mem.isa @@ -97,21 +97,27 @@ let {{ + initiateAccTemplate.subst(iop) + completeAccTemplate.subst(iop)) + def pickPredicate(blobs): + for val in blobs.values(): + if re.search('(?