Deleted Added
sdiff udiff text old ( 9959:ad4564da49b5 ) new ( 10037:5cac77888310 )
full compact
1/*
2 * Copyright (c) 2010-2012 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

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

31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 *
37 * Authors: Gabe Black
38 * Ali Saidi
39 */
40
41#include "arch/arm/isa.hh"
42#include "arch/arm/miscregs.hh"
43#include "base/misc.hh"
44
45namespace ArmISA
46{
47
48MiscRegIndex
49decodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
50{
51 switch(crn) {
52 case 0:
53 switch (opc2) {
54 case 0:
55 switch (crm) {
56 case 0:
57 return MISCREG_DBGDIDR;
58 case 1:
59 return MISCREG_DBGDSCR_INT;
60 default:
61 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
62 crn, opc1, crm, opc2);
63 return NUM_MISCREGS;
64 }
65 default:
66 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
67 crn, opc1, crm, opc2);
68 return NUM_MISCREGS;
69 }
70 case 1:
71 switch (opc1) {
72 case 6:
73 switch (crm) {
74 case 0:
75 switch (opc2) {
76 case 0:
77 return MISCREG_TEEHBR;
78 default:
79 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
80 crn, opc1, crm, opc2);
81 return NUM_MISCREGS;
82 }
83 default:
84 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
85 crn, opc1, crm, opc2);
86 return NUM_MISCREGS;
87 }
88 default:
89 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
90 crn, opc1, crm, opc2);
91 return NUM_MISCREGS;
92 }
93 default:
94 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
95 crn, opc1, crm, opc2);
96 return NUM_MISCREGS;
97 }
98
99}
100
101MiscRegIndex
102decodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
103{
104 switch (crn) {
105 case 0:
106 switch (opc1) {
107 case 0:
108 switch (crm) {
109 case 0:
110 switch (opc2) {
111 case 1:
112 return MISCREG_CTR;
113 case 2:
114 return MISCREG_TCMTR;
115 case 3:
116 return MISCREG_TLBTR;
117 case 5:
118 return MISCREG_MPIDR;
119 default:
120 return MISCREG_MIDR;
121 }
122 break;
123 case 1:
124 switch (opc2) {
125 case 0:
126 return MISCREG_ID_PFR0;

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

175 }
176 }
177 break;
178 case 2:
179 if (crm == 0 && opc2 == 0) {
180 return MISCREG_CSSELR;
181 }
182 break;
183 }
184 break;
185 case 1:
186 if (opc1 == 0) {
187 if (crm == 0) {
188 switch (opc2) {
189 case 0:
190 return MISCREG_SCTLR;

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

198 case 0:
199 return MISCREG_SCR;
200 case 1:
201 return MISCREG_SDER;
202 case 2:
203 return MISCREG_NSACR;
204 }
205 }
206 }
207 break;
208 case 2:
209 if (opc1 == 0 && crm == 0) {
210 switch (opc2) {
211 case 0:
212 return MISCREG_TTBR0;
213 case 1:
214 return MISCREG_TTBR1;
215 case 2:
216 return MISCREG_TTBCR;
217 }
218 }
219 break;
220 case 3:
221 if (opc1 == 0 && crm == 0 && opc2 == 0) {
222 return MISCREG_DACR;
223 }
224 break;
225 case 5:

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

232 }
233 } else if (crm == 1) {
234 if (opc2 == 0) {
235 return MISCREG_ADFSR;
236 } else if (opc2 == 1) {
237 return MISCREG_AIFSR;
238 }
239 }
240 }
241 break;
242 case 6:
243 if (opc1 == 0 && crm == 0) {
244 switch (opc2) {
245 case 0:
246 return MISCREG_DFAR;
247 case 2:
248 return MISCREG_IFAR;
249 }
250 }
251 break;
252 case 7:
253 if (opc1 == 0) {
254 switch (crm) {
255 case 0:
256 if (opc2 == 4) {
257 return MISCREG_NOP;

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

289 return MISCREG_DCIMVAC;
290 } else if (opc2 == 2) {
291 return MISCREG_DCISW;
292 }
293 break;
294 case 8:
295 switch (opc2) {
296 case 0:
297 return MISCREG_V2PCWPR;
298 case 1:
299 return MISCREG_V2PCWPW;
300 case 2:
301 return MISCREG_V2PCWUR;
302 case 3:
303 return MISCREG_V2PCWUW;
304 case 4:
305 return MISCREG_V2POWPR;
306 case 5:
307 return MISCREG_V2POWPW;
308 case 6:
309 return MISCREG_V2POWUR;
310 case 7:
311 return MISCREG_V2POWUW;
312 }
313 break;
314 case 10:
315 switch (opc2) {
316 case 1:
317 return MISCREG_DCCMVAC;
318 case 2:
319 return MISCREG_MCCSW;
320 case 4:
321 return MISCREG_CP15DSB;
322 case 5:
323 return MISCREG_CP15DMB;
324 }
325 break;
326 case 11:
327 if (opc2 == 1) {

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

336 case 14:
337 if (opc2 == 1) {
338 return MISCREG_DCCIMVAC;
339 } else if (opc2 == 2) {
340 return MISCREG_DCCISW;
341 }
342 break;
343 }
344 }
345 break;
346 case 8:
347 if (opc1 == 0) {
348 switch (crm) {
349 case 3:
350 switch (opc2) {
351 case 0:

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

386 return MISCREG_TLBIMVA;
387 case 2:
388 return MISCREG_TLBIASID;
389 case 3:
390 return MISCREG_TLBIMVAA;
391 }
392 break;
393 }
394 }
395 break;
396 case 9:
397 if (opc1 == 0) {
398 switch (crm) {
399 case 12:
400 switch (opc2) {
401 case 0:

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

416 return MISCREG_PMCEID1;
417 }
418 break;
419 case 13:
420 switch (opc2) {
421 case 0:
422 return MISCREG_PMCCNTR;
423 case 1:
424 return MISCREG_PMC_OTHER;
425 case 2:
426 return MISCREG_PMXEVCNTR;
427 }
428 break;
429 case 14:
430 switch (opc2) {
431 case 0:
432 return MISCREG_PMUSERENR;
433 case 1:
434 return MISCREG_PMINTENSET;
435 case 2:
436 return MISCREG_PMINTENCLR;
437 }
438 break;
439 }
440 } else if (opc1 == 1) {
441 switch (crm) {
442 case 0:
443 switch (opc2) {
444 case 2: // L2CTLR, L2 Control Register
445 return MISCREG_L2CTLR;
446 default:
447 warn("Uknown miscregs: crn:%d crm:%d opc1:%d opc2:%d\n",
448 crn,crm, opc1,opc2);
449 break;
450 }
451 break;
452 default:
453 return MISCREG_L2LATENCY;
454 }
455 }
456 //Reserved for Branch Predictor, Cache and TCM operations
457 break;
458 case 10:
459 if (opc1 == 0) {
460 // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
461 if (crm == 2) { // TEX Remap Registers
462 if (opc2 == 0) {
463 return MISCREG_PRRR;
464 } else if (opc2 == 1) {
465 return MISCREG_NMRR;
466 }
467 }
468 }
469 break;
470 case 11:
471 if (opc1 <=7) {
472 switch (crm) {
473 case 0:
474 case 1:
475 case 2:

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

493 } else if (opc2 == 1) {
494 return MISCREG_MVBAR;
495 }
496 } else if (crm == 1) {
497 if (opc2 == 0) {
498 return MISCREG_ISR;
499 }
500 }
501 }
502 break;
503 case 13:
504 if (opc1 == 0) {
505 if (crm == 0) {
506 switch (opc2) {
507 case 0:
508 return MISCREG_FCEIDR;
509 case 1:
510 return MISCREG_CONTEXTIDR;
511 case 2:
512 return MISCREG_TPIDRURW;
513 case 3:
514 return MISCREG_TPIDRURO;
515 case 4:
516 return MISCREG_TPIDRPRW;
517 }
518 }
519 }
520 break;
521 case 15:
522 // Implementation defined
523 return MISCREG_CRN15;
524 }
525 // Unrecognized register
526 return NUM_MISCREGS;
527}
528
529}