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 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) |
138 response << ", "; 139 printDestReg(response, 0); 140 141 return response.str(); 142 } 143 |
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); |
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 |
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 |
175 if (symtab && 176 symtab->findNearestSymbol(target, symbol, symbolAddr)) { |
177 ccprintf(response, " <%s", symbol); |
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 { |
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 |
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 {{ |
211 Fault 212 %(class_name)s::execute(%(CPU_exec_context)s *xc, |
213 Trace::InstRecord *traceData) const 214 { |
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 |
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 --- |