ARM: Fix SRS instruction to micro-code memory operation and register update.
Previously the SRS instruction attempted to writeback in initiateAcc() which worked until a recent change, but was incorrect.
This commit is contained in:
@@ -112,8 +112,6 @@ let {{
|
||||
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 @@ let {{
|
||||
"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
|
||||
|
||||
Reference in New Issue
Block a user