X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Farch%2Fsparc%2Fasi.cc;h=73b8c16f65b1b6d2b480c5607a676d5134903780;hb=502ad1e6757116867e0e0529c0c080320a2b440b;hp=00c9e041e35a38aacca040b0c23718e02b9eb5f7;hpb=e8ced44aead3b1a11ac7747b8d38ce5dba6c09d1;p=gem5.git diff --git a/src/arch/sparc/asi.cc b/src/arch/sparc/asi.cc index 00c9e041e..73b8c16f6 100644 --- a/src/arch/sparc/asi.cc +++ b/src/arch/sparc/asi.cc @@ -26,254 +26,293 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Authors: Gabe Black + * Ali Saidi */ #include "arch/sparc/asi.hh" namespace SparcISA { - bool AsiIsBlock(ASI asi) - { - return - (asi == ASI_BLK_AIUP) || - (asi == ASI_BLK_AIUS) || - (asi == ASI_BLK_AIUPL) || - (asi == ASI_BLK_AIUSL) || - (asi == ASI_BLK_P) || - (asi == ASI_BLK_S) || - (asi == ASI_BLK_PL) || - (asi == ASI_BLK_SL); - } - bool AsiIsPrimary(ASI asi) - { - return - (asi == ASI_AIUP) || - (asi == ASI_BLK_AIUP) || - (asi == ASI_AIUPL) || - (asi == ASI_BLK_AIUPL) || - (asi == ASI_LDTX_AIUP) || - (asi == ASI_LDTX_AIUPL) || - (asi == ASI_P) || - (asi == ASI_PNF) || - (asi == ASI_PL) || - (asi == ASI_PNFL) || - (asi == ASI_PST8_P) || - (asi == ASI_PST16_P) || - (asi == ASI_PST32_P) || - (asi == ASI_PST8_PL) || - (asi == ASI_PST16_PL) || - (asi == ASI_PST32_PL) || - (asi == ASI_FL8_P) || - (asi == ASI_FL16_P) || - (asi == ASI_FL8_PL) || - (asi == ASI_FL16_PL) || - (asi == ASI_LDTX_P) || - (asi == ASI_LDTX_PL) || - (asi == ASI_BLK_P) || - (asi == ASI_BLK_PL); - } +bool +asiIsBlock(ASI asi) +{ + return asi == ASI_BLK_AIUP || + asi == ASI_BLK_AIUS || + asi == ASI_BLK_AIUP_L || + asi == ASI_BLK_AIUS_L || + asi == ASI_BLK_P || + asi == ASI_BLK_S || + asi == ASI_BLK_PL || + asi == ASI_BLK_SL; +} + +bool +asiIsPrimary(ASI asi) +{ + return asi == ASI_AIUP || + asi == ASI_BLK_AIUP || + asi == ASI_AIUP_L || + asi == ASI_BLK_AIUP_L || + asi == ASI_LDTX_AIUP || + asi == ASI_LDTX_AIUP_L || + asi == ASI_P || + asi == ASI_PNF || + asi == ASI_PL || + asi == ASI_PNFL || + asi == ASI_PST8_P || + asi == ASI_PST16_P || + asi == ASI_PST32_P || + asi == ASI_PST8_PL || + asi == ASI_PST16_PL || + asi == ASI_PST32_PL || + asi == ASI_FL8_P || + asi == ASI_FL16_P || + asi == ASI_FL8_PL || + asi == ASI_FL16_PL || + asi == ASI_LDTX_P || + asi == ASI_LDTX_PL || + asi == ASI_BLK_P || + asi == ASI_BLK_PL; +} + +bool +asiIsSecondary(ASI asi) +{ + return asi == ASI_AIUS || + asi == ASI_BLK_AIUS || + asi == ASI_AIUS_L || + asi == ASI_BLK_AIUS_L || + asi == ASI_LDTX_AIUS || + asi == ASI_LDTX_AIUS_L || + asi == ASI_S || + asi == ASI_SNF || + asi == ASI_SL || + asi == ASI_SNFL || + asi == ASI_PST8_S || + asi == ASI_PST16_S || + asi == ASI_PST32_S || + asi == ASI_PST8_SL || + asi == ASI_PST16_SL || + asi == ASI_PST32_SL || + asi == ASI_FL8_S || + asi == ASI_FL16_S || + asi == ASI_FL8_SL || + asi == ASI_FL16_SL || + asi == ASI_LDTX_S || + asi == ASI_LDTX_SL || + asi == ASI_BLK_S || + asi == ASI_BLK_SL; +} + +bool +asiIsNucleus(ASI asi) +{ + return asi == ASI_N || + asi == ASI_NL || + asi == ASI_LDTX_N || + asi == ASI_LDTX_NL; +} + +bool +asiIsAsIfUser(ASI asi) +{ + return asi == ASI_AIUP || + asi == ASI_AIUS || + asi == ASI_BLK_AIUP || + asi == ASI_BLK_AIUS || + asi == ASI_AIUP_L || + asi == ASI_AIUS_L || + asi == ASI_BLK_AIUP_L || + asi == ASI_BLK_AIUS_L || + asi == ASI_LDTX_AIUP || + asi == ASI_LDTX_AIUS || + asi == ASI_LDTX_AIUP_L || + asi == ASI_LDTX_AIUS_L; +} + +bool +asiIsIO(ASI asi) +{ + return asi == ASI_REAL_IO || + asi == ASI_REAL_IO_L; +} + +bool +asiIsReal(ASI asi) +{ + return asi == ASI_REAL || + asi == ASI_REAL_IO || + asi == ASI_REAL_L || + asi == ASI_REAL_IO_L || + asi == ASI_LDTX_REAL || + asi == ASI_LDTX_REAL_L; +} + +bool +asiIsLittle(ASI asi) +{ + return asi == ASI_NL || + asi == ASI_AIUP_L || + asi == ASI_AIUS_L || + asi == ASI_REAL_L || + asi == ASI_REAL_IO_L || + asi == ASI_BLK_AIUP_L || + asi == ASI_BLK_AIUS_L || + asi == ASI_LDTX_AIUP_L || + asi == ASI_LDTX_AIUS_L || + asi == ASI_LDTX_REAL_L || + asi == ASI_LDTX_NL || + asi == ASI_PL || + asi == ASI_SL || + asi == ASI_PNFL || + asi == ASI_SNFL || + asi == ASI_PST8_PL || + asi == ASI_PST8_SL || + asi == ASI_PST16_PL || + asi == ASI_PST16_SL || + asi == ASI_PST32_PL || + asi == ASI_PST32_SL || + asi == ASI_FL8_PL || + asi == ASI_FL8_SL || + asi == ASI_FL16_PL || + asi == ASI_FL16_SL || + asi == ASI_LDTX_PL || + asi == ASI_LDTX_SL || + asi == ASI_BLK_PL || + asi == ASI_BLK_SL || + asi == ASI_LTX_L; +} + +bool +asiIsTwin(ASI asi) +{ + return (asi >= ASI_LDTX_AIUP && + asi <= ASI_LDTX_N && + asi != ASI_QUEUE) || + (asi >= ASI_LDTX_AIUP_L && + asi <= ASI_LDTX_NL && + asi != 0x2D) || + asi == ASI_LDTX_P || + asi == ASI_LDTX_S || + asi == ASI_LDTX_PL || + asi == ASI_LDTX_SL; +} - bool AsiIsSecondary(ASI asi) - { - return - (asi == ASI_AIUS) || - (asi == ASI_BLK_AIUS) || - (asi == ASI_AIUSL) || - (asi == ASI_BLK_AIUSL) || - (asi == ASI_LDTX_AIUS) || - (asi == ASI_LDTX_AIUSL) || - (asi == ASI_S) || - (asi == ASI_SNF) || - (asi == ASI_SL) || - (asi == ASI_SNFL) || - (asi == ASI_PST8_S) || - (asi == ASI_PST16_S) || - (asi == ASI_PST32_S) || - (asi == ASI_PST8_SL) || - (asi == ASI_PST16_SL) || - (asi == ASI_PST32_SL) || - (asi == ASI_FL8_S) || - (asi == ASI_FL16_S) || - (asi == ASI_FL8_SL) || - (asi == ASI_FL16_SL) || - (asi == ASI_LDTX_S) || - (asi == ASI_LDTX_SL) || - (asi == ASI_BLK_S) || - (asi == ASI_BLK_SL); - } +bool +asiIsPartialStore(ASI asi) +{ + return asi == ASI_PST8_P || + asi == ASI_PST8_S || + asi == ASI_PST16_P || + asi == ASI_PST16_S || + asi == ASI_PST32_P || + asi == ASI_PST32_S || + asi == ASI_PST8_PL || + asi == ASI_PST8_SL || + asi == ASI_PST16_PL || + asi == ASI_PST16_SL || + asi == ASI_PST32_PL || + asi == ASI_PST32_SL; +} - bool AsiNucleus(ASI asi) - { - return - (asi == ASI_N) || - (asi == ASI_NL) || - (asi == ASI_LDTX_N) || - (asi == ASI_LDTX_NL); - } +bool +asiIsFloatingLoad(ASI asi) +{ + return asi == ASI_FL8_P || + asi == ASI_FL8_S || + asi == ASI_FL16_P || + asi == ASI_FL16_S || + asi == ASI_FL8_PL || + asi == ASI_FL8_SL || + asi == ASI_FL16_PL || + asi == ASI_FL16_SL; +} - bool AsiIsAsIfUser(ASI asi) - { - return - (asi == ASI_AIUP) || - (asi == ASI_AIUS) || - (asi == ASI_BLK_AIUP) || - (asi == ASI_BLK_AIUS) || - (asi == ASI_AIUPL) || - (asi == ASI_AIUSL) || - (asi == ASI_BLK_AIUPL) || - (asi == ASI_BLK_AIUSL) || - (asi == ASI_LDTX_AIUP) || - (asi == ASI_LDTX_AIUS) || - (asi == ASI_LDTX_AIUPL) || - (asi == ASI_LDTX_AIUSL); - } +bool +asiIsNoFault(ASI asi) +{ + return asi == ASI_PNF || + asi == ASI_SNF || + asi == ASI_PNFL || + asi == ASI_SNFL; +} - bool AsiIsIO(ASI asi) - { - return - (asi == ASI_REAL_IO) || - (asi == ASI_REAL_IO_L); - } +bool +asiIsScratchPad(ASI asi) +{ + return asi == ASI_SCRATCHPAD || + asi == ASI_HYP_SCRATCHPAD; +} - bool AsiIsReal(ASI asi) - { - return - (asi == ASI_REAL) || - (asi == ASI_REAL_IO) || - (asi == ASI_REAL_L) || - (asi == ASI_REAL_IO_L) || - (asi == ASI_LDTX_REAL) || - (asi == ASI_LDTX_REAL_L) || - (asi == ASI_MMU_REAL); - } +bool +asiIsCmt(ASI asi) +{ + return asi == ASI_CMT_PER_STRAND || + asi == ASI_CMT_SHARED; +} - bool AsiIsLittle(ASI asi) - { - return - (asi == ASI_NL) || - (asi == ASI_AIUPL) || - (asi == ASI_AIUSL) || - (asi == ASI_REAL_L) || - (asi == ASI_REAL_IO_L) || - (asi == ASI_BLK_AIUPL) || - (asi == ASI_BLK_AIUSL) || - (asi == ASI_LDTX_AIUPL) || - (asi == ASI_LDTX_AIUSL) || - (asi == ASI_LDTX_REAL_L) || - (asi == ASI_LDTX_NL) || - (asi == ASI_PL) || - (asi == ASI_SL) || - (asi == ASI_PNFL) || - (asi == ASI_SNFL) || - (asi == ASI_PST8_PL) || - (asi == ASI_PST8_SL) || - (asi == ASI_PST16_PL) || - (asi == ASI_PST16_SL) || - (asi == ASI_PST32_PL) || - (asi == ASI_PST32_SL) || - (asi == ASI_FL8_PL) || - (asi == ASI_FL8_SL) || - (asi == ASI_FL16_PL) || - (asi == ASI_FL16_SL) || - (asi == ASI_LDTX_PL) || - (asi == ASI_LDTX_SL) || - (asi == ASI_BLK_PL) || - (asi == ASI_BLK_SL); - } +bool +asiIsQueue(ASI asi) +{ + return asi == ASI_QUEUE; +} - bool AsiIsTwin(ASI asi) - { - return - (asi == ASI_LDTX_AIUP) || - (asi == ASI_LDTX_AIUS) || - (asi == ASI_LDTX_REAL) || - (asi == ASI_LDTX_N) || - (asi == ASI_LDTX_AIUPL) || - (asi == ASI_LDTX_AIUSL) || - (asi == ASI_LDTX_REAL_L) || - (asi == ASI_LDTX_NL) || - (asi == ASI_LDTX_P) || - (asi == ASI_LDTX_S) || - (asi == ASI_LDTX_PL) || - (asi == ASI_LDTX_SL); - } +bool +asiIsInterrupt(ASI asi) +{ + return asi == ASI_SWVR_INTR_RECEIVE || + asi == ASI_SWVR_UDB_INTR_W || + asi == ASI_SWVR_UDB_INTR_R ; +} - bool AsiIsPartialStore(ASI asi) - { - return - (asi == ASI_PST8_P) || - (asi == ASI_PST8_S) || - (asi == ASI_PST16_P) || - (asi == ASI_PST16_S) || - (asi == ASI_PST32_P) || - (asi == ASI_PST32_S) || - (asi == ASI_PST8_PL) || - (asi == ASI_PST8_SL) || - (asi == ASI_PST16_PL) || - (asi == ASI_PST16_SL) || - (asi == ASI_PST32_PL) || - (asi == ASI_PST32_SL); - } +bool +asiIsMmu(ASI asi) +{ + return asi == ASI_MMU || + asi == ASI_LSU_CONTROL_REG || + (asi >= ASI_DMMU_CTXT_ZERO_TSB_BASE_PS0 && + asi <= ASI_IMMU_CTXT_ZERO_CONFIG) || + (asi >= ASI_DMMU_CTXT_NONZERO_TSB_BASE_PS0 && + asi <= ASI_IMMU_CTXT_NONZERO_CONFIG) || + (asi >= ASI_IMMU && + asi <= ASI_IMMU_TSB_PS1_PTR_REG) || + (asi >= ASI_ITLB_DATA_IN_REG && + asi <= ASI_TLB_INVALIDATE_ALL); +} - bool AsiIsFloatingLoad(ASI asi) - { - return - (asi == ASI_FL8_P) || - (asi == ASI_FL8_S) || - (asi == ASI_FL16_P) || - (asi == ASI_FL16_S) || - (asi == ASI_FL8_PL) || - (asi == ASI_FL8_SL) || - (asi == ASI_FL16_PL) || - (asi == ASI_FL16_SL); - } +bool +asiIsUnPriv(ASI asi) +{ + return asi >= 0x80; +} - bool AsiIsNoFault(ASI asi) - { - return - (asi == ASI_PNF) || - (asi == ASI_SNF) || - (asi == ASI_PNFL) || - (asi == ASI_SNFL); - } +bool +asiIsPriv(ASI asi) +{ + return asi <= 0x2f; +} - bool AsiIsScratchPad(ASI asi) - { - return - (asi == ASI_SCRATCHPAD) || - (asi == ASI_HYP_SCRATCHPAD); - } - bool AsiIsCmt(ASI asi) - { - return - (asi == ASI_CMT_PER_STRAND) || - (asi == ASI_CMT_SHARED); - } +bool +asiIsHPriv(ASI asi) +{ + return asi >= 0x30 && asi <= 0x7f; +} - bool AsiIsQueue(ASI asi) - { - return asi == ASI_QUEUE; - } +bool +asiIsReg(ASI asi) +{ + return asiIsMmu(asi) || asiIsScratchPad(asi) || + asiIsSparcError(asi) || asiIsInterrupt(asi) + || asiIsCmt(asi); +} - bool AsiIsDtlb(ASI asi) - { - return - (asi == ASI_DTLB_DATA_IN_REG) || - (asi == ASI_DTLB_DATA_ACCESS_REG) || - (asi == ASI_DTLB_TAG_READ_REG); - } +bool +asiIsSparcError(ASI asi) +{ + return asi == ASI_SPARC_ERROR_EN_REG || + asi == ASI_SPARC_ERROR_STATUS_REG; +} - bool AsiIsMmu(ASI asi) - { - return - (asi == ASI_MMU_CONTEXTID) || - (asi == ASI_IMMU) || - (asi == ASI_MMU_REAL) || - (asi == ASI_MMU) || - (asi == ASI_DMMU) || - (asi == ASI_UMMU) || - (asi == ASI_DMMU_DEMAP); - } }