summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKorey Sewell <ksewell@umich.edu>2006-02-03 03:38:27 -0500
committerKorey Sewell <ksewell@umich.edu>2006-02-03 03:38:27 -0500
commitf7a75d872b4bf94aafcfcb5f773afda75f7c3499 (patch)
treeec53a10fbc58fcb4061d770637ff9e33497f6d65
parent3d2773195c4d7ecd710ceda19612c1dc228fb1e0 (diff)
downloadgem5-f7a75d872b4bf94aafcfcb5f773afda75f7c3499.tar.xz
Checkin (Merge?) files ... Added a few new format files
arch/mips/isa/formats/fpop.format: Floating Point Formats arch/mips/isa/formats/tlb.format: TLB Ops Format arch/mips/isa/mips.isa: Name change to mips.isa --HG-- rename : arch/mips/isa_desc/bitfields.h => arch/mips/isa/bitfields.h rename : arch/mips/isa_desc/decoder.h => arch/mips/isa/decoder.h rename : arch/mips/isa_desc/formats.h => arch/mips/isa/formats.h rename : arch/mips/isa_desc/formats/basic.format => arch/mips/isa/formats/basic.format rename : arch/mips/isa_desc/formats/branch.format => arch/mips/isa/formats/branch.format rename : arch/mips/isa_desc/formats/integerop.format => arch/mips/isa/formats/integerop.format rename : arch/mips/isa_desc/formats/mem.format => arch/mips/isa/formats/mem.format rename : arch/mips/isa_desc/formats/noop.format => arch/mips/isa/formats/noop.format rename : arch/mips/isa_desc/formats/trap.format => arch/mips/isa/formats/trap.format rename : arch/mips/isa_desc/includes.h => arch/mips/isa/includes.h rename : arch/mips/isa_desc/operands.h => arch/mips/isa/operands.h extra : convert_revision : 069a24da405b613f688e693fd038ac7a30a4faed
-rw-r--r--arch/mips/isa/bitfields.h (renamed from arch/mips/isa_desc/bitfields.h)0
-rw-r--r--arch/mips/isa/decoder.h (renamed from arch/mips/isa_desc/decoder.h)0
-rw-r--r--arch/mips/isa/formats.h (renamed from arch/mips/isa_desc/formats.h)0
-rw-r--r--arch/mips/isa/formats/basic.format (renamed from arch/mips/isa_desc/formats/basic.format)0
-rw-r--r--arch/mips/isa/formats/branch.format (renamed from arch/mips/isa_desc/formats/branch.format)0
-rw-r--r--arch/mips/isa/formats/fpop.format110
-rw-r--r--arch/mips/isa/formats/integerop.format (renamed from arch/mips/isa_desc/formats/integerop.format)0
-rw-r--r--arch/mips/isa/formats/mem.format (renamed from arch/mips/isa_desc/formats/mem.format)0
-rw-r--r--arch/mips/isa/formats/noop.format (renamed from arch/mips/isa_desc/formats/noop.format)0
-rw-r--r--arch/mips/isa/formats/tlb.format53
-rw-r--r--arch/mips/isa/formats/trap.format (renamed from arch/mips/isa_desc/formats/trap.format)0
-rw-r--r--arch/mips/isa/includes.h (renamed from arch/mips/isa_desc/includes.h)0
-rw-r--r--arch/mips/isa/mips.isa52
-rw-r--r--arch/mips/isa/operands.h (renamed from arch/mips/isa_desc/operands.h)0
14 files changed, 215 insertions, 0 deletions
diff --git a/arch/mips/isa_desc/bitfields.h b/arch/mips/isa/bitfields.h
index f0d6fc8d7..f0d6fc8d7 100644
--- a/arch/mips/isa_desc/bitfields.h
+++ b/arch/mips/isa/bitfields.h
diff --git a/arch/mips/isa_desc/decoder.h b/arch/mips/isa/decoder.h
index 7e911cb45..7e911cb45 100644
--- a/arch/mips/isa_desc/decoder.h
+++ b/arch/mips/isa/decoder.h
diff --git a/arch/mips/isa_desc/formats.h b/arch/mips/isa/formats.h
index 404314c7a..404314c7a 100644
--- a/arch/mips/isa_desc/formats.h
+++ b/arch/mips/isa/formats.h
diff --git a/arch/mips/isa_desc/formats/basic.format b/arch/mips/isa/formats/basic.format
index 8fba9845a..8fba9845a 100644
--- a/arch/mips/isa_desc/formats/basic.format
+++ b/arch/mips/isa/formats/basic.format
diff --git a/arch/mips/isa_desc/formats/branch.format b/arch/mips/isa/formats/branch.format
index 5327f30e8..5327f30e8 100644
--- a/arch/mips/isa_desc/formats/branch.format
+++ b/arch/mips/isa/formats/branch.format
diff --git a/arch/mips/isa/formats/fpop.format b/arch/mips/isa/formats/fpop.format
new file mode 100644
index 000000000..a058eea19
--- /dev/null
+++ b/arch/mips/isa/formats/fpop.format
@@ -0,0 +1,110 @@
+////////////////////////////////////////////////////////////////////
+//
+// Floating Point operate instructions
+//
+
+output header {{
+ /**
+ * Base class for integer operations.
+ */
+ class FPOp : public MipsStaticInst
+ {
+ protected:
+
+ /// Constructor
+ FPOp(const char *mnem, MachInst _machInst, OpClass __opClass) : MipsStaticInst(mnem, _machInst, __opClass)
+ {
+ }
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+ };
+}};
+
+output decoder {{
+ std::string FPOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+ {
+ return "Disassembly of integer instruction\n";
+ }
+}};
+
+def template IntegerExecute {{
+ Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
+ {
+ //These are set to constants when the execute method
+ //is generated
+ bool useCc = ;
+ bool checkPriv = ;
+
+ //Attempt to execute the instruction
+ try
+ {
+ checkPriv;
+
+ %(op_decl)s;
+ %(op_rd)s;
+ %(code)s;
+ }
+ //If we have an exception for some reason,
+ //deal with it
+ catch(MipsException except)
+ {
+ //Deal with exception
+ return No_Fault;
+ }
+
+ //Write the resulting state to the execution context
+ %(op_wb)s;
+ if(useCc)
+ {
+ xc->regs.miscRegFile.ccrFields.iccFields.n = Rd & (1 << 63);
+ xc->regs.miscRegFile.ccrFields.iccFields.z = (Rd == 0);
+ xc->regs.miscRegFile.ccrFields.iccFields.v = ivValue;
+ xc->regs.miscRegFile.ccrFields.iccFields.c = icValue;
+ xc->regs.miscRegFile.ccrFields.xccFields.n = Rd & (1 << 31);
+ xc->regs.miscRegFile.ccrFields.xccFields.z = ((Rd & 0xFFFFFFFF) == 0);
+ xc->regs.miscRegFile.ccrFields.xccFields.v = xvValue;
+ xc->regs.miscRegFile.ccrFields.xccFields.c = xcValue;
+ }
+ return No_Fault;
+ }
+}};
+
+// Primary format for integer operate instructions:
+def format FPOp(code, *opt_flags) {{
+ orig_code = code
+ cblk = CodeBlock(code)
+ checkPriv = (code.find('checkPriv') != -1)
+ code.replace('checkPriv', '')
+ if checkPriv:
+ code.replace('checkPriv;', 'if(!xc->regs.miscRegFile.pstateFields.priv) throw privileged_opcode;')
+ else:
+ code.replace('checkPriv;', '')
+ for (marker, value) in (('ivValue', '0'), ('icValue', '0'),
+ ('xvValue', '0'), ('xcValue', '0')):
+ code.replace(marker, value)
+ iop = InstObjParams(name, Name, 'MipsStaticInst', cblk, opt_flags)
+ header_output = BasicDeclare.subst(iop)
+ decoder_output = BasicConstructor.subst(iop)
+ decode_block = BasicDecodeWithMnemonic.subst(iop)
+ exec_output = IntegerExecute.subst(iop)
+}};
+
+// Primary format for integer operate instructions:
+def format FPOpCc(code, icValue, ivValue, xcValue, xvValue, *opt_flags) {{
+ orig_code = code
+ cblk = CodeBlock(code)
+ checkPriv = (code.find('checkPriv') != -1)
+ code.replace('checkPriv', '')
+ if checkPriv:
+ code.replace('checkPriv;', 'if(!xc->regs.miscRegFile.pstateFields.priv) throw privileged_opcode;')
+ else:
+ code.replace('checkPriv;', '')
+ for (marker, value) in (('ivValue', ivValue), ('icValue', icValue),
+ ('xvValue', xvValue), ('xcValue', xcValue)):
+ code.replace(marker, value)
+ iop = InstObjParams(name, Name, 'MipsStaticInst', cblk, opt_flags)
+ header_output = BasicDeclare.subst(iop)
+ decoder_output = BasicConstructor.subst(iop)
+ decode_block = BasicDecodeWithMnemonic.subst(iop)
+ exec_output = IntegerExecute.subst(iop)
+}};
diff --git a/arch/mips/isa_desc/formats/integerop.format b/arch/mips/isa/formats/integerop.format
index 6fa7feed3..6fa7feed3 100644
--- a/arch/mips/isa_desc/formats/integerop.format
+++ b/arch/mips/isa/formats/integerop.format
diff --git a/arch/mips/isa_desc/formats/mem.format b/arch/mips/isa/formats/mem.format
index 5ed5237c5..5ed5237c5 100644
--- a/arch/mips/isa_desc/formats/mem.format
+++ b/arch/mips/isa/formats/mem.format
diff --git a/arch/mips/isa_desc/formats/noop.format b/arch/mips/isa/formats/noop.format
index b1ece654d..b1ece654d 100644
--- a/arch/mips/isa_desc/formats/noop.format
+++ b/arch/mips/isa/formats/noop.format
diff --git a/arch/mips/isa/formats/tlb.format b/arch/mips/isa/formats/tlb.format
new file mode 100644
index 000000000..f5e4076f2
--- /dev/null
+++ b/arch/mips/isa/formats/tlb.format
@@ -0,0 +1,53 @@
+////////////////////////////////////////////////////////////////////
+//
+// TlbOp instructions
+//
+
+output header {{
+ /**
+ * Base class for integer operations.
+ */
+ class TlbOp : public MipsStaticInst
+ {
+ protected:
+
+ /// Constructor
+ TlbOp(const char *mnem, MachInst _machInst, OpClass __opClass) : MipsStaticInst(mnem, _machInst, __opClass)
+ {
+ }
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+ };
+}};
+
+output decoder {{
+ std::string TlbOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+ {
+ return "Disassembly of integer instruction\n";
+ }
+}};
+
+def template TlbOpExecute {{
+ Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
+ {
+ //Call into the trap handler with the appropriate fault
+ return No_Fault;
+ }
+
+ //Write the resulting state to the execution context
+ %(op_wb)s;
+
+ return No_Fault;
+ }
+}};
+
+// Primary format for integer operate instructions:
+def format TlbOp(code, *opt_flags) {{
+ orig_code = code
+ cblk = CodeBlock(code)
+ iop = InstObjParams(name, Name, 'MipsStaticInst', cblk, opt_flags)
+ header_output = BasicDeclare.subst(iop)
+ decoder_output = BasicConstructor.subst(iop)
+ decode_block = BasicDecodeWithMnemonic.subst(iop)
+ exec_output = TlbOpExecute.subst(iop)
+}};
diff --git a/arch/mips/isa_desc/formats/trap.format b/arch/mips/isa/formats/trap.format
index 78f8d87b0..78f8d87b0 100644
--- a/arch/mips/isa_desc/formats/trap.format
+++ b/arch/mips/isa/formats/trap.format
diff --git a/arch/mips/isa_desc/includes.h b/arch/mips/isa/includes.h
index ff7cb7d1d..ff7cb7d1d 100644
--- a/arch/mips/isa_desc/includes.h
+++ b/arch/mips/isa/includes.h
diff --git a/arch/mips/isa/mips.isa b/arch/mips/isa/mips.isa
new file mode 100644
index 000000000..a8c71872b
--- /dev/null
+++ b/arch/mips/isa/mips.isa
@@ -0,0 +1,52 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2003-2005 The Regents of The University of Michigan
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met: redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer;
+// redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution;
+// neither the name of the copyright holders nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+##include "m5/arch/sparc/isa_desc/includes.h"
+
+////////////////////////////////////////////////////////////////////
+//
+// Namespace statement. Everything below this line will be in the
+// MipsISAInst namespace.
+//
+
+namespace MipsISA;
+
+//Include the bitfield definitions
+##include "m5/arch/mips/isa_desc/bitfields.h"
+
+//Include the operand_types and operand definitions
+##include "m5/arch/mips/isa_desc/operands.h"
+
+//Include the base class for mips instructions, and some support code
+##include "m5/arch/mips/isa_desc/base.h"
+
+//Include the definitions for the instruction formats
+##include "m5/arch/mips/isa_desc/formats.h"
+
+//Include the decoder definition
+##include "m5/arch/mips/isa_desc/decoder.h"
diff --git a/arch/mips/isa_desc/operands.h b/arch/mips/isa/operands.h
index 77de6c9c4..77de6c9c4 100644
--- a/arch/mips/isa_desc/operands.h
+++ b/arch/mips/isa/operands.h