From 38ce95db3b7cf471dcd3c12b784877c4dc238d6f Mon Sep 17 00:00:00 2001 From: Korey Sewell Date: Mon, 20 Feb 2006 01:49:16 -0500 Subject: Support for All Jump Instructions ... Redo format for Branches and Jumps ( Must update NNPC not NPC ) Now all branches and jumps look like they auto-generate correctly from isa_parser.py!!! arch/mips/isa/decoder.isa: Support for All Jump Instructions .. arch/mips/isa/formats/branch.isa: Redo format for Branches and Jumps ( Must update NNPC not NPC ) arch/mips/isa/formats/util.isa: define clear_exe_inst_hazards for later use --HG-- extra : convert_revision : 63618ed12ee6ed94c47d29619cc1cab2cbaf5cda --- arch/mips/isa/formats/branch.isa | 40 +++++++++++++++++++++++++--------------- arch/mips/isa/formats/util.isa | 10 ++++++++++ 2 files changed, 35 insertions(+), 15 deletions(-) (limited to 'arch/mips/isa/formats') diff --git a/arch/mips/isa/formats/branch.isa b/arch/mips/isa/formats/branch.isa index 1f7a6f330..fc207fd3f 100644 --- a/arch/mips/isa/formats/branch.isa +++ b/arch/mips/isa/formats/branch.isa @@ -250,20 +250,22 @@ output decoder {{ }}; def format Branch(code,*flags) {{ - code = 'bool cond;\n\t' + code + '\n' - #Add Link Code if Link instruction strlen = len(name) if name[strlen-2:] == 'al': - code += 'R31 = NPC + 4;\n' + code += 'R31 = NNPC;\n' - # condition code - code += 'if (cond) {' - code += ' NPC = NPC + disp;\n' - code += ' NNPC = NNPC + disp;\n } \n' + #Condition code + code = 'bool cond;\n' + code + code += 'if (cond) {\n' + #code += '//NPC=NPC: just placeholder to force parser to writeback NPC\n' + #code += ' NPC = NPC; \n' + code += ' NNPC = NPC + disp;\n' + code += '} \n' iop = InstObjParams(name, Name, 'Branch', CodeBlock(code), ('IsDirectControl', 'IsCondControl')) + header_output = BasicDeclare.subst(iop) decoder_output = BasicConstructor.subst(iop) decode_block = BasicDecode.subst(iop) @@ -272,30 +274,38 @@ def format Branch(code,*flags) {{ def format BranchLikely(code,*flags) {{ - code = 'bool cond;\n\t\t\t' + code - #Add Link Code if Link instruction strlen = len(name) if name[strlen-3:] == 'all': - code += 'R31 = NPC + 4;\n' + code += 'R31 = NNPC;\n' - #condition code + #Condition code + code = 'bool cond;\n' + code code += 'if (cond) {' - code += ' NPC = NPC + disp;\n' - code += ' NNPC = NNPC + disp;\n } \n' + #code += '//NPC=NPC: just placeholder to force parser to writeback NPC\n' + #code += 'NPC = NPC; \n' + code += 'NNPC = NPC + disp;\n' + code += '} \n' iop = InstObjParams(name, Name, 'Branch', CodeBlock(code), ('IsDirectControl', 'IsCondControl','IsCondDelaySlot')) + header_output = BasicDeclare.subst(iop) decoder_output = BasicConstructor.subst(iop) decode_block = BasicDecode.subst(iop) exec_output = BasicExecute.subst(iop) }}; -def format Unconditional(code,*flags) {{ - iop = InstObjParams(name, Name, 'Jump', CodeBlock(code), +def format Jump(code,*flags) {{ + #Add Link Code if Link instruction + strlen = len(name) + if strlen >= 3 and name[2:3] == 'al': + code = 'R31 = NNPC;\n' + code + + iop = InstObjParams(name, Name, 'Jump', CodeBlock(code),\ ('IsIndirectControl', 'IsUncondControl')) + header_output = BasicDeclare.subst(iop) decoder_output = BasicConstructor.subst(iop) decode_block = BasicDecode.subst(iop) diff --git a/arch/mips/isa/formats/util.isa b/arch/mips/isa/formats/util.isa index c6dae6783..1eff92269 100644 --- a/arch/mips/isa/formats/util.isa +++ b/arch/mips/isa/formats/util.isa @@ -24,3 +24,13 @@ def UncondCtrlBase(name, Name, base_class, npc_expr, flags): return (header_output, decoder_output, JumpOrBranchDecode.subst(nolink_iop), exec_output) }}; + +output exec {{ + + /// CLEAR ALL CPU INST/EXE HAZARDS + inline void + clear_exe_inst_hazards() + { + //CODE HERE + } +} -- cgit v1.2.3