miscregs.cc revision 8902
17259Sgblack@eecs.umich.edu/*
28868SMatt.Horsnell@arm.com * Copyright (c) 2010-2012 ARM Limited
37259Sgblack@eecs.umich.edu * All rights reserved
47259Sgblack@eecs.umich.edu *
57259Sgblack@eecs.umich.edu * The license below extends only to copyright in the software and shall
67259Sgblack@eecs.umich.edu * not be construed as granting a license to any other intellectual
77259Sgblack@eecs.umich.edu * property including but not limited to intellectual property relating
87259Sgblack@eecs.umich.edu * to a hardware implementation of the functionality of the software
97259Sgblack@eecs.umich.edu * licensed hereunder.  You may use the software subject to the license
107259Sgblack@eecs.umich.edu * terms below provided that you ensure that this notice is replicated
117259Sgblack@eecs.umich.edu * unmodified and in its entirety in all distributions of the software,
127259Sgblack@eecs.umich.edu * modified or unmodified, in source code or in binary form.
137259Sgblack@eecs.umich.edu *
147259Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
157259Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
167259Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
177259Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
187259Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
197259Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
207259Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
217259Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
227259Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
237259Sgblack@eecs.umich.edu * this software without specific prior written permission.
247259Sgblack@eecs.umich.edu *
257259Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
267259Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
277259Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
287259Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
297259Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
307259Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
317259Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
327259Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
337259Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
347259Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
357259Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
367259Sgblack@eecs.umich.edu *
377259Sgblack@eecs.umich.edu * Authors: Gabe Black
387405SAli.Saidi@ARM.com *          Ali Saidi
397259Sgblack@eecs.umich.edu */
407259Sgblack@eecs.umich.edu
417405SAli.Saidi@ARM.com#include "arch/arm/isa.hh"
427259Sgblack@eecs.umich.edu#include "arch/arm/miscregs.hh"
437404SAli.Saidi@ARM.com#include "base/misc.hh"
447259Sgblack@eecs.umich.edu
457259Sgblack@eecs.umich.edunamespace ArmISA
467259Sgblack@eecs.umich.edu{
477259Sgblack@eecs.umich.edu
487259Sgblack@eecs.umich.eduMiscRegIndex
498868SMatt.Horsnell@arm.comdecodeCP14Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
508868SMatt.Horsnell@arm.com{
518868SMatt.Horsnell@arm.com    switch(crn) {
528868SMatt.Horsnell@arm.com      case 0:
538868SMatt.Horsnell@arm.com        switch (opc2) {
548868SMatt.Horsnell@arm.com          case 0:
558868SMatt.Horsnell@arm.com            switch (crm) {
568868SMatt.Horsnell@arm.com              case 0:
578868SMatt.Horsnell@arm.com                return MISCREG_DBGDIDR;
588868SMatt.Horsnell@arm.com              case 1:
598868SMatt.Horsnell@arm.com                return MISCREG_DBGDSCR_INT;
608868SMatt.Horsnell@arm.com              default:
618868SMatt.Horsnell@arm.com                warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
628868SMatt.Horsnell@arm.com                     crn, opc1, crm, opc2);
638868SMatt.Horsnell@arm.com                return NUM_MISCREGS;
648868SMatt.Horsnell@arm.com            }
658868SMatt.Horsnell@arm.com          default:
668868SMatt.Horsnell@arm.com                warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
678868SMatt.Horsnell@arm.com                     crn, opc1, crm, opc2);
688868SMatt.Horsnell@arm.com                return NUM_MISCREGS;
698868SMatt.Horsnell@arm.com        }
708868SMatt.Horsnell@arm.com      default:
718868SMatt.Horsnell@arm.com        warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
728868SMatt.Horsnell@arm.com             crn, opc1, crm, opc2);
738868SMatt.Horsnell@arm.com        return NUM_MISCREGS;
748868SMatt.Horsnell@arm.com    }
758868SMatt.Horsnell@arm.com
768868SMatt.Horsnell@arm.com}
778868SMatt.Horsnell@arm.com
788868SMatt.Horsnell@arm.comMiscRegIndex
797259Sgblack@eecs.umich.edudecodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
807259Sgblack@eecs.umich.edu{
817259Sgblack@eecs.umich.edu    switch (crn) {
827259Sgblack@eecs.umich.edu      case 0:
837259Sgblack@eecs.umich.edu        switch (opc1) {
847259Sgblack@eecs.umich.edu          case 0:
857259Sgblack@eecs.umich.edu            switch (crm) {
867259Sgblack@eecs.umich.edu              case 0:
877259Sgblack@eecs.umich.edu                switch (opc2) {
887259Sgblack@eecs.umich.edu                  case 1:
897259Sgblack@eecs.umich.edu                    return MISCREG_CTR;
907259Sgblack@eecs.umich.edu                  case 2:
917259Sgblack@eecs.umich.edu                    return MISCREG_TCMTR;
927351Sgblack@eecs.umich.edu                  case 3:
937351Sgblack@eecs.umich.edu                    return MISCREG_TLBTR;
947259Sgblack@eecs.umich.edu                  case 5:
957259Sgblack@eecs.umich.edu                    return MISCREG_MPIDR;
967259Sgblack@eecs.umich.edu                  default:
977259Sgblack@eecs.umich.edu                    return MISCREG_MIDR;
987259Sgblack@eecs.umich.edu                }
997259Sgblack@eecs.umich.edu                break;
1007259Sgblack@eecs.umich.edu              case 1:
1017259Sgblack@eecs.umich.edu                switch (opc2) {
1027259Sgblack@eecs.umich.edu                  case 0:
1037259Sgblack@eecs.umich.edu                    return MISCREG_ID_PFR0;
1047259Sgblack@eecs.umich.edu                  case 1:
1057259Sgblack@eecs.umich.edu                    return MISCREG_ID_PFR1;
1067259Sgblack@eecs.umich.edu                  case 2:
1077259Sgblack@eecs.umich.edu                    return MISCREG_ID_DFR0;
1087259Sgblack@eecs.umich.edu                  case 3:
1097259Sgblack@eecs.umich.edu                    return MISCREG_ID_AFR0;
1107259Sgblack@eecs.umich.edu                  case 4:
1117259Sgblack@eecs.umich.edu                    return MISCREG_ID_MMFR0;
1127259Sgblack@eecs.umich.edu                  case 5:
1137259Sgblack@eecs.umich.edu                    return MISCREG_ID_MMFR1;
1147259Sgblack@eecs.umich.edu                  case 6:
1157259Sgblack@eecs.umich.edu                    return MISCREG_ID_MMFR2;
1167259Sgblack@eecs.umich.edu                  case 7:
1177259Sgblack@eecs.umich.edu                    return MISCREG_ID_MMFR3;
1187259Sgblack@eecs.umich.edu                }
1197259Sgblack@eecs.umich.edu                break;
1207259Sgblack@eecs.umich.edu              case 2:
1217259Sgblack@eecs.umich.edu                switch (opc2) {
1227259Sgblack@eecs.umich.edu                  case 0:
1237259Sgblack@eecs.umich.edu                    return MISCREG_ID_ISAR0;
1247259Sgblack@eecs.umich.edu                  case 1:
1257259Sgblack@eecs.umich.edu                    return MISCREG_ID_ISAR1;
1267259Sgblack@eecs.umich.edu                  case 2:
1277259Sgblack@eecs.umich.edu                    return MISCREG_ID_ISAR2;
1287259Sgblack@eecs.umich.edu                  case 3:
1297259Sgblack@eecs.umich.edu                    return MISCREG_ID_ISAR3;
1307259Sgblack@eecs.umich.edu                  case 4:
1317259Sgblack@eecs.umich.edu                    return MISCREG_ID_ISAR4;
1327259Sgblack@eecs.umich.edu                  case 5:
1337259Sgblack@eecs.umich.edu                    return MISCREG_ID_ISAR5;
1347259Sgblack@eecs.umich.edu                  case 6:
1357259Sgblack@eecs.umich.edu                  case 7:
1367259Sgblack@eecs.umich.edu                    return MISCREG_RAZ; // read as zero
1377259Sgblack@eecs.umich.edu                }
1387259Sgblack@eecs.umich.edu                break;
1397259Sgblack@eecs.umich.edu              default:
1407259Sgblack@eecs.umich.edu                return MISCREG_RAZ; // read as zero
1417259Sgblack@eecs.umich.edu            }
1427259Sgblack@eecs.umich.edu            break;
1437259Sgblack@eecs.umich.edu          case 1:
1447259Sgblack@eecs.umich.edu            if (crm == 0) {
1457259Sgblack@eecs.umich.edu                switch (opc2) {
1467259Sgblack@eecs.umich.edu                  case 0:
1477259Sgblack@eecs.umich.edu                    return MISCREG_CCSIDR;
1487259Sgblack@eecs.umich.edu                  case 1:
1497259Sgblack@eecs.umich.edu                    return MISCREG_CLIDR;
1507259Sgblack@eecs.umich.edu                  case 7:
1517259Sgblack@eecs.umich.edu                    return MISCREG_AIDR;
1527259Sgblack@eecs.umich.edu                }
1537259Sgblack@eecs.umich.edu            }
1547259Sgblack@eecs.umich.edu            break;
1557259Sgblack@eecs.umich.edu          case 2:
1567259Sgblack@eecs.umich.edu            if (crm == 0 && opc2 == 0) {
1577259Sgblack@eecs.umich.edu                return MISCREG_CSSELR;
1587259Sgblack@eecs.umich.edu            }
1597259Sgblack@eecs.umich.edu            break;
1607259Sgblack@eecs.umich.edu        }
1617259Sgblack@eecs.umich.edu        break;
1627259Sgblack@eecs.umich.edu      case 1:
1637351Sgblack@eecs.umich.edu        if (opc1 == 0) {
1647351Sgblack@eecs.umich.edu            if (crm == 0) {
1657351Sgblack@eecs.umich.edu                switch (opc2) {
1667351Sgblack@eecs.umich.edu                  case 0:
1677351Sgblack@eecs.umich.edu                    return MISCREG_SCTLR;
1687351Sgblack@eecs.umich.edu                  case 1:
1697351Sgblack@eecs.umich.edu                    return MISCREG_ACTLR;
1707351Sgblack@eecs.umich.edu                  case 0x2:
1717351Sgblack@eecs.umich.edu                    return MISCREG_CPACR;
1727351Sgblack@eecs.umich.edu                }
1737351Sgblack@eecs.umich.edu            } else if (crm == 1) {
1747351Sgblack@eecs.umich.edu                switch (opc2) {
1757351Sgblack@eecs.umich.edu                  case 0:
1767351Sgblack@eecs.umich.edu                    return MISCREG_SCR;
1777351Sgblack@eecs.umich.edu                  case 1:
1787351Sgblack@eecs.umich.edu                    return MISCREG_SDER;
1797351Sgblack@eecs.umich.edu                  case 2:
1807351Sgblack@eecs.umich.edu                    return MISCREG_NSACR;
1817351Sgblack@eecs.umich.edu                }
1827351Sgblack@eecs.umich.edu            }
1837351Sgblack@eecs.umich.edu        }
1847351Sgblack@eecs.umich.edu        break;
1857351Sgblack@eecs.umich.edu      case 2:
1867406SAli.Saidi@ARM.com        if (opc1 == 0 && crm == 0) {
1877259Sgblack@eecs.umich.edu            switch (opc2) {
1887259Sgblack@eecs.umich.edu              case 0:
1897351Sgblack@eecs.umich.edu                return MISCREG_TTBR0;
1907259Sgblack@eecs.umich.edu              case 1:
1917351Sgblack@eecs.umich.edu                return MISCREG_TTBR1;
1927351Sgblack@eecs.umich.edu              case 2:
1937351Sgblack@eecs.umich.edu                return MISCREG_TTBCR;
1947259Sgblack@eecs.umich.edu            }
1957259Sgblack@eecs.umich.edu        }
1967259Sgblack@eecs.umich.edu        break;
1977351Sgblack@eecs.umich.edu      case 3:
1987351Sgblack@eecs.umich.edu        if (opc1 == 0 && crm == 0 && opc2 == 0) {
1997351Sgblack@eecs.umich.edu            return MISCREG_DACR;
2007351Sgblack@eecs.umich.edu        }
2017351Sgblack@eecs.umich.edu        break;
2027259Sgblack@eecs.umich.edu      case 5:
2037259Sgblack@eecs.umich.edu        if (opc1 == 0) {
2047259Sgblack@eecs.umich.edu            if (crm == 0) {
2057259Sgblack@eecs.umich.edu                if (opc2 == 0) {
2067259Sgblack@eecs.umich.edu                    return MISCREG_DFSR;
2077259Sgblack@eecs.umich.edu                } else if (opc2 == 1) {
2087259Sgblack@eecs.umich.edu                    return MISCREG_IFSR;
2097259Sgblack@eecs.umich.edu                }
2107259Sgblack@eecs.umich.edu            } else if (crm == 1) {
2117259Sgblack@eecs.umich.edu                if (opc2 == 0) {
2127259Sgblack@eecs.umich.edu                    return MISCREG_ADFSR;
2137259Sgblack@eecs.umich.edu                } else if (opc2 == 1) {
2147259Sgblack@eecs.umich.edu                    return MISCREG_AIFSR;
2157259Sgblack@eecs.umich.edu                }
2167259Sgblack@eecs.umich.edu            }
2177259Sgblack@eecs.umich.edu        }
2187259Sgblack@eecs.umich.edu        break;
2197259Sgblack@eecs.umich.edu      case 6:
2207351Sgblack@eecs.umich.edu        if (opc1 == 0 && crm == 0) {
2217351Sgblack@eecs.umich.edu            switch (opc2) {
2227259Sgblack@eecs.umich.edu              case 0:
2237351Sgblack@eecs.umich.edu                return MISCREG_DFAR;
2247259Sgblack@eecs.umich.edu              case 2:
2257351Sgblack@eecs.umich.edu                return MISCREG_IFAR;
2267259Sgblack@eecs.umich.edu            }
2277259Sgblack@eecs.umich.edu        }
2287259Sgblack@eecs.umich.edu        break;
2297259Sgblack@eecs.umich.edu      case 7:
2307259Sgblack@eecs.umich.edu        if (opc1 == 0) {
2317259Sgblack@eecs.umich.edu            switch (crm) {
2327259Sgblack@eecs.umich.edu              case 0:
2337259Sgblack@eecs.umich.edu                if (opc2 == 4) {
2347259Sgblack@eecs.umich.edu                    return MISCREG_NOP;
2357259Sgblack@eecs.umich.edu                }
2367259Sgblack@eecs.umich.edu                break;
2377259Sgblack@eecs.umich.edu              case 1:
2387259Sgblack@eecs.umich.edu                switch (opc2) {
2397259Sgblack@eecs.umich.edu                  case 0:
2407259Sgblack@eecs.umich.edu                    return MISCREG_ICIALLUIS;
2417259Sgblack@eecs.umich.edu                  case 6:
2427259Sgblack@eecs.umich.edu                    return MISCREG_BPIALLIS;
2437259Sgblack@eecs.umich.edu                }
2447259Sgblack@eecs.umich.edu                break;
2457351Sgblack@eecs.umich.edu              case 4:
2467351Sgblack@eecs.umich.edu                if (opc2 == 0) {
2477351Sgblack@eecs.umich.edu                    return MISCREG_PAR;
2487351Sgblack@eecs.umich.edu                }
2497351Sgblack@eecs.umich.edu                break;
2507259Sgblack@eecs.umich.edu              case 5:
2517259Sgblack@eecs.umich.edu                switch (opc2) {
2527259Sgblack@eecs.umich.edu                  case 0:
2537259Sgblack@eecs.umich.edu                    return MISCREG_ICIALLU;
2547259Sgblack@eecs.umich.edu                  case 1:
2557259Sgblack@eecs.umich.edu                    return MISCREG_ICIMVAU;
2567259Sgblack@eecs.umich.edu                  case 4:
2577259Sgblack@eecs.umich.edu                    return MISCREG_CP15ISB;
2587259Sgblack@eecs.umich.edu                  case 6:
2597259Sgblack@eecs.umich.edu                    return MISCREG_BPIALL;
2607259Sgblack@eecs.umich.edu                  case 7:
2617259Sgblack@eecs.umich.edu                    return MISCREG_BPIMVA;
2627259Sgblack@eecs.umich.edu                }
2637259Sgblack@eecs.umich.edu                break;
2647259Sgblack@eecs.umich.edu              case 6:
2657259Sgblack@eecs.umich.edu                if (opc2 == 1) {
2667259Sgblack@eecs.umich.edu                    return MISCREG_DCIMVAC;
2677259Sgblack@eecs.umich.edu                } else if (opc2 == 2) {
2687259Sgblack@eecs.umich.edu                    return MISCREG_DCISW;
2697259Sgblack@eecs.umich.edu                }
2707259Sgblack@eecs.umich.edu                break;
2717351Sgblack@eecs.umich.edu              case 8:
2727351Sgblack@eecs.umich.edu                switch (opc2) {
2737351Sgblack@eecs.umich.edu                  case 0:
2747351Sgblack@eecs.umich.edu                    return MISCREG_V2PCWPR;
2757351Sgblack@eecs.umich.edu                  case 1:
2767351Sgblack@eecs.umich.edu                    return MISCREG_V2PCWPW;
2777351Sgblack@eecs.umich.edu                  case 2:
2787351Sgblack@eecs.umich.edu                    return MISCREG_V2PCWUR;
2797351Sgblack@eecs.umich.edu                  case 3:
2807351Sgblack@eecs.umich.edu                    return MISCREG_V2PCWUW;
2817351Sgblack@eecs.umich.edu                  case 4:
2827351Sgblack@eecs.umich.edu                    return MISCREG_V2POWPR;
2837351Sgblack@eecs.umich.edu                  case 5:
2847351Sgblack@eecs.umich.edu                    return MISCREG_V2POWPW;
2857351Sgblack@eecs.umich.edu                  case 6:
2867351Sgblack@eecs.umich.edu                    return MISCREG_V2POWUR;
2877351Sgblack@eecs.umich.edu                  case 7:
2887351Sgblack@eecs.umich.edu                    return MISCREG_V2POWUW;
2897351Sgblack@eecs.umich.edu                }
2907351Sgblack@eecs.umich.edu                break;
2917259Sgblack@eecs.umich.edu              case 10:
2927259Sgblack@eecs.umich.edu                switch (opc2) {
2937259Sgblack@eecs.umich.edu                  case 1:
2947259Sgblack@eecs.umich.edu                    return MISCREG_DCCMVAC;
2957259Sgblack@eecs.umich.edu                  case 2:
2967259Sgblack@eecs.umich.edu                    return MISCREG_MCCSW;
2977259Sgblack@eecs.umich.edu                  case 4:
2987259Sgblack@eecs.umich.edu                    return MISCREG_CP15DSB;
2997259Sgblack@eecs.umich.edu                  case 5:
3007259Sgblack@eecs.umich.edu                    return MISCREG_CP15DMB;
3017259Sgblack@eecs.umich.edu                }
3027259Sgblack@eecs.umich.edu                break;
3037259Sgblack@eecs.umich.edu              case 11:
3047259Sgblack@eecs.umich.edu                if (opc2 == 1) {
3057259Sgblack@eecs.umich.edu                    return MISCREG_DCCMVAU;
3067259Sgblack@eecs.umich.edu                }
3077259Sgblack@eecs.umich.edu                break;
3087259Sgblack@eecs.umich.edu              case 13:
3097259Sgblack@eecs.umich.edu                if (opc2 == 1) {
3107259Sgblack@eecs.umich.edu                    return MISCREG_NOP;
3117259Sgblack@eecs.umich.edu                }
3127259Sgblack@eecs.umich.edu                break;
3137259Sgblack@eecs.umich.edu              case 14:
3147259Sgblack@eecs.umich.edu                if (opc2 == 1) {
3157259Sgblack@eecs.umich.edu                    return MISCREG_DCCIMVAC;
3167259Sgblack@eecs.umich.edu                } else if (opc2 == 2) {
3177259Sgblack@eecs.umich.edu                    return MISCREG_DCCISW;
3187259Sgblack@eecs.umich.edu                }
3197259Sgblack@eecs.umich.edu                break;
3207259Sgblack@eecs.umich.edu            }
3217259Sgblack@eecs.umich.edu        }
3227259Sgblack@eecs.umich.edu        break;
3237351Sgblack@eecs.umich.edu      case 8:
3247351Sgblack@eecs.umich.edu        if (opc1 == 0) {
3257351Sgblack@eecs.umich.edu            switch (crm) {
3267351Sgblack@eecs.umich.edu              case 3:
3277351Sgblack@eecs.umich.edu                switch (opc2) {
3287351Sgblack@eecs.umich.edu                  case 0:
3297351Sgblack@eecs.umich.edu                    return MISCREG_TLBIALLIS;
3307351Sgblack@eecs.umich.edu                  case 1:
3317351Sgblack@eecs.umich.edu                    return MISCREG_TLBIMVAIS;
3327351Sgblack@eecs.umich.edu                  case 2:
3337351Sgblack@eecs.umich.edu                    return MISCREG_TLBIASIDIS;
3347351Sgblack@eecs.umich.edu                  case 3:
3357351Sgblack@eecs.umich.edu                    return MISCREG_TLBIMVAAIS;
3367351Sgblack@eecs.umich.edu                }
3377351Sgblack@eecs.umich.edu                break;
3387351Sgblack@eecs.umich.edu              case 5:
3397351Sgblack@eecs.umich.edu                switch (opc2) {
3407351Sgblack@eecs.umich.edu                  case 0:
3417351Sgblack@eecs.umich.edu                    return MISCREG_ITLBIALL;
3427351Sgblack@eecs.umich.edu                  case 1:
3437351Sgblack@eecs.umich.edu                    return MISCREG_ITLBIMVA;
3447351Sgblack@eecs.umich.edu                  case 2:
3457351Sgblack@eecs.umich.edu                    return MISCREG_ITLBIASID;
3467351Sgblack@eecs.umich.edu                }
3477351Sgblack@eecs.umich.edu                break;
3487351Sgblack@eecs.umich.edu              case 6:
3497351Sgblack@eecs.umich.edu                switch (opc2) {
3507351Sgblack@eecs.umich.edu                  case 0:
3517351Sgblack@eecs.umich.edu                    return MISCREG_DTLBIALL;
3527351Sgblack@eecs.umich.edu                  case 1:
3537351Sgblack@eecs.umich.edu                    return MISCREG_DTLBIMVA;
3547351Sgblack@eecs.umich.edu                  case 2:
3557351Sgblack@eecs.umich.edu                    return MISCREG_DTLBIASID;
3567351Sgblack@eecs.umich.edu                }
3577351Sgblack@eecs.umich.edu                break;
3587351Sgblack@eecs.umich.edu              case 7:
3597351Sgblack@eecs.umich.edu                switch (opc2) {
3607351Sgblack@eecs.umich.edu                  case 0:
3617351Sgblack@eecs.umich.edu                    return MISCREG_TLBIALL;
3627351Sgblack@eecs.umich.edu                  case 1:
3637351Sgblack@eecs.umich.edu                    return MISCREG_TLBIMVA;
3647351Sgblack@eecs.umich.edu                  case 2:
3657351Sgblack@eecs.umich.edu                    return MISCREG_TLBIASID;
3667351Sgblack@eecs.umich.edu                  case 3:
3677351Sgblack@eecs.umich.edu                    return MISCREG_TLBIMVAA;
3687351Sgblack@eecs.umich.edu                }
3697351Sgblack@eecs.umich.edu                break;
3707351Sgblack@eecs.umich.edu            }
3717351Sgblack@eecs.umich.edu        }
3727351Sgblack@eecs.umich.edu        break;
3737259Sgblack@eecs.umich.edu      case 9:
3747583SAli.Saidi@arm.com        if (opc1 == 0) {
3757259Sgblack@eecs.umich.edu            switch (crm) {
3767259Sgblack@eecs.umich.edu              case 12:
3777583SAli.Saidi@arm.com                switch (opc2) {
3787583SAli.Saidi@arm.com                  case 0:
3797583SAli.Saidi@arm.com                    return MISCREG_PMCR;
3807583SAli.Saidi@arm.com                  case 1:
3817583SAli.Saidi@arm.com                    return MISCREG_PMCNTENSET;
3827583SAli.Saidi@arm.com                  case 2:
3837583SAli.Saidi@arm.com                    return MISCREG_PMCNTENCLR;
3847583SAli.Saidi@arm.com                  case 3:
3857583SAli.Saidi@arm.com                    return MISCREG_PMOVSR;
3867583SAli.Saidi@arm.com                  case 4:
3877583SAli.Saidi@arm.com                    return MISCREG_PMSWINC;
3887583SAli.Saidi@arm.com                  case 5:
3897583SAli.Saidi@arm.com                    return MISCREG_PMSELR;
3907583SAli.Saidi@arm.com                  case 6:
3917583SAli.Saidi@arm.com                    return MISCREG_PMCEID0;
3927583SAli.Saidi@arm.com                  case 7:
3937583SAli.Saidi@arm.com                    return MISCREG_PMCEID1;
3947583SAli.Saidi@arm.com                }
3957259Sgblack@eecs.umich.edu              case 13:
3967583SAli.Saidi@arm.com                switch (opc2) {
3977583SAli.Saidi@arm.com                  case 0:
3987583SAli.Saidi@arm.com                    return MISCREG_PMCCNTR;
3997583SAli.Saidi@arm.com                  case 1:
4007583SAli.Saidi@arm.com                    return MISCREG_PMC_OTHER;
4017583SAli.Saidi@arm.com                  case 2:
4027583SAli.Saidi@arm.com                    return MISCREG_PMXEVCNTR;
4037583SAli.Saidi@arm.com                }
4047259Sgblack@eecs.umich.edu              case 14:
4057583SAli.Saidi@arm.com                switch (opc2) {
4067583SAli.Saidi@arm.com                  case 0:
4077583SAli.Saidi@arm.com                    return MISCREG_PMUSERENR;
4087583SAli.Saidi@arm.com                  case 1:
4097583SAli.Saidi@arm.com                    return MISCREG_PMINTENSET;
4107583SAli.Saidi@arm.com                  case 2:
4117583SAli.Saidi@arm.com                    return MISCREG_PMINTENCLR;
4127583SAli.Saidi@arm.com                }
4137259Sgblack@eecs.umich.edu            }
4148058SAli.Saidi@ARM.com        } else if (opc1 == 1) {
4158549Sdaniel.johnson@arm.com            switch (crm) {
4168549Sdaniel.johnson@arm.com              case 0:
4178549Sdaniel.johnson@arm.com                switch (opc2) {
4188549Sdaniel.johnson@arm.com                  case 2: // L2CTLR, L2 Control Register
4198549Sdaniel.johnson@arm.com                    return MISCREG_L2CTLR;
4208549Sdaniel.johnson@arm.com                  default:
4218549Sdaniel.johnson@arm.com                    warn("Uknown miscregs: crn:%d crm:%d opc1:%d opc2:%d\n",
4228549Sdaniel.johnson@arm.com                         crn,crm, opc1,opc2);
4238549Sdaniel.johnson@arm.com                    break;
4248549Sdaniel.johnson@arm.com                }
4258549Sdaniel.johnson@arm.com              default:
4268549Sdaniel.johnson@arm.com                return MISCREG_L2LATENCY;
4278549Sdaniel.johnson@arm.com            }
4287259Sgblack@eecs.umich.edu        }
4297583SAli.Saidi@arm.com        //Reserved for Branch Predictor, Cache and TCM operations
4307259Sgblack@eecs.umich.edu        break;
4317351Sgblack@eecs.umich.edu      case 10:
4327351Sgblack@eecs.umich.edu        if (opc1 == 0) {
4337351Sgblack@eecs.umich.edu            // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
4347351Sgblack@eecs.umich.edu            if (crm == 2) { // TEX Remap Registers
4357351Sgblack@eecs.umich.edu                if (opc2 == 0) {
4367351Sgblack@eecs.umich.edu                    return MISCREG_PRRR;
4377351Sgblack@eecs.umich.edu                } else if (opc2 == 1) {
4387351Sgblack@eecs.umich.edu                    return MISCREG_NMRR;
4397351Sgblack@eecs.umich.edu                }
4407351Sgblack@eecs.umich.edu            }
4417351Sgblack@eecs.umich.edu        }
4427351Sgblack@eecs.umich.edu        break;
4437259Sgblack@eecs.umich.edu      case 11:
4448737Skoansin.tan@gmail.com        if (opc1 <=7) {
4457259Sgblack@eecs.umich.edu            switch (crm) {
4467259Sgblack@eecs.umich.edu              case 0:
4477259Sgblack@eecs.umich.edu              case 1:
4487259Sgblack@eecs.umich.edu              case 2:
4497259Sgblack@eecs.umich.edu              case 3:
4507259Sgblack@eecs.umich.edu              case 4:
4517259Sgblack@eecs.umich.edu              case 5:
4527259Sgblack@eecs.umich.edu              case 6:
4537259Sgblack@eecs.umich.edu              case 7:
4547259Sgblack@eecs.umich.edu              case 8:
4557259Sgblack@eecs.umich.edu              case 15:
4567259Sgblack@eecs.umich.edu                // Reserved for DMA operations for TCM access
4577259Sgblack@eecs.umich.edu                break;
4587259Sgblack@eecs.umich.edu            }
4597259Sgblack@eecs.umich.edu        }
4607259Sgblack@eecs.umich.edu        break;
4617351Sgblack@eecs.umich.edu      case 12:
4627351Sgblack@eecs.umich.edu        if (opc1 == 0) {
4637351Sgblack@eecs.umich.edu            if (crm == 0) {
4647351Sgblack@eecs.umich.edu                if (opc2 == 0) {
4657351Sgblack@eecs.umich.edu                    return MISCREG_VBAR;
4667351Sgblack@eecs.umich.edu                } else if (opc2 == 1) {
4677351Sgblack@eecs.umich.edu                    return MISCREG_MVBAR;
4687351Sgblack@eecs.umich.edu                }
4697351Sgblack@eecs.umich.edu            } else if (crm == 1) {
4707351Sgblack@eecs.umich.edu                if (opc2 == 0) {
4717351Sgblack@eecs.umich.edu                    return MISCREG_ISR;
4727351Sgblack@eecs.umich.edu                }
4737351Sgblack@eecs.umich.edu            }
4747351Sgblack@eecs.umich.edu        }
4757351Sgblack@eecs.umich.edu        break;
4767259Sgblack@eecs.umich.edu      case 13:
4777259Sgblack@eecs.umich.edu        if (opc1 == 0) {
4787259Sgblack@eecs.umich.edu            if (crm == 0) {
4797406SAli.Saidi@ARM.com                switch (opc2) {
4807351Sgblack@eecs.umich.edu                  case 0:
4817351Sgblack@eecs.umich.edu                    return MISCREG_FCEIDR;
4827259Sgblack@eecs.umich.edu                  case 1:
4837259Sgblack@eecs.umich.edu                    return MISCREG_CONTEXTIDR;
4847259Sgblack@eecs.umich.edu                  case 2:
4857259Sgblack@eecs.umich.edu                    return MISCREG_TPIDRURW;
4867259Sgblack@eecs.umich.edu                  case 3:
4877259Sgblack@eecs.umich.edu                    return MISCREG_TPIDRURO;
4887259Sgblack@eecs.umich.edu                  case 4:
4897259Sgblack@eecs.umich.edu                    return MISCREG_TPIDRPRW;
4907259Sgblack@eecs.umich.edu                }
4917259Sgblack@eecs.umich.edu            }
4927259Sgblack@eecs.umich.edu        }
4937259Sgblack@eecs.umich.edu        break;
4947259Sgblack@eecs.umich.edu      case 15:
4957259Sgblack@eecs.umich.edu        // Implementation defined
4968550SChander.Sudanthi@ARM.com        return MISCREG_CRN15;
4977259Sgblack@eecs.umich.edu    }
4987259Sgblack@eecs.umich.edu    // Unrecognized register
4997259Sgblack@eecs.umich.edu    return NUM_MISCREGS;
5007259Sgblack@eecs.umich.edu}
5017259Sgblack@eecs.umich.edu
5028902Sandreas.hansson@arm.com}
503