faults.hh revision 2665
11689SN/A/* 22329SN/A * Copyright (c) 2003-2005 The Regents of The University of Michigan 31689SN/A * All rights reserved. 41689SN/A * 51689SN/A * Redistribution and use in source and binary forms, with or without 61689SN/A * modification, are permitted provided that the following conditions are 71689SN/A * met: redistributions of source code must retain the above copyright 81689SN/A * notice, this list of conditions and the following disclaimer; 91689SN/A * redistributions in binary form must reproduce the above copyright 101689SN/A * notice, this list of conditions and the following disclaimer in the 111689SN/A * documentation and/or other materials provided with the distribution; 121689SN/A * neither the name of the copyright holders nor the names of its 131689SN/A * contributors may be used to endorse or promote products derived from 141689SN/A * this software without specific prior written permission. 151689SN/A * 161689SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 171689SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 181689SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 191689SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 201689SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 211689SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 221689SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 231689SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 241689SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 251689SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 261689SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272665Ssaidi@eecs.umich.edu * 282665Ssaidi@eecs.umich.edu * Authors: Korey Sewell 292831Sksewell@umich.edu */ 301689SN/A 311689SN/A#ifndef __MIPS_FAULTS_HH__ 322292SN/A#define __MIPS_FAULTS_HH__ 332292SN/A 341060SN/A#include "sim/faults.hh" 352292SN/A 361461SN/A// The design of the "name" and "vect" functions is in sim/faults.hh 371461SN/A 381060SN/Anamespace MipsISA 391060SN/A{ 402292SN/A 411060SN/Atypedef const Addr FaultVect; 421061SN/A 431060SN/Aclass MipsFault : public FaultBase 441060SN/A{ 452107SN/A protected: 462107SN/A virtual bool skipFaultingInstruction() {return false;} 471060SN/A virtual bool setRestartAddress() {return true;} 481060SN/A public: 492733Sktlim@umich.edu#if FULL_SYSTEM 501061SN/A void invoke(ExecContext * xc); 511060SN/A#endif 522292SN/A virtual FaultVect vect() = 0; 532292SN/A virtual FaultStat & countStat() = 0; 542292SN/A}; 552292SN/A 562292SN/Aclass MachineCheckFault : public MipsFault 572292SN/A{ 582292SN/A private: 592329SN/A static FaultName _name; 602292SN/A static FaultVect _vect; 612292SN/A static FaultStat _count; 622292SN/A public: 632292SN/A FaultName name() {return _name;} 642292SN/A FaultVect vect() {return _vect;} 652292SN/A FaultStat & countStat() {return _count;} 662292SN/A bool isMachineCheckFault() {return true;} 672292SN/A}; 682292SN/A 692292SN/Aclass AlignmentFault : public MipsFault 702292SN/A{ 712292SN/A private: 722292SN/A static FaultName _name; 732292SN/A static FaultVect _vect; 742292SN/A static FaultStat _count; 751060SN/A public: 761060SN/A FaultName name() {return _name;} 771060SN/A FaultVect vect() {return _vect;} 782292SN/A FaultStat & countStat() {return _count;} 792292SN/A bool isAlignmentFault() {return true;} 802292SN/A}; 812292SN/A 822292SN/Astatic inline Fault genMachineCheckFault() 832292SN/A{ 841060SN/A return new MachineCheckFault; 854329Sktlim@umich.edu} 864329Sktlim@umich.edu 874329Sktlim@umich.edustatic inline Fault genAlignmentFault() 882292SN/A{ 892292SN/A return new AlignmentFault; 901060SN/A} 912292SN/A 922292SN/Aclass ResetFault : public MipsFault 932292SN/A{ 942292SN/A private: 952292SN/A static FaultName _name; 962348SN/A static FaultVect _vect; 972307SN/A static FaultStat _count; 982307SN/A public: 992348SN/A FaultName name() {return _name;} 1002307SN/A FaultVect vect() {return _vect;} 1012307SN/A FaultStat & countStat() {return _count;} 1022292SN/A}; 1032292SN/A 1042292SN/Aclass ArithmeticFault : public MipsFault 1051763SN/A{ 1061060SN/A protected: 1071061SN/A bool skipFaultingInstruction() {return true;} 1081060SN/A private: 1091060SN/A static FaultName _name; 1101060SN/A static FaultVect _vect; 1111060SN/A static FaultStat _count; 1121060SN/A public: 1132329SN/A FaultName name() {return _name;} 1141060SN/A FaultVect vect() {return _vect;} 1152292SN/A FaultStat & countStat() {return _count;} 1162292SN/A#if FULL_SYSTEM 1172292SN/A void invoke(ExecContext * xc); 1182292SN/A#endif 1192292SN/A}; 1201060SN/A 1212292SN/Aclass InterruptFault : public MipsFault 1222292SN/A{ 1232292SN/A protected: 1242292SN/A bool setRestartAddress() {return false;} 1252329SN/A private: 1261060SN/A static FaultName _name; 1272292SN/A static FaultVect _vect; 1282292SN/A static FaultStat _count; 1292292SN/A public: 1302292SN/A FaultName name() {return _name;} 1312292SN/A FaultVect vect() {return _vect;} 1321060SN/A FaultStat & countStat() {return _count;} 1332292SN/A}; 1342329SN/A 1352107SN/Aclass NDtbMissFault : public MipsFault 1362292SN/A{ 1372292SN/A private: 1382292SN/A static FaultName _name; 1392292SN/A static FaultVect _vect; 1402292SN/A static FaultStat _count; 1412292SN/A public: 1422329SN/A FaultName name() {return _name;} 1432107SN/A FaultVect vect() {return _vect;} 1442292SN/A FaultStat & countStat() {return _count;} 1452292SN/A}; 1462292SN/A 1472292SN/Aclass PDtbMissFault : public MipsFault 1482292SN/A{ 1492292SN/A private: 1502292SN/A static FaultName _name; 1512292SN/A static FaultVect _vect; 1522292SN/A static FaultStat _count; 1532292SN/A public: 1542292SN/A FaultName name() {return _name;} 1552292SN/A FaultVect vect() {return _vect;} 1562292SN/A FaultStat & countStat() {return _count;} 1571060SN/A}; 1581060SN/A 1592292SN/Aclass DtbPageFault : public MipsFault 1602292SN/A{ 1612292SN/A private: 1622292SN/A static FaultName _name; 1632292SN/A static FaultVect _vect; 1642292SN/A static FaultStat _count; 1652292SN/A public: 1662292SN/A FaultName name() {return _name;} 1672292SN/A FaultVect vect() {return _vect;} 1682292SN/A FaultStat & countStat() {return _count;} 1692292SN/A}; 1702292SN/A 1711060SN/Aclass DtbAcvFault : public MipsFault 1721060SN/A{ 1731060SN/A private: 1742292SN/A static FaultName _name; 1752292SN/A static FaultVect _vect; 1762292SN/A static FaultStat _count; 1772292SN/A public: 1782292SN/A FaultName name() {return _name;} 1791060SN/A FaultVect vect() {return _vect;} 1801060SN/A FaultStat & countStat() {return _count;} 1811060SN/A}; 1822292SN/A 1832292SN/Aclass ItbMissFault : public MipsFault 1842292SN/A{ 1851060SN/A private: 1862292SN/A static FaultName _name; 1872292SN/A static FaultVect _vect; 1881060SN/A static FaultStat _count; 1892292SN/A public: 1902292SN/A FaultName name() {return _name;} 1912292SN/A FaultVect vect() {return _vect;} 1922292SN/A FaultStat & countStat() {return _count;} 1931060SN/A}; 1942292SN/A 1952292SN/Aclass ItbPageFault : public MipsFault 1961060SN/A{ 1972292SN/A private: 1982292SN/A static FaultName _name; 1991060SN/A static FaultVect _vect; 2002292SN/A static FaultStat _count; 2012329SN/A public: 2021060SN/A FaultName name() {return _name;} 2032292SN/A FaultVect vect() {return _vect;} 2042329SN/A FaultStat & countStat() {return _count;} 2052292SN/A}; 2062292SN/A 2072329SN/Aclass ItbAcvFault : public MipsFault 2082107SN/A{ 2092292SN/A private: 2102329SN/A static FaultName _name; 2112292SN/A static FaultVect _vect; 2122292SN/A static FaultStat _count; 2132329SN/A public: 2142107SN/A FaultName name() {return _name;} 2152292SN/A FaultVect vect() {return _vect;} 2162292SN/A FaultStat & countStat() {return _count;} 2172329SN/A}; 2182292SN/A 2192292SN/Aclass UnimplementedOpcodeFault : public MipsFault 2202329SN/A{ 2212107SN/A private: 2222292SN/A static FaultName _name; 2232329SN/A static FaultVect _vect; 2242292SN/A static FaultStat _count; 2252292SN/A public: 2262329SN/A FaultName name() {return _name;} 2272107SN/A FaultVect vect() {return _vect;} 2282292SN/A FaultStat & countStat() {return _count;} 2292329SN/A}; 2301060SN/A 2311060SN/Aclass FloatEnableFault : public MipsFault 2321060SN/A{ 2331060SN/A private: 2342292SN/A static FaultName _name; 2352292SN/A static FaultVect _vect; 2362292SN/A static FaultStat _count; 2372292SN/A public: 2382292SN/A FaultName name() {return _name;} 2392292SN/A FaultVect vect() {return _vect;} 2402292SN/A FaultStat & countStat() {return _count;} 2411060SN/A}; 2421060SN/A 2431060SN/Aclass PalFault : public MipsFault 2441060SN/A{ 2451060SN/A protected: 2461060SN/A bool skipFaultingInstruction() {return true;} 2471060SN/A private: 2482292SN/A static FaultName _name; 2492292SN/A static FaultVect _vect; 2502292SN/A static FaultStat _count; 2512292SN/A public: 2522292SN/A FaultName name() {return _name;} 2532292SN/A FaultVect vect() {return _vect;} 2541060SN/A FaultStat & countStat() {return _count;} 2551060SN/A}; 2562733Sktlim@umich.edu 2571060SN/Aclass IntegerOverflowFault : public MipsFault 2582292SN/A{ 2592292SN/A private: 2602292SN/A static FaultName _name; 2611061SN/A static FaultVect _vect; 2621060SN/A static FaultStat _count; 2631060SN/A public: 2642292SN/A FaultName name() {return _name;} 2652292SN/A FaultVect vect() {return _vect;} 2662292SN/A FaultStat & countStat() {return _count;} 2672292SN/A}; 2682292SN/A 2692292SN/A} // MipsISA namespace 2702292SN/A 2712292SN/A#endif // __FAULTS_HH__ 2722292SN/A