diff -r e8b91216491a -r 91e7fddfb206 src/arch/arm/isa/insts/str.isa --- a/src/arch/arm/isa/insts/str.isa Fri Feb 11 18:43:53 2011 -0600 +++ b/src/arch/arm/isa/insts/str.isa Fri Feb 11 18:45:17 2011 -0600 @@ -47,7 +47,8 @@ execBase = 'Store' def __init__(self, mnem, post, add, writeback, size=4, - sign=False, user=False, flavor="normal"): + sign=False, user=False, flavor="normal", + instFlags = []): super(StoreInst, self).__init__() self.name = mnem @@ -58,7 +59,7 @@ self.sign = sign self.user = user self.flavor = flavor - + self.instFlags = instFlags if self.add: self.op = " +" else: @@ -76,7 +77,7 @@ (newHeader, newDecoder, newExec) = self.fillTemplates(self.name, self.Name, codeBlobs, - self.memFlags, [], base, wbDecl) + self.memFlags, self.instFlags, base, wbDecl) header_output += newHeader decoder_output += newDecoder @@ -225,6 +226,7 @@ def __init__(self, *args, **kargs): super(StoreImmEx, self).__init__(*args, **kargs) self.codeBlobs["postacc_code"] = "Result = !writeResult;" + self.instFlags = ['IsStoreConditional'] class StoreImm(StoreImmInst, StoreSingle): decConstBase = 'LoadStoreImm' @@ -304,6 +306,7 @@ def __init__(self, *args, **kargs): super(StoreDoubleImmEx, self).__init__(*args, **kargs) self.codeBlobs["postacc_code"] = "Result = !writeResult;" + self.instFlags = ['IsStoreConditional'] class StoreDoubleImm(StoreImmInst, StoreDouble): decConstBase = 'LoadStoreDImm' diff -r e8b91216491a -r 91e7fddfb206 src/arch/arm/isa/insts/swap.isa --- a/src/arch/arm/isa/insts/swap.isa Fri Feb 11 18:43:53 2011 -0600 +++ b/src/arch/arm/isa/insts/swap.isa Fri Feb 11 18:45:17 2011 -0600 @@ -46,7 +46,7 @@ decConstBase = 'Swap' def __init__(self, name, Name, eaCode, - preAccCode, postAccCode, memFlags): + preAccCode, postAccCode, memFlags, instFlags = []): super(SwapInst, self).__init__() self.name = name self.Name = Name @@ -54,6 +54,7 @@ self.preAccCode = preAccCode self.postAccCode = postAccCode self.memFlags = memFlags + self.instFlags = instFlags def emit(self): global header_output, decoder_output, exec_output @@ -61,12 +62,10 @@ "preacc_code": self.preAccCode, "postacc_code": self.postAccCode } codeBlobs["predicate_test"] = pickPredicate(codeBlobs) - (newHeader, newDecoder, newExec) = self.fillTemplates(self.name, self.Name, codeBlobs, - self.memFlags, - ['IsStoreConditional'], + self.memFlags, self.instFlags, base = 'Swap') header_output += newHeader decoder_output += newDecoder @@ -77,12 +76,14 @@ 'Dest = cSwap((uint32_t)memData, ((CPSR)Cpsr).e);', ['Request::MEM_SWAP', 'ArmISA::TLB::AlignWord', - 'ArmISA::TLB::MustBeOne']).emit() + 'ArmISA::TLB::MustBeOne'], + ['IsStoreConditional']).emit() SwapInst('swpb', 'Swpb', 'EA = Base;', 'Mem.ub = cSwap(Op1.ub, ((CPSR)Cpsr).e);', 'Dest.ub = cSwap((uint8_t)memData, ((CPSR)Cpsr).e);', ['Request::MEM_SWAP', 'ArmISA::TLB::AlignByte', - 'ArmISA::TLB::MustBeOne']).emit() + 'ArmISA::TLB::MustBeOne'], + ['IsStoreConditional']).emit() }};