trap.isa (3951:727778d649ae) trap.isa (5222:bb733a878f85)
1// -*- mode:c++ -*-
2
1// -*- mode:c++ -*-
2
3// Copyright (c) 2006 The Regents of The University of Michigan
4// All rights reserved.
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are
8// met: redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer;
10// redistributions in binary form must reproduce the above copyright
11// notice, this list of conditions and the following disclaimer in the
12// documentation and/or other materials provided with the distribution;
13// neither the name of the copyright holders nor the names of its
14// contributors may be used to endorse or promote products derived from
15// this software without specific prior written permission.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28//
29// Authors: Korey Sewell
3// Copyright .AN) 2007 MIPS Technologies, Inc. All Rights Reserved
30
4
5// This software is part of the M5 simulator.
6
7// THIS IS A LEGAL AGREEMENT. BY DOWNLOADING, USING, COPYING, CREATING
8// DERIVATIVE WORKS, AND/OR DISTRIBUTING THIS SOFTWARE YOU ARE AGREEING
9// TO THESE TERMS AND CONDITIONS.
10
11// Permission is granted to use, copy, create derivative works and
12// distribute this software and such derivative works for any purpose,
13// so long as (1) the copyright notice above, this grant of permission,
14// and the disclaimer below appear in all copies and derivative works
15// made, (2) the copyright notice above is augmented as appropriate to
16// reflect the addition of any new copyrightable work in a derivative
17// work (e.g., Copyright .AN) <Publication Year> Copyright Owner), and (3)
18// the name of MIPS Technologies, Inc. ($B!H(BMIPS$B!I(B) is not used in any
19// advertising or publicity pertaining to the use or distribution of
20// this software without specific, written prior authorization.
21
22// THIS SOFTWARE IS PROVIDED $B!H(BAS IS.$B!I(B MIPS MAKES NO WARRANTIES AND
23// DISCLAIMS ALL WARRANTIES, WHETHER EXPRESS, STATUTORY, IMPLIED OR
24// OTHERWISE, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
26// NON-INFRINGEMENT OF THIRD PARTY RIGHTS, REGARDING THIS SOFTWARE.
27// IN NO EVENT SHALL MIPS BE LIABLE FOR ANY DAMAGES, INCLUDING DIRECT,
28// INDIRECT, INCIDENTAL, CONSEQUENTIAL, SPECIAL, OR PUNITIVE DAMAGES OF
29// ANY KIND OR NATURE, ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT,
30// THIS SOFTWARE AND/OR THE USE OF THIS SOFTWARE, WHETHER SUCH LIABILITY
31// IS ASSERTED ON THE BASIS OF CONTRACT, TORT (INCLUDING NEGLIGENCE OR
32// STRICT LIABILITY), OR OTHERWISE, EVEN IF MIPS HAS BEEN WARNED OF THE
33// POSSIBILITY OF ANY SUCH LOSS OR DAMAGE IN ADVANCE.
34
35//Authors: Korey L. Sewell
36// Jaidev Patwardhan
37
31////////////////////////////////////////////////////////////////////
32//
33// Trap instructions
34//
35
36output header {{
37 /**
38 * Base class for integer operations.

--- 4 unchanged lines hidden (view full) ---

43
44 /// Constructor
45 Trap(const char *mnem, MachInst _machInst, OpClass __opClass) : MipsStaticInst(mnem, _machInst, __opClass)
46 {
47 }
48
49 std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
50 };
38////////////////////////////////////////////////////////////////////
39//
40// Trap instructions
41//
42
43output header {{
44 /**
45 * Base class for integer operations.

--- 4 unchanged lines hidden (view full) ---

50
51 /// Constructor
52 Trap(const char *mnem, MachInst _machInst, OpClass __opClass) : MipsStaticInst(mnem, _machInst, __opClass)
53 {
54 }
55
56 std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
57 };
58 class TrapImm : public MipsStaticInst
59 {
60 protected:
61
62 int16_t imm;
63
64 /// Constructor
65 TrapImm(const char *mnem, MachInst _machInst, OpClass __opClass) :
66 MipsStaticInst(mnem, _machInst, __opClass),imm(INTIMM)
67 {
68 }
69
70 std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
71
72
73 };
74
51}};
52
53output decoder {{
54 std::string Trap::generateDisassembly(Addr pc, const SymbolTable *symtab) const
55 {
56 return "Disassembly of trap instruction\n";
57 }
75}};
76
77output decoder {{
78 std::string Trap::generateDisassembly(Addr pc, const SymbolTable *symtab) const
79 {
80 return "Disassembly of trap instruction\n";
81 }
82 std::string TrapImm::generateDisassembly(Addr pc, const SymbolTable *symtab) const
83 {
84 return "Disassembly of trap instruction\n";
85 }
58}};
59
60def template TrapExecute {{
61 //Edit This Template When Traps Are Implemented
62 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
63 {
64 //Write the resulting state to the execution context
65 %(op_wb)s;
66
67 //Call into the trap handler with the appropriate fault
68 return No_Fault;
69 }
70}};
86}};
87
88def template TrapExecute {{
89 //Edit This Template When Traps Are Implemented
90 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
91 {
92 //Write the resulting state to the execution context
93 %(op_wb)s;
94
95 //Call into the trap handler with the appropriate fault
96 return No_Fault;
97 }
98}};
71
72def format Trap(code, *flags) {{
99def format Trap(code, *flags) {{
73 code = 'warn(\"'
74 code += 'Trap Exception Handler Is Currently Not Implemented.'
75 code += '\");'
100
101 code ='bool cond;\n' + code
102 code += 'if (cond) {\n'
103 code += 'fault = new TrapFault();\n};'
104
76 iop = InstObjParams(name, Name, 'MipsStaticInst', code, flags)
77 header_output = BasicDeclare.subst(iop)
78 decoder_output = BasicConstructor.subst(iop)
79 decode_block = BasicDecode.subst(iop)
80 exec_output = BasicExecute.subst(iop)
81}};
105 iop = InstObjParams(name, Name, 'MipsStaticInst', code, flags)
106 header_output = BasicDeclare.subst(iop)
107 decoder_output = BasicConstructor.subst(iop)
108 decode_block = BasicDecode.subst(iop)
109 exec_output = BasicExecute.subst(iop)
110}};
111def format TrapImm(code, *flags) {{
112
113 code ='bool cond;\n' + code
114 code += 'if (cond) {\n'
115 code += 'fault = new TrapFault();\n};'
116 iop = InstObjParams(name, Name, 'MipsStaticInst', code, flags)
117 header_output = BasicDeclare.subst(iop)
118 decoder_output = BasicConstructor.subst(iop)
119 decode_block = BasicDecode.subst(iop)
120 exec_output = BasicExecute.subst(iop)
121}};