18582Sgblack@eecs.umich.edu/*
28582Sgblack@eecs.umich.edu * Copyright (c) 2011 Google
38582Sgblack@eecs.umich.edu * All rights reserved.
48582Sgblack@eecs.umich.edu *
58582Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
68582Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
78582Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
88582Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
98582Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
108582Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
118582Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
128582Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
138582Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
148582Sgblack@eecs.umich.edu * this software without specific prior written permission.
158582Sgblack@eecs.umich.edu *
168582Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
178582Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
188582Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
198582Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
208582Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
218582Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
228582Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
238582Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
248582Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
258582Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
268582Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
278582Sgblack@eecs.umich.edu *
288582Sgblack@eecs.umich.edu * Authors: Gabe Black
298582Sgblack@eecs.umich.edu */
308582Sgblack@eecs.umich.edu
318582Sgblack@eecs.umich.edu#include "arch/x86/regs/msr.hh"
328582Sgblack@eecs.umich.edu
338582Sgblack@eecs.umich.edunamespace X86ISA
348582Sgblack@eecs.umich.edu{
358582Sgblack@eecs.umich.edu
368582Sgblack@eecs.umich.edutypedef MsrMap::value_type MsrVal;
378582Sgblack@eecs.umich.edu
388582Sgblack@eecs.umich.educonst MsrMap::value_type msrMapData[] = {
398582Sgblack@eecs.umich.edu    MsrVal(0x10, MISCREG_TSC),
408582Sgblack@eecs.umich.edu    MsrVal(0x1B, MISCREG_APIC_BASE),
418582Sgblack@eecs.umich.edu    MsrVal(0xFE, MISCREG_MTRRCAP),
428582Sgblack@eecs.umich.edu    MsrVal(0x174, MISCREG_SYSENTER_CS),
438582Sgblack@eecs.umich.edu    MsrVal(0x175, MISCREG_SYSENTER_ESP),
448582Sgblack@eecs.umich.edu    MsrVal(0x176, MISCREG_SYSENTER_EIP),
458582Sgblack@eecs.umich.edu    MsrVal(0x179, MISCREG_MCG_CAP),
468582Sgblack@eecs.umich.edu    MsrVal(0x17A, MISCREG_MCG_STATUS),
478582Sgblack@eecs.umich.edu    MsrVal(0x17B, MISCREG_MCG_CTL),
488582Sgblack@eecs.umich.edu    MsrVal(0x1D9, MISCREG_DEBUG_CTL_MSR),
498582Sgblack@eecs.umich.edu    MsrVal(0x1DB, MISCREG_LAST_BRANCH_FROM_IP),
508582Sgblack@eecs.umich.edu    MsrVal(0x1DC, MISCREG_LAST_BRANCH_TO_IP),
518582Sgblack@eecs.umich.edu    MsrVal(0x1DD, MISCREG_LAST_EXCEPTION_FROM_IP),
528582Sgblack@eecs.umich.edu    MsrVal(0x1DE, MISCREG_LAST_EXCEPTION_TO_IP),
538582Sgblack@eecs.umich.edu    MsrVal(0x200, MISCREG_MTRR_PHYS_BASE_0),
548582Sgblack@eecs.umich.edu    MsrVal(0x201, MISCREG_MTRR_PHYS_MASK_0),
558582Sgblack@eecs.umich.edu    MsrVal(0x202, MISCREG_MTRR_PHYS_BASE_1),
568582Sgblack@eecs.umich.edu    MsrVal(0x203, MISCREG_MTRR_PHYS_MASK_1),
578582Sgblack@eecs.umich.edu    MsrVal(0x204, MISCREG_MTRR_PHYS_BASE_2),
588582Sgblack@eecs.umich.edu    MsrVal(0x205, MISCREG_MTRR_PHYS_MASK_2),
598582Sgblack@eecs.umich.edu    MsrVal(0x206, MISCREG_MTRR_PHYS_BASE_3),
608582Sgblack@eecs.umich.edu    MsrVal(0x207, MISCREG_MTRR_PHYS_MASK_3),
618582Sgblack@eecs.umich.edu    MsrVal(0x208, MISCREG_MTRR_PHYS_BASE_4),
628582Sgblack@eecs.umich.edu    MsrVal(0x209, MISCREG_MTRR_PHYS_MASK_4),
638582Sgblack@eecs.umich.edu    MsrVal(0x20A, MISCREG_MTRR_PHYS_BASE_5),
648582Sgblack@eecs.umich.edu    MsrVal(0x20B, MISCREG_MTRR_PHYS_MASK_5),
658582Sgblack@eecs.umich.edu    MsrVal(0x20C, MISCREG_MTRR_PHYS_BASE_6),
668582Sgblack@eecs.umich.edu    MsrVal(0x20D, MISCREG_MTRR_PHYS_MASK_6),
678582Sgblack@eecs.umich.edu    MsrVal(0x20E, MISCREG_MTRR_PHYS_BASE_7),
688582Sgblack@eecs.umich.edu    MsrVal(0x20F, MISCREG_MTRR_PHYS_MASK_7),
698582Sgblack@eecs.umich.edu    MsrVal(0x250, MISCREG_MTRR_FIX_64K_00000),
708582Sgblack@eecs.umich.edu    MsrVal(0x258, MISCREG_MTRR_FIX_16K_80000),
718582Sgblack@eecs.umich.edu    MsrVal(0x259, MISCREG_MTRR_FIX_16K_A0000),
728582Sgblack@eecs.umich.edu    MsrVal(0x268, MISCREG_MTRR_FIX_4K_C0000),
738582Sgblack@eecs.umich.edu    MsrVal(0x269, MISCREG_MTRR_FIX_4K_C8000),
748582Sgblack@eecs.umich.edu    MsrVal(0x26A, MISCREG_MTRR_FIX_4K_D0000),
758582Sgblack@eecs.umich.edu    MsrVal(0x26B, MISCREG_MTRR_FIX_4K_D8000),
768582Sgblack@eecs.umich.edu    MsrVal(0x26C, MISCREG_MTRR_FIX_4K_E0000),
778582Sgblack@eecs.umich.edu    MsrVal(0x26D, MISCREG_MTRR_FIX_4K_E8000),
788582Sgblack@eecs.umich.edu    MsrVal(0x26E, MISCREG_MTRR_FIX_4K_F0000),
798582Sgblack@eecs.umich.edu    MsrVal(0x26F, MISCREG_MTRR_FIX_4K_F8000),
808582Sgblack@eecs.umich.edu    MsrVal(0x277, MISCREG_PAT),
818582Sgblack@eecs.umich.edu    MsrVal(0x2FF, MISCREG_DEF_TYPE),
828582Sgblack@eecs.umich.edu    MsrVal(0x400, MISCREG_MC0_CTL),
838582Sgblack@eecs.umich.edu    MsrVal(0x404, MISCREG_MC1_CTL),
848582Sgblack@eecs.umich.edu    MsrVal(0x408, MISCREG_MC2_CTL),
858582Sgblack@eecs.umich.edu    MsrVal(0x40C, MISCREG_MC3_CTL),
868582Sgblack@eecs.umich.edu    MsrVal(0x410, MISCREG_MC4_CTL),
878582Sgblack@eecs.umich.edu    MsrVal(0x414, MISCREG_MC5_CTL),
888582Sgblack@eecs.umich.edu    MsrVal(0x418, MISCREG_MC6_CTL),
898582Sgblack@eecs.umich.edu    MsrVal(0x41C, MISCREG_MC7_CTL),
908582Sgblack@eecs.umich.edu    MsrVal(0x401, MISCREG_MC0_STATUS),
918582Sgblack@eecs.umich.edu    MsrVal(0x405, MISCREG_MC1_STATUS),
928582Sgblack@eecs.umich.edu    MsrVal(0x409, MISCREG_MC2_STATUS),
938582Sgblack@eecs.umich.edu    MsrVal(0x40D, MISCREG_MC3_STATUS),
948582Sgblack@eecs.umich.edu    MsrVal(0x411, MISCREG_MC4_STATUS),
958582Sgblack@eecs.umich.edu    MsrVal(0x415, MISCREG_MC5_STATUS),
968582Sgblack@eecs.umich.edu    MsrVal(0x419, MISCREG_MC6_STATUS),
978582Sgblack@eecs.umich.edu    MsrVal(0x41D, MISCREG_MC7_STATUS),
988582Sgblack@eecs.umich.edu    MsrVal(0x402, MISCREG_MC0_ADDR),
998582Sgblack@eecs.umich.edu    MsrVal(0x406, MISCREG_MC1_ADDR),
1008582Sgblack@eecs.umich.edu    MsrVal(0x40A, MISCREG_MC2_ADDR),
1018582Sgblack@eecs.umich.edu    MsrVal(0x40E, MISCREG_MC3_ADDR),
1028582Sgblack@eecs.umich.edu    MsrVal(0x412, MISCREG_MC4_ADDR),
1038582Sgblack@eecs.umich.edu    MsrVal(0x416, MISCREG_MC5_ADDR),
1048582Sgblack@eecs.umich.edu    MsrVal(0x41A, MISCREG_MC6_ADDR),
1058582Sgblack@eecs.umich.edu    MsrVal(0x41E, MISCREG_MC7_ADDR),
1068582Sgblack@eecs.umich.edu    MsrVal(0x403, MISCREG_MC0_MISC),
1078582Sgblack@eecs.umich.edu    MsrVal(0x407, MISCREG_MC1_MISC),
1088582Sgblack@eecs.umich.edu    MsrVal(0x40B, MISCREG_MC2_MISC),
1098582Sgblack@eecs.umich.edu    MsrVal(0x40F, MISCREG_MC3_MISC),
1108582Sgblack@eecs.umich.edu    MsrVal(0x413, MISCREG_MC4_MISC),
1118582Sgblack@eecs.umich.edu    MsrVal(0x417, MISCREG_MC5_MISC),
1128582Sgblack@eecs.umich.edu    MsrVal(0x41B, MISCREG_MC6_MISC),
1138582Sgblack@eecs.umich.edu    MsrVal(0x41F, MISCREG_MC7_MISC),
1148582Sgblack@eecs.umich.edu    MsrVal(0xC0000080, MISCREG_EFER),
1158582Sgblack@eecs.umich.edu    MsrVal(0xC0000081, MISCREG_STAR),
1168582Sgblack@eecs.umich.edu    MsrVal(0xC0000082, MISCREG_LSTAR),
1178582Sgblack@eecs.umich.edu    MsrVal(0xC0000083, MISCREG_CSTAR),
1188582Sgblack@eecs.umich.edu    MsrVal(0xC0000084, MISCREG_SF_MASK),
1198582Sgblack@eecs.umich.edu    MsrVal(0xC0000100, MISCREG_FS_BASE),
1208582Sgblack@eecs.umich.edu    MsrVal(0xC0000101, MISCREG_GS_BASE),
1218582Sgblack@eecs.umich.edu    MsrVal(0xC0000102, MISCREG_KERNEL_GS_BASE),
1228582Sgblack@eecs.umich.edu    MsrVal(0xC0000103, MISCREG_TSC_AUX),
1238582Sgblack@eecs.umich.edu    MsrVal(0xC0010000, MISCREG_PERF_EVT_SEL0),
1248582Sgblack@eecs.umich.edu    MsrVal(0xC0010001, MISCREG_PERF_EVT_SEL1),
1258582Sgblack@eecs.umich.edu    MsrVal(0xC0010002, MISCREG_PERF_EVT_SEL2),
1268582Sgblack@eecs.umich.edu    MsrVal(0xC0010003, MISCREG_PERF_EVT_SEL3),
1278582Sgblack@eecs.umich.edu    MsrVal(0xC0010004, MISCREG_PERF_EVT_CTR0),
1288582Sgblack@eecs.umich.edu    MsrVal(0xC0010005, MISCREG_PERF_EVT_CTR1),
1298582Sgblack@eecs.umich.edu    MsrVal(0xC0010006, MISCREG_PERF_EVT_CTR2),
1308582Sgblack@eecs.umich.edu    MsrVal(0xC0010007, MISCREG_PERF_EVT_CTR3),
1318582Sgblack@eecs.umich.edu    MsrVal(0xC0010010, MISCREG_SYSCFG),
1328582Sgblack@eecs.umich.edu    MsrVal(0xC0010016, MISCREG_IORR_BASE0),
1338582Sgblack@eecs.umich.edu    MsrVal(0xC0010017, MISCREG_IORR_BASE1),
1348582Sgblack@eecs.umich.edu    MsrVal(0xC0010018, MISCREG_IORR_MASK0),
1358582Sgblack@eecs.umich.edu    MsrVal(0xC0010019, MISCREG_IORR_MASK1),
1368582Sgblack@eecs.umich.edu    MsrVal(0xC001001A, MISCREG_TOP_MEM),
1378582Sgblack@eecs.umich.edu    MsrVal(0xC001001D, MISCREG_TOP_MEM2),
1388582Sgblack@eecs.umich.edu    MsrVal(0xC0010114, MISCREG_VM_CR),
1398582Sgblack@eecs.umich.edu    MsrVal(0xC0010115, MISCREG_IGNNE),
1408582Sgblack@eecs.umich.edu    MsrVal(0xC0010116, MISCREG_SMM_CTL),
1418582Sgblack@eecs.umich.edu    MsrVal(0xC0010117, MISCREG_VM_HSAVE_PA)
1428582Sgblack@eecs.umich.edu};
1438582Sgblack@eecs.umich.edu
1448582Sgblack@eecs.umich.edustatic const unsigned msrMapSize = sizeof(msrMapData) / sizeof(msrMapData[0]);
1458582Sgblack@eecs.umich.edu
1469875Sandreas@sandberg.pp.seconst MsrMap msrMap(msrMapData, msrMapData + msrMapSize);
1478582Sgblack@eecs.umich.edu
1488582Sgblack@eecs.umich.edubool
1498582Sgblack@eecs.umich.edumsrAddrToIndex(MiscRegIndex &regNum, Addr addr)
1508582Sgblack@eecs.umich.edu{
1519875Sandreas@sandberg.pp.se    MsrMap::const_iterator it(msrMap.find(addr));
1528582Sgblack@eecs.umich.edu    if (it == msrMap.end()) {
1538582Sgblack@eecs.umich.edu        return false;
1548582Sgblack@eecs.umich.edu    } else {
1558582Sgblack@eecs.umich.edu        regNum = it->second;
1568582Sgblack@eecs.umich.edu        return true;
1578582Sgblack@eecs.umich.edu    }
1588582Sgblack@eecs.umich.edu}
1598582Sgblack@eecs.umich.edu
1608582Sgblack@eecs.umich.edu} // namespace X86ISA
161