diff -r 32b13936bb3f -r e1cd439ad5e2 src/arch/arm/isa/insts/str.isa --- a/src/arch/arm/isa/insts/str.isa Thu Nov 11 18:01:21 2010 -0600 +++ b/src/arch/arm/isa/insts/str.isa Thu Nov 11 18:14:55 2010 -0600 @@ -112,8 +112,6 @@ Mem.ud = (uint64_t)cSwap(LR.uw, cpsr.e) | ((uint64_t)cSwap(Spsr.uw, cpsr.e) << 32); ''' - if self.writeback: - accCode += "SpMode = SpMode + %s;\n" % wbDiff global header_output, decoder_output, exec_output @@ -122,11 +120,18 @@ "postacc_code": "" } codeBlobs["predicate_test"] = pickPredicate(codeBlobs) + wbDecl = None + if self.writeback: + wbDecl = '''MicroAddiUop(machInst, + intRegInMode((OperatingMode)regMode, INTREG_SP), + intRegInMode((OperatingMode)regMode, INTREG_SP), + %d);''' % wbDiff + (newHeader, newDecoder, newExec) = self.fillTemplates(self.name, self.Name, codeBlobs, ["ArmISA::TLB::AlignWord", "ArmISA::TLB::MustBeOne"], [], - base = 'SrsOp') + 'SrsOp', wbDecl) header_output += newHeader decoder_output += newDecoder