1// Copyright (c) 2006-2007 The Regents of The University of Michigan
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met: redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer;
8// redistributions in binary form must reproduce the above copyright

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

122output decoder {{
123
124 template class BranchNBits<19>;
125
126 template class BranchNBits<22>;
127
128 template class BranchNBits<30>;
129
130 std::string Branch::generateDisassembly(Addr pc,
131 const SymbolTable *symtab) const
130 std::string
131 Branch::generateDisassembly(Addr pc, const SymbolTable *symtab) const
132 {
133 std::stringstream response;
134
135 printMnemonic(response, mnemonic);
136 printRegArray(response, _srcRegIdx, _numSrcRegs);
137 if(_numDestRegs && _numSrcRegs)
137 if (_numDestRegs && _numSrcRegs)
138 response << ", ";
139 printDestReg(response, 0);
140
141 return response.str();
142 }
143
144 std::string BranchImm13::generateDisassembly(Addr pc,
144 std::string
145 BranchImm13::generateDisassembly(Addr pc,
146 const SymbolTable *symtab) const
147 {
148 std::stringstream response;
149
150 printMnemonic(response, mnemonic);
151 printRegArray(response, _srcRegIdx, _numSrcRegs);
151 if(_numSrcRegs > 0)
152 if (_numSrcRegs > 0)
153 response << ", ";
154 ccprintf(response, "0x%x", imm);
155 if (_numDestRegs > 0)
156 response << ", ";
157 printDestReg(response, 0);
158
159 return response.str();
160 }
161
161 std::string BranchDisp::generateDisassembly(Addr pc,
162 std::string
163 BranchDisp::generateDisassembly(Addr pc,
164 const SymbolTable *symtab) const
165 {
166 std::stringstream response;
167 std::string symbol;
168 Addr symbolAddr;
169
170 Addr target = disp + pc;
171
172 printMnemonic(response, mnemonic);
173 ccprintf(response, "0x%x", target);
174
173 if(symtab && symtab->findNearestSymbol(target, symbol, symbolAddr))
174 {
175 if (symtab &&
176 symtab->findNearestSymbol(target, symbol, symbolAddr)) {
177 ccprintf(response, " <%s", symbol);
176 if(symbolAddr != target)
178 if (symbolAddr != target)
179 ccprintf(response, "+%d>", target - symbolAddr);
180 else
181 ccprintf(response, ">");
182 }
183
184 return response.str();
185 }
186}};
187
188def template JumpExecute {{
189 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc,
190 Trace::InstRecord *traceData) const
191 {
190 //Attempt to execute the instruction
192 // Attempt to execute the instruction
193 Fault fault = NoFault;
194
195 %(op_decl)s;
196 %(op_rd)s;
197
198 PCS = PCS;
199 %(code)s;
200
199 if(fault == NoFault)
200 {
201 //Write the resulting state to the execution context
201 if (fault == NoFault) {
202 // Write the resulting state to the execution context
203 %(op_wb)s;
204 }
205
206 return fault;
207 }
208}};
209
210def template BranchExecute {{
210 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc,
211 Fault
212 %(class_name)s::execute(%(CPU_exec_context)s *xc,
213 Trace::InstRecord *traceData) const
214 {
213 //Attempt to execute the instruction
215 // Attempt to execute the instruction
216 Fault fault = NoFault;
217
218 %(op_decl)s;
219 %(op_rd)s;
220
221 if (%(cond)s) {
222 %(code)s;
223 } else {
224 %(fail)s;
225 }
226
225 if(fault == NoFault)
226 {
227 //Write the resulting state to the execution context
227 if (fault == NoFault) {
228 // Write the resulting state to the execution context
229 %(op_wb)s;
230 }
231
232 return fault;
233 }
234}};
235
236def template BranchDecode {{

--- 114 unchanged lines hidden ---