isa.cc revision 13614
15818Sgblack@eecs.umich.edu/* 25818Sgblack@eecs.umich.edu * Copyright (c) 2009 The Regents of The University of Michigan 35818Sgblack@eecs.umich.edu * All rights reserved. 45818Sgblack@eecs.umich.edu * 55818Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 65818Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 75818Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 85818Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 95818Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 105818Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 115818Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 125818Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 135818Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 145818Sgblack@eecs.umich.edu * this software without specific prior written permission. 155818Sgblack@eecs.umich.edu * 165818Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 175818Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 185818Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 195818Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 205818Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 215818Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 225818Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 235818Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245818Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255818Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265818Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275818Sgblack@eecs.umich.edu * 285818Sgblack@eecs.umich.edu * Authors: Gabe Black 295818Sgblack@eecs.umich.edu */ 305818Sgblack@eecs.umich.edu 315818Sgblack@eecs.umich.edu#include "arch/alpha/isa.hh" 325818Sgblack@eecs.umich.edu 335818Sgblack@eecs.umich.edu#include <cassert> 345818Sgblack@eecs.umich.edu 355818Sgblack@eecs.umich.edu#include "base/logging.hh" 365818Sgblack@eecs.umich.edu#include "cpu/thread_context.hh" 375818Sgblack@eecs.umich.edu#include "params/AlphaISA.hh" 385818Sgblack@eecs.umich.edu#include "sim/serialize.hh" 395818Sgblack@eecs.umich.edu 405818Sgblack@eecs.umich.edunamespace AlphaISA 415818Sgblack@eecs.umich.edu{ 425818Sgblack@eecs.umich.edu 435818Sgblack@eecs.umich.eduISA::ISA(Params *p) 445818Sgblack@eecs.umich.edu : SimObject(p), system(p->system) 455818Sgblack@eecs.umich.edu{ 465818Sgblack@eecs.umich.edu clear(); 475818Sgblack@eecs.umich.edu initializeIprTable(); 485818Sgblack@eecs.umich.edu} 495818Sgblack@eecs.umich.edu 505818Sgblack@eecs.umich.educonst AlphaISAParams * 515818Sgblack@eecs.umich.eduISA::params() const 525818Sgblack@eecs.umich.edu{ 535818Sgblack@eecs.umich.edu return dynamic_cast<const Params *>(_params); 545818Sgblack@eecs.umich.edu} 555818Sgblack@eecs.umich.edu 565818Sgblack@eecs.umich.eduvoid 575818Sgblack@eecs.umich.eduISA::serialize(CheckpointOut &cp) const 585818Sgblack@eecs.umich.edu{ 595818Sgblack@eecs.umich.edu SERIALIZE_SCALAR(fpcr); 605818Sgblack@eecs.umich.edu SERIALIZE_SCALAR(uniq); 615818Sgblack@eecs.umich.edu SERIALIZE_SCALAR(lock_flag); 627903Shestness@cs.utexas.edu SERIALIZE_SCALAR(lock_addr); 637903Shestness@cs.utexas.edu SERIALIZE_ARRAY(ipr, NumInternalProcRegs); 647903Shestness@cs.utexas.edu} 655818Sgblack@eecs.umich.edu 665818Sgblack@eecs.umich.eduvoid 677811Ssteve.reinhardt@amd.comISA::unserialize(CheckpointIn &cp) 685818Sgblack@eecs.umich.edu{ 695818Sgblack@eecs.umich.edu UNSERIALIZE_SCALAR(fpcr); 70 UNSERIALIZE_SCALAR(uniq); 71 UNSERIALIZE_SCALAR(lock_flag); 72 UNSERIALIZE_SCALAR(lock_addr); 73 UNSERIALIZE_ARRAY(ipr, NumInternalProcRegs); 74} 75 76 77RegVal 78ISA::readMiscRegNoEffect(int misc_reg, ThreadID tid) const 79{ 80 switch (misc_reg) { 81 case MISCREG_FPCR: 82 return fpcr; 83 case MISCREG_UNIQ: 84 return uniq; 85 case MISCREG_LOCKFLAG: 86 return lock_flag; 87 case MISCREG_LOCKADDR: 88 return lock_addr; 89 case MISCREG_INTR: 90 return intr_flag; 91 default: 92 assert(misc_reg < NumInternalProcRegs); 93 return ipr[misc_reg]; 94 } 95} 96 97RegVal 98ISA::readMiscReg(int misc_reg, ThreadContext *tc, ThreadID tid) 99{ 100 switch (misc_reg) { 101 case MISCREG_FPCR: 102 return fpcr; 103 case MISCREG_UNIQ: 104 return uniq; 105 case MISCREG_LOCKFLAG: 106 return lock_flag; 107 case MISCREG_LOCKADDR: 108 return lock_addr; 109 case MISCREG_INTR: 110 return intr_flag; 111 default: 112 return readIpr(misc_reg, tc); 113 } 114} 115 116void 117ISA::setMiscRegNoEffect(int misc_reg, RegVal val, ThreadID tid) 118{ 119 switch (misc_reg) { 120 case MISCREG_FPCR: 121 fpcr = val; 122 return; 123 case MISCREG_UNIQ: 124 uniq = val; 125 return; 126 case MISCREG_LOCKFLAG: 127 lock_flag = val; 128 return; 129 case MISCREG_LOCKADDR: 130 lock_addr = val; 131 return; 132 case MISCREG_INTR: 133 intr_flag = val; 134 return; 135 default: 136 assert(misc_reg < NumInternalProcRegs); 137 ipr[misc_reg] = val; 138 return; 139 } 140} 141 142void 143ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc, ThreadID tid) 144{ 145 switch (misc_reg) { 146 case MISCREG_FPCR: 147 fpcr = val; 148 return; 149 case MISCREG_UNIQ: 150 uniq = val; 151 return; 152 case MISCREG_LOCKFLAG: 153 lock_flag = val; 154 return; 155 case MISCREG_LOCKADDR: 156 lock_addr = val; 157 return; 158 case MISCREG_INTR: 159 intr_flag = val; 160 return; 161 default: 162 setIpr(misc_reg, val, tc); 163 return; 164 } 165} 166 167} 168 169AlphaISA::ISA * 170AlphaISAParams::create() 171{ 172 return new AlphaISA::ISA(this); 173} 174