Deleted Added
sdiff udiff text old ( 11793:ef606668d247 ) new ( 12104:edd63f9c6184 )
full compact
1/*
2 * Copyright (c) 2010, 2012-2013 ARM Limited
3 * Copyright (c) 2013 Advanced Micro Devices, Inc.
4 * All rights reserved
5 *
6 * The license below extends only to copyright in the software and shall
7 * not be construed as granting a license to any other intellectual
8 * property including but not limited to intellectual property relating

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

42
43#include "cpu/reg_class.hh"
44
45std::string
46MrsOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
47{
48 std::stringstream ss;
49 printMnemonic(ss);
50 printReg(ss, dest);
51 ss << ", ";
52 bool foundPsr = false;
53 for (unsigned i = 0; i < numSrcRegs(); i++) {
54 RegIndex idx = srcRegIdx(i);
55 RegIndex rel_idx;
56 if (regIdxToClass(idx, &rel_idx) != MiscRegClass) {
57 continue;
58 }
59 if (rel_idx == MISCREG_CPSR) {
60 ss << "cpsr";
61 foundPsr = true;
62 break;
63 }
64 if (rel_idx == MISCREG_SPSR) {
65 ss << "spsr";
66 foundPsr = true;
67 break;
68 }
69 }
70 if (!foundPsr) {
71 ss << "????";
72 }
73 return ss.str();
74}
75
76void
77MsrBase::printMsrBase(std::ostream &os) const
78{
79 printMnemonic(os);
80 bool apsr = false;
81 bool foundPsr = false;
82 for (unsigned i = 0; i < numDestRegs(); i++) {
83 int idx = destRegIdx(i);
84 if (idx < Misc_Reg_Base) {
85 continue;
86 }
87 idx -= Misc_Reg_Base;
88 if (idx == MISCREG_CPSR) {
89 os << "cpsr_";
90 foundPsr = true;
91 break;
92 }
93 if (idx == MISCREG_SPSR) {
94 if (bits(byteMask, 1, 0)) {
95 os << "spsr_";
96 } else {
97 os << "apsr_";
98 apsr = true;
99 }
100 foundPsr = true;
101 break;

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

137}
138
139std::string
140MsrRegOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
141{
142 std::stringstream ss;
143 printMsrBase(ss);
144 ss << ", ";
145 printReg(ss, op1);
146 return ss.str();
147}
148
149std::string
150MrrcOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
151{
152 std::stringstream ss;
153 printMnemonic(ss);
154 printReg(ss, dest);
155 ss << ", ";
156 printReg(ss, dest2);
157 ss << ", ";
158 printReg(ss, op1);
159 return ss.str();
160}
161
162std::string
163McrrOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
164{
165 std::stringstream ss;
166 printMnemonic(ss);
167 printReg(ss, dest);
168 ss << ", ";
169 printReg(ss, op1);
170 ss << ", ";
171 printReg(ss, op2);
172 return ss.str();
173}
174
175std::string
176ImmOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
177{
178 std::stringstream ss;
179 printMnemonic(ss);
180 ccprintf(ss, "#%d", imm);
181 return ss.str();
182}
183
184std::string
185RegImmOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
186{
187 std::stringstream ss;
188 printMnemonic(ss);
189 printReg(ss, dest);
190 ccprintf(ss, ", #%d", imm);
191 return ss.str();
192}
193
194std::string
195RegRegOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
196{
197 std::stringstream ss;
198 printMnemonic(ss);
199 printReg(ss, dest);
200 ss << ", ";
201 printReg(ss, op1);
202 return ss.str();
203}
204
205std::string
206RegRegRegImmOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
207{
208 std::stringstream ss;
209 printMnemonic(ss);
210 printReg(ss, dest);
211 ss << ", ";
212 printReg(ss, op1);
213 ss << ", ";
214 printReg(ss, op2);
215 ccprintf(ss, ", #%d", imm);
216 return ss.str();
217}
218
219std::string
220RegRegRegRegOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
221{
222 std::stringstream ss;
223 printMnemonic(ss);
224 printReg(ss, dest);
225 ss << ", ";
226 printReg(ss, op1);
227 ss << ", ";
228 printReg(ss, op2);
229 ss << ", ";
230 printReg(ss, op3);
231 return ss.str();
232}
233
234std::string
235RegRegRegOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
236{
237 std::stringstream ss;
238 printMnemonic(ss);
239 printReg(ss, dest);
240 ss << ", ";
241 printReg(ss, op1);
242 ss << ", ";
243 printReg(ss, op2);
244 return ss.str();
245}
246
247std::string
248RegRegImmOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
249{
250 std::stringstream ss;
251 printMnemonic(ss);
252 printReg(ss, dest);
253 ss << ", ";
254 printReg(ss, op1);
255 ccprintf(ss, ", #%d", imm);
256 return ss.str();
257}
258
259std::string
260MiscRegRegImmOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
261{
262 std::stringstream ss;
263 printMnemonic(ss);
264 printReg(ss, dest);
265 ss << ", ";
266 printReg(ss, op1);
267 ccprintf(ss, ", #%d", imm);
268 return ss.str();
269}
270
271std::string
272RegMiscRegImmOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
273{
274 std::stringstream ss;
275 printMnemonic(ss);
276 printReg(ss, dest);
277 ss << ", ";
278 printReg(ss, op1);
279 ccprintf(ss, ", #%d", imm);
280 return ss.str();
281}
282
283std::string
284RegImmImmOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
285{
286 std::stringstream ss;
287 printMnemonic(ss);
288 printReg(ss, dest);
289 ccprintf(ss, ", #%d, #%d", imm1, imm2);
290 return ss.str();
291}
292
293std::string
294RegRegImmImmOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
295{
296 std::stringstream ss;
297 printMnemonic(ss);
298 printReg(ss, dest);
299 ss << ", ";
300 printReg(ss, op1);
301 ccprintf(ss, ", #%d, #%d", imm1, imm2);
302 return ss.str();
303}
304
305std::string
306RegImmRegOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
307{
308 std::stringstream ss;
309 printMnemonic(ss);
310 printReg(ss, dest);
311 ccprintf(ss, ", #%d, ", imm);
312 printReg(ss, op1);
313 return ss.str();
314}
315
316std::string
317RegImmRegShiftOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
318{
319 std::stringstream ss;
320 printMnemonic(ss);
321 printReg(ss, dest);
322 ccprintf(ss, ", #%d, ", imm);
323 printShiftOperand(ss, op1, true, shiftAmt, INTREG_ZERO, shiftType);
324 printReg(ss, op1);
325 return ss.str();
326}
327
328std::string
329UnknownOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
330{
331 return csprintf("%-10s (inst %#08x)", "unknown", machInst);
332}