miscregs.cc revision 9959
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:
669959Schander.sudanthi@arm.com            warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
679959Schander.sudanthi@arm.com                 crn, opc1, crm, opc2);
689959Schander.sudanthi@arm.com            return NUM_MISCREGS;
699959Schander.sudanthi@arm.com        }
709959Schander.sudanthi@arm.com      case 1:
719959Schander.sudanthi@arm.com        switch (opc1) {
729959Schander.sudanthi@arm.com          case 6:
739959Schander.sudanthi@arm.com            switch (crm) {
749959Schander.sudanthi@arm.com              case 0:
759959Schander.sudanthi@arm.com                switch (opc2) {
769959Schander.sudanthi@arm.com                  case 0:
779959Schander.sudanthi@arm.com                    return MISCREG_TEEHBR;
789959Schander.sudanthi@arm.com                  default:
799959Schander.sudanthi@arm.com                    warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
809959Schander.sudanthi@arm.com                         crn, opc1, crm, opc2);
819959Schander.sudanthi@arm.com                    return NUM_MISCREGS;
829959Schander.sudanthi@arm.com                }
839959Schander.sudanthi@arm.com              default:
848868SMatt.Horsnell@arm.com                warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
858868SMatt.Horsnell@arm.com                     crn, opc1, crm, opc2);
868868SMatt.Horsnell@arm.com                return NUM_MISCREGS;
879959Schander.sudanthi@arm.com            }
889959Schander.sudanthi@arm.com          default:
899959Schander.sudanthi@arm.com            warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
909959Schander.sudanthi@arm.com                 crn, opc1, crm, opc2);
919959Schander.sudanthi@arm.com            return NUM_MISCREGS;
928868SMatt.Horsnell@arm.com        }
938868SMatt.Horsnell@arm.com      default:
948868SMatt.Horsnell@arm.com        warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
958868SMatt.Horsnell@arm.com             crn, opc1, crm, opc2);
968868SMatt.Horsnell@arm.com        return NUM_MISCREGS;
978868SMatt.Horsnell@arm.com    }
988868SMatt.Horsnell@arm.com
998868SMatt.Horsnell@arm.com}
1008868SMatt.Horsnell@arm.com
1018868SMatt.Horsnell@arm.comMiscRegIndex
1027259Sgblack@eecs.umich.edudecodeCP15Reg(unsigned crn, unsigned opc1, unsigned crm, unsigned opc2)
1037259Sgblack@eecs.umich.edu{
1047259Sgblack@eecs.umich.edu    switch (crn) {
1057259Sgblack@eecs.umich.edu      case 0:
1067259Sgblack@eecs.umich.edu        switch (opc1) {
1077259Sgblack@eecs.umich.edu          case 0:
1087259Sgblack@eecs.umich.edu            switch (crm) {
1097259Sgblack@eecs.umich.edu              case 0:
1107259Sgblack@eecs.umich.edu                switch (opc2) {
1117259Sgblack@eecs.umich.edu                  case 1:
1127259Sgblack@eecs.umich.edu                    return MISCREG_CTR;
1137259Sgblack@eecs.umich.edu                  case 2:
1147259Sgblack@eecs.umich.edu                    return MISCREG_TCMTR;
1157351Sgblack@eecs.umich.edu                  case 3:
1167351Sgblack@eecs.umich.edu                    return MISCREG_TLBTR;
1177259Sgblack@eecs.umich.edu                  case 5:
1187259Sgblack@eecs.umich.edu                    return MISCREG_MPIDR;
1197259Sgblack@eecs.umich.edu                  default:
1207259Sgblack@eecs.umich.edu                    return MISCREG_MIDR;
1217259Sgblack@eecs.umich.edu                }
1227259Sgblack@eecs.umich.edu                break;
1237259Sgblack@eecs.umich.edu              case 1:
1247259Sgblack@eecs.umich.edu                switch (opc2) {
1257259Sgblack@eecs.umich.edu                  case 0:
1267259Sgblack@eecs.umich.edu                    return MISCREG_ID_PFR0;
1277259Sgblack@eecs.umich.edu                  case 1:
1287259Sgblack@eecs.umich.edu                    return MISCREG_ID_PFR1;
1297259Sgblack@eecs.umich.edu                  case 2:
1307259Sgblack@eecs.umich.edu                    return MISCREG_ID_DFR0;
1317259Sgblack@eecs.umich.edu                  case 3:
1327259Sgblack@eecs.umich.edu                    return MISCREG_ID_AFR0;
1337259Sgblack@eecs.umich.edu                  case 4:
1347259Sgblack@eecs.umich.edu                    return MISCREG_ID_MMFR0;
1357259Sgblack@eecs.umich.edu                  case 5:
1367259Sgblack@eecs.umich.edu                    return MISCREG_ID_MMFR1;
1377259Sgblack@eecs.umich.edu                  case 6:
1387259Sgblack@eecs.umich.edu                    return MISCREG_ID_MMFR2;
1397259Sgblack@eecs.umich.edu                  case 7:
1407259Sgblack@eecs.umich.edu                    return MISCREG_ID_MMFR3;
1417259Sgblack@eecs.umich.edu                }
1427259Sgblack@eecs.umich.edu                break;
1437259Sgblack@eecs.umich.edu              case 2:
1447259Sgblack@eecs.umich.edu                switch (opc2) {
1457259Sgblack@eecs.umich.edu                  case 0:
1467259Sgblack@eecs.umich.edu                    return MISCREG_ID_ISAR0;
1477259Sgblack@eecs.umich.edu                  case 1:
1487259Sgblack@eecs.umich.edu                    return MISCREG_ID_ISAR1;
1497259Sgblack@eecs.umich.edu                  case 2:
1507259Sgblack@eecs.umich.edu                    return MISCREG_ID_ISAR2;
1517259Sgblack@eecs.umich.edu                  case 3:
1527259Sgblack@eecs.umich.edu                    return MISCREG_ID_ISAR3;
1537259Sgblack@eecs.umich.edu                  case 4:
1547259Sgblack@eecs.umich.edu                    return MISCREG_ID_ISAR4;
1557259Sgblack@eecs.umich.edu                  case 5:
1567259Sgblack@eecs.umich.edu                    return MISCREG_ID_ISAR5;
1577259Sgblack@eecs.umich.edu                  case 6:
1587259Sgblack@eecs.umich.edu                  case 7:
1597259Sgblack@eecs.umich.edu                    return MISCREG_RAZ; // read as zero
1607259Sgblack@eecs.umich.edu                }
1617259Sgblack@eecs.umich.edu                break;
1627259Sgblack@eecs.umich.edu              default:
1637259Sgblack@eecs.umich.edu                return MISCREG_RAZ; // read as zero
1647259Sgblack@eecs.umich.edu            }
1657259Sgblack@eecs.umich.edu            break;
1667259Sgblack@eecs.umich.edu          case 1:
1677259Sgblack@eecs.umich.edu            if (crm == 0) {
1687259Sgblack@eecs.umich.edu                switch (opc2) {
1697259Sgblack@eecs.umich.edu                  case 0:
1707259Sgblack@eecs.umich.edu                    return MISCREG_CCSIDR;
1717259Sgblack@eecs.umich.edu                  case 1:
1727259Sgblack@eecs.umich.edu                    return MISCREG_CLIDR;
1737259Sgblack@eecs.umich.edu                  case 7:
1747259Sgblack@eecs.umich.edu                    return MISCREG_AIDR;
1757259Sgblack@eecs.umich.edu                }
1767259Sgblack@eecs.umich.edu            }
1777259Sgblack@eecs.umich.edu            break;
1787259Sgblack@eecs.umich.edu          case 2:
1797259Sgblack@eecs.umich.edu            if (crm == 0 && opc2 == 0) {
1807259Sgblack@eecs.umich.edu                return MISCREG_CSSELR;
1817259Sgblack@eecs.umich.edu            }
1827259Sgblack@eecs.umich.edu            break;
1837259Sgblack@eecs.umich.edu        }
1847259Sgblack@eecs.umich.edu        break;
1857259Sgblack@eecs.umich.edu      case 1:
1867351Sgblack@eecs.umich.edu        if (opc1 == 0) {
1877351Sgblack@eecs.umich.edu            if (crm == 0) {
1887351Sgblack@eecs.umich.edu                switch (opc2) {
1897351Sgblack@eecs.umich.edu                  case 0:
1907351Sgblack@eecs.umich.edu                    return MISCREG_SCTLR;
1917351Sgblack@eecs.umich.edu                  case 1:
1927351Sgblack@eecs.umich.edu                    return MISCREG_ACTLR;
1937351Sgblack@eecs.umich.edu                  case 0x2:
1947351Sgblack@eecs.umich.edu                    return MISCREG_CPACR;
1957351Sgblack@eecs.umich.edu                }
1967351Sgblack@eecs.umich.edu            } else if (crm == 1) {
1977351Sgblack@eecs.umich.edu                switch (opc2) {
1987351Sgblack@eecs.umich.edu                  case 0:
1997351Sgblack@eecs.umich.edu                    return MISCREG_SCR;
2007351Sgblack@eecs.umich.edu                  case 1:
2017351Sgblack@eecs.umich.edu                    return MISCREG_SDER;
2027351Sgblack@eecs.umich.edu                  case 2:
2037351Sgblack@eecs.umich.edu                    return MISCREG_NSACR;
2047351Sgblack@eecs.umich.edu                }
2057351Sgblack@eecs.umich.edu            }
2067351Sgblack@eecs.umich.edu        }
2077351Sgblack@eecs.umich.edu        break;
2087351Sgblack@eecs.umich.edu      case 2:
2097406SAli.Saidi@ARM.com        if (opc1 == 0 && crm == 0) {
2107259Sgblack@eecs.umich.edu            switch (opc2) {
2117259Sgblack@eecs.umich.edu              case 0:
2127351Sgblack@eecs.umich.edu                return MISCREG_TTBR0;
2137259Sgblack@eecs.umich.edu              case 1:
2147351Sgblack@eecs.umich.edu                return MISCREG_TTBR1;
2157351Sgblack@eecs.umich.edu              case 2:
2167351Sgblack@eecs.umich.edu                return MISCREG_TTBCR;
2177259Sgblack@eecs.umich.edu            }
2187259Sgblack@eecs.umich.edu        }
2197259Sgblack@eecs.umich.edu        break;
2207351Sgblack@eecs.umich.edu      case 3:
2217351Sgblack@eecs.umich.edu        if (opc1 == 0 && crm == 0 && opc2 == 0) {
2227351Sgblack@eecs.umich.edu            return MISCREG_DACR;
2237351Sgblack@eecs.umich.edu        }
2247351Sgblack@eecs.umich.edu        break;
2257259Sgblack@eecs.umich.edu      case 5:
2267259Sgblack@eecs.umich.edu        if (opc1 == 0) {
2277259Sgblack@eecs.umich.edu            if (crm == 0) {
2287259Sgblack@eecs.umich.edu                if (opc2 == 0) {
2297259Sgblack@eecs.umich.edu                    return MISCREG_DFSR;
2307259Sgblack@eecs.umich.edu                } else if (opc2 == 1) {
2317259Sgblack@eecs.umich.edu                    return MISCREG_IFSR;
2327259Sgblack@eecs.umich.edu                }
2337259Sgblack@eecs.umich.edu            } else if (crm == 1) {
2347259Sgblack@eecs.umich.edu                if (opc2 == 0) {
2357259Sgblack@eecs.umich.edu                    return MISCREG_ADFSR;
2367259Sgblack@eecs.umich.edu                } else if (opc2 == 1) {
2377259Sgblack@eecs.umich.edu                    return MISCREG_AIFSR;
2387259Sgblack@eecs.umich.edu                }
2397259Sgblack@eecs.umich.edu            }
2407259Sgblack@eecs.umich.edu        }
2417259Sgblack@eecs.umich.edu        break;
2427259Sgblack@eecs.umich.edu      case 6:
2437351Sgblack@eecs.umich.edu        if (opc1 == 0 && crm == 0) {
2447351Sgblack@eecs.umich.edu            switch (opc2) {
2457259Sgblack@eecs.umich.edu              case 0:
2467351Sgblack@eecs.umich.edu                return MISCREG_DFAR;
2477259Sgblack@eecs.umich.edu              case 2:
2487351Sgblack@eecs.umich.edu                return MISCREG_IFAR;
2497259Sgblack@eecs.umich.edu            }
2507259Sgblack@eecs.umich.edu        }
2517259Sgblack@eecs.umich.edu        break;
2527259Sgblack@eecs.umich.edu      case 7:
2537259Sgblack@eecs.umich.edu        if (opc1 == 0) {
2547259Sgblack@eecs.umich.edu            switch (crm) {
2557259Sgblack@eecs.umich.edu              case 0:
2567259Sgblack@eecs.umich.edu                if (opc2 == 4) {
2577259Sgblack@eecs.umich.edu                    return MISCREG_NOP;
2587259Sgblack@eecs.umich.edu                }
2597259Sgblack@eecs.umich.edu                break;
2607259Sgblack@eecs.umich.edu              case 1:
2617259Sgblack@eecs.umich.edu                switch (opc2) {
2627259Sgblack@eecs.umich.edu                  case 0:
2637259Sgblack@eecs.umich.edu                    return MISCREG_ICIALLUIS;
2647259Sgblack@eecs.umich.edu                  case 6:
2657259Sgblack@eecs.umich.edu                    return MISCREG_BPIALLIS;
2667259Sgblack@eecs.umich.edu                }
2677259Sgblack@eecs.umich.edu                break;
2687351Sgblack@eecs.umich.edu              case 4:
2697351Sgblack@eecs.umich.edu                if (opc2 == 0) {
2707351Sgblack@eecs.umich.edu                    return MISCREG_PAR;
2717351Sgblack@eecs.umich.edu                }
2727351Sgblack@eecs.umich.edu                break;
2737259Sgblack@eecs.umich.edu              case 5:
2747259Sgblack@eecs.umich.edu                switch (opc2) {
2757259Sgblack@eecs.umich.edu                  case 0:
2767259Sgblack@eecs.umich.edu                    return MISCREG_ICIALLU;
2777259Sgblack@eecs.umich.edu                  case 1:
2787259Sgblack@eecs.umich.edu                    return MISCREG_ICIMVAU;
2797259Sgblack@eecs.umich.edu                  case 4:
2807259Sgblack@eecs.umich.edu                    return MISCREG_CP15ISB;
2817259Sgblack@eecs.umich.edu                  case 6:
2827259Sgblack@eecs.umich.edu                    return MISCREG_BPIALL;
2837259Sgblack@eecs.umich.edu                  case 7:
2847259Sgblack@eecs.umich.edu                    return MISCREG_BPIMVA;
2857259Sgblack@eecs.umich.edu                }
2867259Sgblack@eecs.umich.edu                break;
2877259Sgblack@eecs.umich.edu              case 6:
2887259Sgblack@eecs.umich.edu                if (opc2 == 1) {
2897259Sgblack@eecs.umich.edu                    return MISCREG_DCIMVAC;
2907259Sgblack@eecs.umich.edu                } else if (opc2 == 2) {
2917259Sgblack@eecs.umich.edu                    return MISCREG_DCISW;
2927259Sgblack@eecs.umich.edu                }
2937259Sgblack@eecs.umich.edu                break;
2947351Sgblack@eecs.umich.edu              case 8:
2957351Sgblack@eecs.umich.edu                switch (opc2) {
2967351Sgblack@eecs.umich.edu                  case 0:
2977351Sgblack@eecs.umich.edu                    return MISCREG_V2PCWPR;
2987351Sgblack@eecs.umich.edu                  case 1:
2997351Sgblack@eecs.umich.edu                    return MISCREG_V2PCWPW;
3007351Sgblack@eecs.umich.edu                  case 2:
3017351Sgblack@eecs.umich.edu                    return MISCREG_V2PCWUR;
3027351Sgblack@eecs.umich.edu                  case 3:
3037351Sgblack@eecs.umich.edu                    return MISCREG_V2PCWUW;
3047351Sgblack@eecs.umich.edu                  case 4:
3057351Sgblack@eecs.umich.edu                    return MISCREG_V2POWPR;
3067351Sgblack@eecs.umich.edu                  case 5:
3077351Sgblack@eecs.umich.edu                    return MISCREG_V2POWPW;
3087351Sgblack@eecs.umich.edu                  case 6:
3097351Sgblack@eecs.umich.edu                    return MISCREG_V2POWUR;
3107351Sgblack@eecs.umich.edu                  case 7:
3117351Sgblack@eecs.umich.edu                    return MISCREG_V2POWUW;
3127351Sgblack@eecs.umich.edu                }
3137351Sgblack@eecs.umich.edu                break;
3147259Sgblack@eecs.umich.edu              case 10:
3157259Sgblack@eecs.umich.edu                switch (opc2) {
3167259Sgblack@eecs.umich.edu                  case 1:
3177259Sgblack@eecs.umich.edu                    return MISCREG_DCCMVAC;
3187259Sgblack@eecs.umich.edu                  case 2:
3197259Sgblack@eecs.umich.edu                    return MISCREG_MCCSW;
3207259Sgblack@eecs.umich.edu                  case 4:
3217259Sgblack@eecs.umich.edu                    return MISCREG_CP15DSB;
3227259Sgblack@eecs.umich.edu                  case 5:
3237259Sgblack@eecs.umich.edu                    return MISCREG_CP15DMB;
3247259Sgblack@eecs.umich.edu                }
3257259Sgblack@eecs.umich.edu                break;
3267259Sgblack@eecs.umich.edu              case 11:
3277259Sgblack@eecs.umich.edu                if (opc2 == 1) {
3287259Sgblack@eecs.umich.edu                    return MISCREG_DCCMVAU;
3297259Sgblack@eecs.umich.edu                }
3307259Sgblack@eecs.umich.edu                break;
3317259Sgblack@eecs.umich.edu              case 13:
3327259Sgblack@eecs.umich.edu                if (opc2 == 1) {
3337259Sgblack@eecs.umich.edu                    return MISCREG_NOP;
3347259Sgblack@eecs.umich.edu                }
3357259Sgblack@eecs.umich.edu                break;
3367259Sgblack@eecs.umich.edu              case 14:
3377259Sgblack@eecs.umich.edu                if (opc2 == 1) {
3387259Sgblack@eecs.umich.edu                    return MISCREG_DCCIMVAC;
3397259Sgblack@eecs.umich.edu                } else if (opc2 == 2) {
3407259Sgblack@eecs.umich.edu                    return MISCREG_DCCISW;
3417259Sgblack@eecs.umich.edu                }
3427259Sgblack@eecs.umich.edu                break;
3437259Sgblack@eecs.umich.edu            }
3447259Sgblack@eecs.umich.edu        }
3457259Sgblack@eecs.umich.edu        break;
3467351Sgblack@eecs.umich.edu      case 8:
3477351Sgblack@eecs.umich.edu        if (opc1 == 0) {
3487351Sgblack@eecs.umich.edu            switch (crm) {
3497351Sgblack@eecs.umich.edu              case 3:
3507351Sgblack@eecs.umich.edu                switch (opc2) {
3517351Sgblack@eecs.umich.edu                  case 0:
3527351Sgblack@eecs.umich.edu                    return MISCREG_TLBIALLIS;
3537351Sgblack@eecs.umich.edu                  case 1:
3547351Sgblack@eecs.umich.edu                    return MISCREG_TLBIMVAIS;
3557351Sgblack@eecs.umich.edu                  case 2:
3567351Sgblack@eecs.umich.edu                    return MISCREG_TLBIASIDIS;
3577351Sgblack@eecs.umich.edu                  case 3:
3587351Sgblack@eecs.umich.edu                    return MISCREG_TLBIMVAAIS;
3597351Sgblack@eecs.umich.edu                }
3607351Sgblack@eecs.umich.edu                break;
3617351Sgblack@eecs.umich.edu              case 5:
3627351Sgblack@eecs.umich.edu                switch (opc2) {
3637351Sgblack@eecs.umich.edu                  case 0:
3647351Sgblack@eecs.umich.edu                    return MISCREG_ITLBIALL;
3657351Sgblack@eecs.umich.edu                  case 1:
3667351Sgblack@eecs.umich.edu                    return MISCREG_ITLBIMVA;
3677351Sgblack@eecs.umich.edu                  case 2:
3687351Sgblack@eecs.umich.edu                    return MISCREG_ITLBIASID;
3697351Sgblack@eecs.umich.edu                }
3707351Sgblack@eecs.umich.edu                break;
3717351Sgblack@eecs.umich.edu              case 6:
3727351Sgblack@eecs.umich.edu                switch (opc2) {
3737351Sgblack@eecs.umich.edu                  case 0:
3747351Sgblack@eecs.umich.edu                    return MISCREG_DTLBIALL;
3757351Sgblack@eecs.umich.edu                  case 1:
3767351Sgblack@eecs.umich.edu                    return MISCREG_DTLBIMVA;
3777351Sgblack@eecs.umich.edu                  case 2:
3787351Sgblack@eecs.umich.edu                    return MISCREG_DTLBIASID;
3797351Sgblack@eecs.umich.edu                }
3807351Sgblack@eecs.umich.edu                break;
3817351Sgblack@eecs.umich.edu              case 7:
3827351Sgblack@eecs.umich.edu                switch (opc2) {
3837351Sgblack@eecs.umich.edu                  case 0:
3847351Sgblack@eecs.umich.edu                    return MISCREG_TLBIALL;
3857351Sgblack@eecs.umich.edu                  case 1:
3867351Sgblack@eecs.umich.edu                    return MISCREG_TLBIMVA;
3877351Sgblack@eecs.umich.edu                  case 2:
3887351Sgblack@eecs.umich.edu                    return MISCREG_TLBIASID;
3897351Sgblack@eecs.umich.edu                  case 3:
3907351Sgblack@eecs.umich.edu                    return MISCREG_TLBIMVAA;
3917351Sgblack@eecs.umich.edu                }
3927351Sgblack@eecs.umich.edu                break;
3937351Sgblack@eecs.umich.edu            }
3947351Sgblack@eecs.umich.edu        }
3957351Sgblack@eecs.umich.edu        break;
3967259Sgblack@eecs.umich.edu      case 9:
3977583SAli.Saidi@arm.com        if (opc1 == 0) {
3987259Sgblack@eecs.umich.edu            switch (crm) {
3997259Sgblack@eecs.umich.edu              case 12:
4007583SAli.Saidi@arm.com                switch (opc2) {
4017583SAli.Saidi@arm.com                  case 0:
4027583SAli.Saidi@arm.com                    return MISCREG_PMCR;
4037583SAli.Saidi@arm.com                  case 1:
4047583SAli.Saidi@arm.com                    return MISCREG_PMCNTENSET;
4057583SAli.Saidi@arm.com                  case 2:
4067583SAli.Saidi@arm.com                    return MISCREG_PMCNTENCLR;
4077583SAli.Saidi@arm.com                  case 3:
4087583SAli.Saidi@arm.com                    return MISCREG_PMOVSR;
4097583SAli.Saidi@arm.com                  case 4:
4107583SAli.Saidi@arm.com                    return MISCREG_PMSWINC;
4117583SAli.Saidi@arm.com                  case 5:
4127583SAli.Saidi@arm.com                    return MISCREG_PMSELR;
4137583SAli.Saidi@arm.com                  case 6:
4147583SAli.Saidi@arm.com                    return MISCREG_PMCEID0;
4157583SAli.Saidi@arm.com                  case 7:
4167583SAli.Saidi@arm.com                    return MISCREG_PMCEID1;
4177583SAli.Saidi@arm.com                }
4188988SAli.Saidi@ARM.com                break;
4197259Sgblack@eecs.umich.edu              case 13:
4207583SAli.Saidi@arm.com                switch (opc2) {
4217583SAli.Saidi@arm.com                  case 0:
4227583SAli.Saidi@arm.com                    return MISCREG_PMCCNTR;
4237583SAli.Saidi@arm.com                  case 1:
4247583SAli.Saidi@arm.com                    return MISCREG_PMC_OTHER;
4257583SAli.Saidi@arm.com                  case 2:
4267583SAli.Saidi@arm.com                    return MISCREG_PMXEVCNTR;
4277583SAli.Saidi@arm.com                }
4288988SAli.Saidi@ARM.com                break;
4297259Sgblack@eecs.umich.edu              case 14:
4307583SAli.Saidi@arm.com                switch (opc2) {
4317583SAli.Saidi@arm.com                  case 0:
4327583SAli.Saidi@arm.com                    return MISCREG_PMUSERENR;
4337583SAli.Saidi@arm.com                  case 1:
4347583SAli.Saidi@arm.com                    return MISCREG_PMINTENSET;
4357583SAli.Saidi@arm.com                  case 2:
4367583SAli.Saidi@arm.com                    return MISCREG_PMINTENCLR;
4377583SAli.Saidi@arm.com                }
4388988SAli.Saidi@ARM.com                break;
4397259Sgblack@eecs.umich.edu            }
4408058SAli.Saidi@ARM.com        } else if (opc1 == 1) {
4418549Sdaniel.johnson@arm.com            switch (crm) {
4428549Sdaniel.johnson@arm.com              case 0:
4438549Sdaniel.johnson@arm.com                switch (opc2) {
4448549Sdaniel.johnson@arm.com                  case 2: // L2CTLR, L2 Control Register
4458549Sdaniel.johnson@arm.com                    return MISCREG_L2CTLR;
4468549Sdaniel.johnson@arm.com                  default:
4478549Sdaniel.johnson@arm.com                    warn("Uknown miscregs: crn:%d crm:%d opc1:%d opc2:%d\n",
4488549Sdaniel.johnson@arm.com                         crn,crm, opc1,opc2);
4498549Sdaniel.johnson@arm.com                    break;
4508549Sdaniel.johnson@arm.com                }
4518988SAli.Saidi@ARM.com                break;
4528549Sdaniel.johnson@arm.com              default:
4538549Sdaniel.johnson@arm.com                return MISCREG_L2LATENCY;
4548549Sdaniel.johnson@arm.com            }
4557259Sgblack@eecs.umich.edu        }
4567583SAli.Saidi@arm.com        //Reserved for Branch Predictor, Cache and TCM operations
4577259Sgblack@eecs.umich.edu        break;
4587351Sgblack@eecs.umich.edu      case 10:
4597351Sgblack@eecs.umich.edu        if (opc1 == 0) {
4607351Sgblack@eecs.umich.edu            // crm 0, 1, 4, and 8, with op2 0 - 7, reserved for TLB lockdown
4617351Sgblack@eecs.umich.edu            if (crm == 2) { // TEX Remap Registers
4627351Sgblack@eecs.umich.edu                if (opc2 == 0) {
4637351Sgblack@eecs.umich.edu                    return MISCREG_PRRR;
4647351Sgblack@eecs.umich.edu                } else if (opc2 == 1) {
4657351Sgblack@eecs.umich.edu                    return MISCREG_NMRR;
4667351Sgblack@eecs.umich.edu                }
4677351Sgblack@eecs.umich.edu            }
4687351Sgblack@eecs.umich.edu        }
4697351Sgblack@eecs.umich.edu        break;
4707259Sgblack@eecs.umich.edu      case 11:
4718737Skoansin.tan@gmail.com        if (opc1 <=7) {
4727259Sgblack@eecs.umich.edu            switch (crm) {
4737259Sgblack@eecs.umich.edu              case 0:
4747259Sgblack@eecs.umich.edu              case 1:
4757259Sgblack@eecs.umich.edu              case 2:
4767259Sgblack@eecs.umich.edu              case 3:
4777259Sgblack@eecs.umich.edu              case 4:
4787259Sgblack@eecs.umich.edu              case 5:
4797259Sgblack@eecs.umich.edu              case 6:
4807259Sgblack@eecs.umich.edu              case 7:
4817259Sgblack@eecs.umich.edu              case 8:
4827259Sgblack@eecs.umich.edu              case 15:
4837259Sgblack@eecs.umich.edu                // Reserved for DMA operations for TCM access
4847259Sgblack@eecs.umich.edu                break;
4857259Sgblack@eecs.umich.edu            }
4867259Sgblack@eecs.umich.edu        }
4877259Sgblack@eecs.umich.edu        break;
4887351Sgblack@eecs.umich.edu      case 12:
4897351Sgblack@eecs.umich.edu        if (opc1 == 0) {
4907351Sgblack@eecs.umich.edu            if (crm == 0) {
4917351Sgblack@eecs.umich.edu                if (opc2 == 0) {
4927351Sgblack@eecs.umich.edu                    return MISCREG_VBAR;
4937351Sgblack@eecs.umich.edu                } else if (opc2 == 1) {
4947351Sgblack@eecs.umich.edu                    return MISCREG_MVBAR;
4957351Sgblack@eecs.umich.edu                }
4967351Sgblack@eecs.umich.edu            } else if (crm == 1) {
4977351Sgblack@eecs.umich.edu                if (opc2 == 0) {
4987351Sgblack@eecs.umich.edu                    return MISCREG_ISR;
4997351Sgblack@eecs.umich.edu                }
5007351Sgblack@eecs.umich.edu            }
5017351Sgblack@eecs.umich.edu        }
5027351Sgblack@eecs.umich.edu        break;
5037259Sgblack@eecs.umich.edu      case 13:
5047259Sgblack@eecs.umich.edu        if (opc1 == 0) {
5057259Sgblack@eecs.umich.edu            if (crm == 0) {
5067406SAli.Saidi@ARM.com                switch (opc2) {
5077351Sgblack@eecs.umich.edu                  case 0:
5087351Sgblack@eecs.umich.edu                    return MISCREG_FCEIDR;
5097259Sgblack@eecs.umich.edu                  case 1:
5107259Sgblack@eecs.umich.edu                    return MISCREG_CONTEXTIDR;
5117259Sgblack@eecs.umich.edu                  case 2:
5127259Sgblack@eecs.umich.edu                    return MISCREG_TPIDRURW;
5137259Sgblack@eecs.umich.edu                  case 3:
5147259Sgblack@eecs.umich.edu                    return MISCREG_TPIDRURO;
5157259Sgblack@eecs.umich.edu                  case 4:
5167259Sgblack@eecs.umich.edu                    return MISCREG_TPIDRPRW;
5177259Sgblack@eecs.umich.edu                }
5187259Sgblack@eecs.umich.edu            }
5197259Sgblack@eecs.umich.edu        }
5207259Sgblack@eecs.umich.edu        break;
5217259Sgblack@eecs.umich.edu      case 15:
5227259Sgblack@eecs.umich.edu        // Implementation defined
5238550SChander.Sudanthi@ARM.com        return MISCREG_CRN15;
5247259Sgblack@eecs.umich.edu    }
5257259Sgblack@eecs.umich.edu    // Unrecognized register
5267259Sgblack@eecs.umich.edu    return NUM_MISCREGS;
5277259Sgblack@eecs.umich.edu}
5287259Sgblack@eecs.umich.edu
5298902Sandreas.hansson@arm.com}
530