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