13123Sgblack@eecs.umich.edu/*
23123Sgblack@eecs.umich.edu * Copyright (c) 2006 The Regents of The University of Michigan
33123Sgblack@eecs.umich.edu * All rights reserved.
43123Sgblack@eecs.umich.edu *
53123Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
63123Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
73123Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
83123Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
93123Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
103123Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
113123Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
123123Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
133123Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
143123Sgblack@eecs.umich.edu * this software without specific prior written permission.
153123Sgblack@eecs.umich.edu *
163123Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
173123Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
183123Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
193123Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
203123Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
213123Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
223123Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
233123Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
243123Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
253123Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
263123Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
273123Sgblack@eecs.umich.edu *
283123Sgblack@eecs.umich.edu * Authors: Gabe Black
293804Ssaidi@eecs.umich.edu *          Ali Saidi
303123Sgblack@eecs.umich.edu */
313123Sgblack@eecs.umich.edu
323123Sgblack@eecs.umich.edu#include "arch/sparc/asi.hh"
333123Sgblack@eecs.umich.edu
343123Sgblack@eecs.umich.edunamespace SparcISA
353123Sgblack@eecs.umich.edu{
363123Sgblack@eecs.umich.edu
377741Sgblack@eecs.umich.edubool
387741Sgblack@eecs.umich.eduasiIsBlock(ASI asi)
397741Sgblack@eecs.umich.edu{
407741Sgblack@eecs.umich.edu    return asi == ASI_BLK_AIUP ||
417741Sgblack@eecs.umich.edu           asi == ASI_BLK_AIUS ||
427741Sgblack@eecs.umich.edu           asi == ASI_BLK_AIUP_L ||
437741Sgblack@eecs.umich.edu           asi == ASI_BLK_AIUS_L ||
447741Sgblack@eecs.umich.edu           asi == ASI_BLK_P ||
457741Sgblack@eecs.umich.edu           asi == ASI_BLK_S ||
467741Sgblack@eecs.umich.edu           asi == ASI_BLK_PL ||
477741Sgblack@eecs.umich.edu           asi == ASI_BLK_SL;
487741Sgblack@eecs.umich.edu}
493123Sgblack@eecs.umich.edu
507741Sgblack@eecs.umich.edubool
517741Sgblack@eecs.umich.eduasiIsPrimary(ASI asi)
527741Sgblack@eecs.umich.edu{
537741Sgblack@eecs.umich.edu    return asi == ASI_AIUP ||
547741Sgblack@eecs.umich.edu           asi == ASI_BLK_AIUP ||
557741Sgblack@eecs.umich.edu           asi == ASI_AIUP_L ||
567741Sgblack@eecs.umich.edu           asi == ASI_BLK_AIUP_L ||
577741Sgblack@eecs.umich.edu           asi == ASI_LDTX_AIUP ||
587741Sgblack@eecs.umich.edu           asi == ASI_LDTX_AIUP_L ||
597741Sgblack@eecs.umich.edu           asi == ASI_P ||
607741Sgblack@eecs.umich.edu           asi == ASI_PNF ||
617741Sgblack@eecs.umich.edu           asi == ASI_PL ||
627741Sgblack@eecs.umich.edu           asi == ASI_PNFL ||
637741Sgblack@eecs.umich.edu           asi == ASI_PST8_P ||
647741Sgblack@eecs.umich.edu           asi == ASI_PST16_P ||
657741Sgblack@eecs.umich.edu           asi == ASI_PST32_P ||
667741Sgblack@eecs.umich.edu           asi == ASI_PST8_PL ||
677741Sgblack@eecs.umich.edu           asi == ASI_PST16_PL ||
687741Sgblack@eecs.umich.edu           asi == ASI_PST32_PL ||
697741Sgblack@eecs.umich.edu           asi == ASI_FL8_P ||
707741Sgblack@eecs.umich.edu           asi == ASI_FL16_P ||
717741Sgblack@eecs.umich.edu           asi == ASI_FL8_PL ||
727741Sgblack@eecs.umich.edu           asi == ASI_FL16_PL ||
737741Sgblack@eecs.umich.edu           asi == ASI_LDTX_P ||
747741Sgblack@eecs.umich.edu           asi == ASI_LDTX_PL ||
757741Sgblack@eecs.umich.edu           asi == ASI_BLK_P ||
767741Sgblack@eecs.umich.edu           asi == ASI_BLK_PL;
777741Sgblack@eecs.umich.edu}
783123Sgblack@eecs.umich.edu
797741Sgblack@eecs.umich.edubool
807741Sgblack@eecs.umich.eduasiIsSecondary(ASI asi)
817741Sgblack@eecs.umich.edu{
827741Sgblack@eecs.umich.edu    return asi == ASI_AIUS ||
837741Sgblack@eecs.umich.edu           asi == ASI_BLK_AIUS ||
847741Sgblack@eecs.umich.edu           asi == ASI_AIUS_L ||
857741Sgblack@eecs.umich.edu           asi == ASI_BLK_AIUS_L ||
867741Sgblack@eecs.umich.edu           asi == ASI_LDTX_AIUS ||
877741Sgblack@eecs.umich.edu           asi == ASI_LDTX_AIUS_L ||
887741Sgblack@eecs.umich.edu           asi == ASI_S ||
897741Sgblack@eecs.umich.edu           asi == ASI_SNF ||
907741Sgblack@eecs.umich.edu           asi == ASI_SL ||
917741Sgblack@eecs.umich.edu           asi == ASI_SNFL ||
927741Sgblack@eecs.umich.edu           asi == ASI_PST8_S ||
937741Sgblack@eecs.umich.edu           asi == ASI_PST16_S ||
947741Sgblack@eecs.umich.edu           asi == ASI_PST32_S ||
957741Sgblack@eecs.umich.edu           asi == ASI_PST8_SL ||
967741Sgblack@eecs.umich.edu           asi == ASI_PST16_SL ||
977741Sgblack@eecs.umich.edu           asi == ASI_PST32_SL ||
987741Sgblack@eecs.umich.edu           asi == ASI_FL8_S ||
997741Sgblack@eecs.umich.edu           asi == ASI_FL16_S ||
1007741Sgblack@eecs.umich.edu           asi == ASI_FL8_SL ||
1017741Sgblack@eecs.umich.edu           asi == ASI_FL16_SL ||
1027741Sgblack@eecs.umich.edu           asi == ASI_LDTX_S ||
1037741Sgblack@eecs.umich.edu           asi == ASI_LDTX_SL ||
1047741Sgblack@eecs.umich.edu           asi == ASI_BLK_S ||
1057741Sgblack@eecs.umich.edu           asi == ASI_BLK_SL;
1067741Sgblack@eecs.umich.edu}
1073123Sgblack@eecs.umich.edu
1087741Sgblack@eecs.umich.edubool
1097741Sgblack@eecs.umich.eduasiIsNucleus(ASI asi)
1107741Sgblack@eecs.umich.edu{
1117741Sgblack@eecs.umich.edu    return asi == ASI_N ||
1127741Sgblack@eecs.umich.edu           asi == ASI_NL ||
1137741Sgblack@eecs.umich.edu           asi == ASI_LDTX_N ||
1147741Sgblack@eecs.umich.edu           asi == ASI_LDTX_NL;
1157741Sgblack@eecs.umich.edu}
1163123Sgblack@eecs.umich.edu
1177741Sgblack@eecs.umich.edubool
1187741Sgblack@eecs.umich.eduasiIsAsIfUser(ASI asi)
1197741Sgblack@eecs.umich.edu{
1207741Sgblack@eecs.umich.edu    return asi == ASI_AIUP ||
1217741Sgblack@eecs.umich.edu           asi == ASI_AIUS ||
1227741Sgblack@eecs.umich.edu           asi == ASI_BLK_AIUP ||
1237741Sgblack@eecs.umich.edu           asi == ASI_BLK_AIUS ||
1247741Sgblack@eecs.umich.edu           asi == ASI_AIUP_L ||
1257741Sgblack@eecs.umich.edu           asi == ASI_AIUS_L ||
1267741Sgblack@eecs.umich.edu           asi == ASI_BLK_AIUP_L ||
1277741Sgblack@eecs.umich.edu           asi == ASI_BLK_AIUS_L ||
1287741Sgblack@eecs.umich.edu           asi == ASI_LDTX_AIUP ||
1297741Sgblack@eecs.umich.edu           asi == ASI_LDTX_AIUS ||
1307741Sgblack@eecs.umich.edu           asi == ASI_LDTX_AIUP_L ||
1317741Sgblack@eecs.umich.edu           asi == ASI_LDTX_AIUS_L;
1327741Sgblack@eecs.umich.edu}
1333123Sgblack@eecs.umich.edu
1347741Sgblack@eecs.umich.edubool
1357741Sgblack@eecs.umich.eduasiIsIO(ASI asi)
1367741Sgblack@eecs.umich.edu{
1377741Sgblack@eecs.umich.edu    return asi == ASI_REAL_IO ||
1387741Sgblack@eecs.umich.edu           asi == ASI_REAL_IO_L;
1397741Sgblack@eecs.umich.edu}
1403123Sgblack@eecs.umich.edu
1417741Sgblack@eecs.umich.edubool
1427741Sgblack@eecs.umich.eduasiIsReal(ASI asi)
1437741Sgblack@eecs.umich.edu{
1447741Sgblack@eecs.umich.edu    return asi == ASI_REAL ||
1457741Sgblack@eecs.umich.edu           asi == ASI_REAL_IO ||
1467741Sgblack@eecs.umich.edu           asi == ASI_REAL_L ||
1477741Sgblack@eecs.umich.edu           asi == ASI_REAL_IO_L ||
1487741Sgblack@eecs.umich.edu           asi == ASI_LDTX_REAL ||
1497741Sgblack@eecs.umich.edu           asi == ASI_LDTX_REAL_L;
1507741Sgblack@eecs.umich.edu}
1513123Sgblack@eecs.umich.edu
1527741Sgblack@eecs.umich.edubool
1537741Sgblack@eecs.umich.eduasiIsLittle(ASI asi)
1547741Sgblack@eecs.umich.edu{
1557741Sgblack@eecs.umich.edu    return asi == ASI_NL ||
1567741Sgblack@eecs.umich.edu           asi == ASI_AIUP_L ||
1577741Sgblack@eecs.umich.edu           asi == ASI_AIUS_L ||
1587741Sgblack@eecs.umich.edu           asi == ASI_REAL_L ||
1597741Sgblack@eecs.umich.edu           asi == ASI_REAL_IO_L ||
1607741Sgblack@eecs.umich.edu           asi == ASI_BLK_AIUP_L ||
1617741Sgblack@eecs.umich.edu           asi == ASI_BLK_AIUS_L ||
1627741Sgblack@eecs.umich.edu           asi == ASI_LDTX_AIUP_L ||
1637741Sgblack@eecs.umich.edu           asi == ASI_LDTX_AIUS_L ||
1647741Sgblack@eecs.umich.edu           asi == ASI_LDTX_REAL_L ||
1657741Sgblack@eecs.umich.edu           asi == ASI_LDTX_NL ||
1667741Sgblack@eecs.umich.edu           asi == ASI_PL ||
1677741Sgblack@eecs.umich.edu           asi == ASI_SL ||
1687741Sgblack@eecs.umich.edu           asi == ASI_PNFL ||
1697741Sgblack@eecs.umich.edu           asi == ASI_SNFL ||
1707741Sgblack@eecs.umich.edu           asi == ASI_PST8_PL ||
1717741Sgblack@eecs.umich.edu           asi == ASI_PST8_SL ||
1727741Sgblack@eecs.umich.edu           asi == ASI_PST16_PL ||
1737741Sgblack@eecs.umich.edu           asi == ASI_PST16_SL ||
1747741Sgblack@eecs.umich.edu           asi == ASI_PST32_PL ||
1757741Sgblack@eecs.umich.edu           asi == ASI_PST32_SL ||
1767741Sgblack@eecs.umich.edu           asi == ASI_FL8_PL ||
1777741Sgblack@eecs.umich.edu           asi == ASI_FL8_SL ||
1787741Sgblack@eecs.umich.edu           asi == ASI_FL16_PL ||
1797741Sgblack@eecs.umich.edu           asi == ASI_FL16_SL ||
1807741Sgblack@eecs.umich.edu           asi == ASI_LDTX_PL ||
1817741Sgblack@eecs.umich.edu           asi == ASI_LDTX_SL ||
1827741Sgblack@eecs.umich.edu           asi == ASI_BLK_PL ||
1837741Sgblack@eecs.umich.edu           asi == ASI_BLK_SL ||
1847741Sgblack@eecs.umich.edu           asi == ASI_LTX_L;
1857741Sgblack@eecs.umich.edu}
1867741Sgblack@eecs.umich.edu
1877741Sgblack@eecs.umich.edubool
1887741Sgblack@eecs.umich.eduasiIsTwin(ASI asi)
1897741Sgblack@eecs.umich.edu{
1907741Sgblack@eecs.umich.edu    return (asi >= ASI_LDTX_AIUP &&
1913926Ssaidi@eecs.umich.edu            asi <= ASI_LDTX_N &&
1923926Ssaidi@eecs.umich.edu            asi != ASI_QUEUE) ||
1937741Sgblack@eecs.umich.edu           (asi >= ASI_LDTX_AIUP_L &&
1943926Ssaidi@eecs.umich.edu            asi <= ASI_LDTX_NL &&
1953926Ssaidi@eecs.umich.edu            asi != 0x2D) ||
1967741Sgblack@eecs.umich.edu           asi == ASI_LDTX_P ||
1977741Sgblack@eecs.umich.edu           asi == ASI_LDTX_S ||
1987741Sgblack@eecs.umich.edu           asi == ASI_LDTX_PL ||
1997741Sgblack@eecs.umich.edu           asi == ASI_LDTX_SL;
2007741Sgblack@eecs.umich.edu}
2013123Sgblack@eecs.umich.edu
2027741Sgblack@eecs.umich.edubool
2037741Sgblack@eecs.umich.eduasiIsPartialStore(ASI asi)
2047741Sgblack@eecs.umich.edu{
2057741Sgblack@eecs.umich.edu    return asi == ASI_PST8_P ||
2067741Sgblack@eecs.umich.edu           asi == ASI_PST8_S ||
2077741Sgblack@eecs.umich.edu           asi == ASI_PST16_P ||
2087741Sgblack@eecs.umich.edu           asi == ASI_PST16_S ||
2097741Sgblack@eecs.umich.edu           asi == ASI_PST32_P ||
2107741Sgblack@eecs.umich.edu           asi == ASI_PST32_S ||
2117741Sgblack@eecs.umich.edu           asi == ASI_PST8_PL ||
2127741Sgblack@eecs.umich.edu           asi == ASI_PST8_SL ||
2137741Sgblack@eecs.umich.edu           asi == ASI_PST16_PL ||
2147741Sgblack@eecs.umich.edu           asi == ASI_PST16_SL ||
2157741Sgblack@eecs.umich.edu           asi == ASI_PST32_PL ||
2167741Sgblack@eecs.umich.edu           asi == ASI_PST32_SL;
2177741Sgblack@eecs.umich.edu}
2183123Sgblack@eecs.umich.edu
2197741Sgblack@eecs.umich.edubool
2207741Sgblack@eecs.umich.eduasiIsFloatingLoad(ASI asi)
2217741Sgblack@eecs.umich.edu{
2227741Sgblack@eecs.umich.edu    return asi == ASI_FL8_P ||
2237741Sgblack@eecs.umich.edu           asi == ASI_FL8_S ||
2247741Sgblack@eecs.umich.edu           asi == ASI_FL16_P ||
2257741Sgblack@eecs.umich.edu           asi == ASI_FL16_S ||
2267741Sgblack@eecs.umich.edu           asi == ASI_FL8_PL ||
2277741Sgblack@eecs.umich.edu           asi == ASI_FL8_SL ||
2287741Sgblack@eecs.umich.edu           asi == ASI_FL16_PL ||
2297741Sgblack@eecs.umich.edu           asi == ASI_FL16_SL;
2307741Sgblack@eecs.umich.edu}
2313123Sgblack@eecs.umich.edu
2327741Sgblack@eecs.umich.edubool
2337741Sgblack@eecs.umich.eduasiIsNoFault(ASI asi)
2347741Sgblack@eecs.umich.edu{
2357741Sgblack@eecs.umich.edu    return asi == ASI_PNF ||
2367741Sgblack@eecs.umich.edu           asi == ASI_SNF ||
2377741Sgblack@eecs.umich.edu           asi == ASI_PNFL ||
2387741Sgblack@eecs.umich.edu           asi == ASI_SNFL;
2397741Sgblack@eecs.umich.edu}
2403123Sgblack@eecs.umich.edu
2417741Sgblack@eecs.umich.edubool
2427741Sgblack@eecs.umich.eduasiIsScratchPad(ASI asi)
2437741Sgblack@eecs.umich.edu{
2447741Sgblack@eecs.umich.edu    return asi == ASI_SCRATCHPAD ||
2457741Sgblack@eecs.umich.edu           asi == ASI_HYP_SCRATCHPAD;
2467741Sgblack@eecs.umich.edu}
2473123Sgblack@eecs.umich.edu
2487741Sgblack@eecs.umich.edubool
2497741Sgblack@eecs.umich.eduasiIsCmt(ASI asi)
2507741Sgblack@eecs.umich.edu{
2517741Sgblack@eecs.umich.edu    return asi == ASI_CMT_PER_STRAND ||
2527741Sgblack@eecs.umich.edu           asi == ASI_CMT_SHARED;
2537741Sgblack@eecs.umich.edu}
2543123Sgblack@eecs.umich.edu
2557741Sgblack@eecs.umich.edubool
2567741Sgblack@eecs.umich.eduasiIsQueue(ASI asi)
2577741Sgblack@eecs.umich.edu{
2587741Sgblack@eecs.umich.edu    return asi == ASI_QUEUE;
2597741Sgblack@eecs.umich.edu}
2603123Sgblack@eecs.umich.edu
2617741Sgblack@eecs.umich.edubool
2627741Sgblack@eecs.umich.eduasiIsInterrupt(ASI asi)
2637741Sgblack@eecs.umich.edu{
2647741Sgblack@eecs.umich.edu    return asi == ASI_SWVR_INTR_RECEIVE  ||
2657741Sgblack@eecs.umich.edu           asi == ASI_SWVR_UDB_INTR_W  ||
2667741Sgblack@eecs.umich.edu           asi == ASI_SWVR_UDB_INTR_R ;
2677741Sgblack@eecs.umich.edu}
2683824Ssaidi@eecs.umich.edu
2697741Sgblack@eecs.umich.edubool
2707741Sgblack@eecs.umich.eduasiIsMmu(ASI asi)
2717741Sgblack@eecs.umich.edu{
2727741Sgblack@eecs.umich.edu    return  asi == ASI_MMU ||
2737741Sgblack@eecs.umich.edu            asi == ASI_LSU_CONTROL_REG  ||
2747741Sgblack@eecs.umich.edu           (asi >= ASI_DMMU_CTXT_ZERO_TSB_BASE_PS0 &&
2757741Sgblack@eecs.umich.edu            asi <= ASI_IMMU_CTXT_ZERO_CONFIG) ||
2767741Sgblack@eecs.umich.edu           (asi >= ASI_DMMU_CTXT_NONZERO_TSB_BASE_PS0 &&
2777741Sgblack@eecs.umich.edu            asi <= ASI_IMMU_CTXT_NONZERO_CONFIG) ||
2787741Sgblack@eecs.umich.edu           (asi >= ASI_IMMU &&
2797741Sgblack@eecs.umich.edu            asi <= ASI_IMMU_TSB_PS1_PTR_REG) ||
2807741Sgblack@eecs.umich.edu           (asi >= ASI_ITLB_DATA_IN_REG  &&
2817741Sgblack@eecs.umich.edu            asi <= ASI_TLB_INVALIDATE_ALL);
2827741Sgblack@eecs.umich.edu}
2833123Sgblack@eecs.umich.edu
2847741Sgblack@eecs.umich.edubool
2857741Sgblack@eecs.umich.eduasiIsUnPriv(ASI asi)
2867741Sgblack@eecs.umich.edu{
2877741Sgblack@eecs.umich.edu    return asi >= 0x80;
2887741Sgblack@eecs.umich.edu}
2893804Ssaidi@eecs.umich.edu
2907741Sgblack@eecs.umich.edubool
2917741Sgblack@eecs.umich.eduasiIsPriv(ASI asi)
2927741Sgblack@eecs.umich.edu{
2937741Sgblack@eecs.umich.edu    return asi <= 0x2f;
2947741Sgblack@eecs.umich.edu}
2953804Ssaidi@eecs.umich.edu
2963804Ssaidi@eecs.umich.edu
2977741Sgblack@eecs.umich.edubool
2987741Sgblack@eecs.umich.eduasiIsHPriv(ASI asi)
2997741Sgblack@eecs.umich.edu{
3007741Sgblack@eecs.umich.edu    return asi >= 0x30 && asi <= 0x7f;
3017741Sgblack@eecs.umich.edu}
3023804Ssaidi@eecs.umich.edu
3037741Sgblack@eecs.umich.edubool
3047741Sgblack@eecs.umich.eduasiIsReg(ASI asi)
3057741Sgblack@eecs.umich.edu{
3067741Sgblack@eecs.umich.edu    return asiIsMmu(asi) || asiIsScratchPad(asi) ||
3077741Sgblack@eecs.umich.edu           asiIsSparcError(asi) || asiIsInterrupt(asi)
3087741Sgblack@eecs.umich.edu           || asiIsCmt(asi);
3097741Sgblack@eecs.umich.edu}
3103825Ssaidi@eecs.umich.edu
3117741Sgblack@eecs.umich.edubool
3127741Sgblack@eecs.umich.eduasiIsSparcError(ASI asi)
3137741Sgblack@eecs.umich.edu{
3147741Sgblack@eecs.umich.edu    return asi == ASI_SPARC_ERROR_EN_REG ||
3157741Sgblack@eecs.umich.edu           asi == ASI_SPARC_ERROR_STATUS_REG;
3167741Sgblack@eecs.umich.edu}
3173804Ssaidi@eecs.umich.edu
3183123Sgblack@eecs.umich.edu}
319