isa.hh revision 6718
15389Sgblack@eecs.umich.edu/* 25389Sgblack@eecs.umich.edu * Copyright (c) 2009 The Regents of The University of Michigan 35389Sgblack@eecs.umich.edu * All rights reserved. 45389Sgblack@eecs.umich.edu * 55389Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 65389Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 75389Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 85389Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 95389Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 105389Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 115389Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 125389Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 135389Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 145389Sgblack@eecs.umich.edu * this software without specific prior written permission. 155389Sgblack@eecs.umich.edu * 165389Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 175389Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 185389Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 195389Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 205389Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 215389Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 225389Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 235389Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245389Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255389Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265389Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275389Sgblack@eecs.umich.edu * 285389Sgblack@eecs.umich.edu * Authors: Gabe Black 295389Sgblack@eecs.umich.edu */ 305389Sgblack@eecs.umich.edu 315389Sgblack@eecs.umich.edu#ifndef __ARCH_ARM_ISA_HH__ 325389Sgblack@eecs.umich.edu#define __ARCH_MRM_ISA_HH__ 335389Sgblack@eecs.umich.edu 345389Sgblack@eecs.umich.edu#include "arch/arm/registers.hh" 355389Sgblack@eecs.umich.edu#include "arch/arm/types.hh" 365389Sgblack@eecs.umich.edu 375389Sgblack@eecs.umich.educlass ThreadContext; 385389Sgblack@eecs.umich.educlass Checkpoint; 395389Sgblack@eecs.umich.educlass EventManager; 405389Sgblack@eecs.umich.edu 415389Sgblack@eecs.umich.edunamespace ArmISA 425389Sgblack@eecs.umich.edu{ 435389Sgblack@eecs.umich.edu class ISA 445389Sgblack@eecs.umich.edu { 455389Sgblack@eecs.umich.edu protected: 465389Sgblack@eecs.umich.edu MiscReg miscRegs[NumMiscRegs]; 475389Sgblack@eecs.umich.edu const IntRegIndex *intRegMap; 485389Sgblack@eecs.umich.edu 495389Sgblack@eecs.umich.edu void 505389Sgblack@eecs.umich.edu updateRegMap(CPSR cpsr) 515389Sgblack@eecs.umich.edu { 525389Sgblack@eecs.umich.edu switch (cpsr.mode) { 535389Sgblack@eecs.umich.edu case MODE_USER: 545389Sgblack@eecs.umich.edu case MODE_SYSTEM: 555389Sgblack@eecs.umich.edu intRegMap = IntRegUsrMap; 565389Sgblack@eecs.umich.edu break; 575389Sgblack@eecs.umich.edu case MODE_FIQ: 585389Sgblack@eecs.umich.edu intRegMap = IntRegFiqMap; 595389Sgblack@eecs.umich.edu break; 605389Sgblack@eecs.umich.edu case MODE_IRQ: 615389Sgblack@eecs.umich.edu intRegMap = IntRegIrqMap; 625389Sgblack@eecs.umich.edu break; 635389Sgblack@eecs.umich.edu case MODE_SVC: 645389Sgblack@eecs.umich.edu intRegMap = IntRegSvcMap; 655389Sgblack@eecs.umich.edu break; 665389Sgblack@eecs.umich.edu case MODE_ABORT: 675389Sgblack@eecs.umich.edu intRegMap = IntRegAbtMap; 685389Sgblack@eecs.umich.edu break; 695389Sgblack@eecs.umich.edu case MODE_UNDEFINED: 705389Sgblack@eecs.umich.edu intRegMap = IntRegUndMap; 715389Sgblack@eecs.umich.edu break; 725389Sgblack@eecs.umich.edu default: 735389Sgblack@eecs.umich.edu panic("Unrecognized mode setting in CPSR.\n"); 745389Sgblack@eecs.umich.edu } 755389Sgblack@eecs.umich.edu } 765389Sgblack@eecs.umich.edu 775389Sgblack@eecs.umich.edu public: 785389Sgblack@eecs.umich.edu void clear() 795389Sgblack@eecs.umich.edu { 805389Sgblack@eecs.umich.edu memset(miscRegs, 0, sizeof(miscRegs)); 815389Sgblack@eecs.umich.edu CPSR cpsr = 0; 825389Sgblack@eecs.umich.edu cpsr.mode = MODE_SYSTEM; 835389Sgblack@eecs.umich.edu miscRegs[MISCREG_CPSR] = cpsr; 845389Sgblack@eecs.umich.edu updateRegMap(cpsr); 855389Sgblack@eecs.umich.edu //XXX We need to initialize the rest of the state. 865389Sgblack@eecs.umich.edu } 875389Sgblack@eecs.umich.edu 885389Sgblack@eecs.umich.edu MiscReg 895389Sgblack@eecs.umich.edu readMiscRegNoEffect(int misc_reg) 905389Sgblack@eecs.umich.edu { 915389Sgblack@eecs.umich.edu assert(misc_reg < NumMiscRegs); 925389Sgblack@eecs.umich.edu return miscRegs[misc_reg]; 93 } 94 95 MiscReg 96 readMiscReg(int misc_reg, ThreadContext *tc) 97 { 98 assert(misc_reg < NumMiscRegs); 99 return miscRegs[misc_reg]; 100 } 101 102 void 103 setMiscRegNoEffect(int misc_reg, const MiscReg &val) 104 { 105 assert(misc_reg < NumMiscRegs); 106 miscRegs[misc_reg] = val; 107 } 108 109 void 110 setMiscReg(int misc_reg, const MiscReg &val, ThreadContext *tc) 111 { 112 if (misc_reg == MISCREG_CPSR) { 113 updateRegMap(val); 114 } 115 assert(misc_reg < NumMiscRegs); 116 miscRegs[misc_reg] = val; 117 } 118 119 int 120 flattenIntIndex(int reg) 121 { 122 assert(reg >= 0); 123 if (reg < NUM_ARCH_INTREGS) { 124 return intRegMap[reg]; 125 } else { 126 assert(reg < NUM_INTREGS); 127 return reg; 128 } 129 } 130 131 int 132 flattenFloatIndex(int reg) 133 { 134 return reg; 135 } 136 137 void serialize(EventManager *em, std::ostream &os) 138 {} 139 void unserialize(EventManager *em, Checkpoint *cp, 140 const std::string §ion) 141 {} 142 143 ISA() 144 { 145 clear(); 146 } 147 }; 148} 149 150#endif 151