faults.hh revision 6379:75d4aaf7dd54
12SN/A/* 29235Sandreas.hansson@arm.com * Copyright (c) 2003-2005 The Regents of The University of Michigan 39235Sandreas.hansson@arm.com * Copyright (c) 2007 MIPS Technologies, Inc. 49235Sandreas.hansson@arm.com * All rights reserved. 59235Sandreas.hansson@arm.com * 69235Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 79235Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 89235Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 99235Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 109235Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 119235Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 129235Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 139235Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 141762SN/A * contributors may be used to endorse or promote products derived from 152SN/A * this software without specific prior written permission. 162SN/A * 172SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 182SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 192SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 202SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 212SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 222SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 232SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 242SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 252SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 262SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 272SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 282SN/A * 292SN/A * Authors: Gabe Black 302SN/A * Korey Sewell 312SN/A * Jaidev Patwardhan 322SN/A */ 332SN/A 342SN/A#ifndef __MIPS_FAULTS_HH__ 352SN/A#define __MIPS_FAULTS_HH__ 362SN/A 372SN/A#include "sim/faults.hh" 382SN/A 392665SN/Anamespace MipsISA 402665SN/A{ 412665SN/A 429235Sandreas.hansson@arm.comtypedef const Addr FaultVect; 432SN/A 442SN/Aclass MipsFault : public FaultBase 459235Sandreas.hansson@arm.com{ 469235Sandreas.hansson@arm.com protected: 472SN/A virtual bool skipFaultingInstruction() {return false;} 4810481Sandreas.hansson@arm.com virtual bool setRestartAddress() {return true;} 499412Sandreas.hansson@arm.com public: 509412Sandreas.hansson@arm.com Addr badVAddr; 519411Sandreas.hansson@arm.com Addr entryHiAsid; 529405Sandreas.hansson@arm.com Addr entryHiVPN2; 539411Sandreas.hansson@arm.com Addr entryHiVPN2X; 549235Sandreas.hansson@arm.com Addr contextBadVPN2; 559235Sandreas.hansson@arm.com#if FULL_SYSTEM 569235Sandreas.hansson@arm.com void invoke(ThreadContext * tc) {}; 572SN/A void setExceptionState(ThreadContext *, uint8_t); 582SN/A void setHandlerPC(Addr, ThreadContext *); 599405Sandreas.hansson@arm.com#endif 609405Sandreas.hansson@arm.com virtual FaultVect vect() = 0; 619411Sandreas.hansson@arm.com virtual FaultStat & countStat() = 0; 6210435Snilay@cs.wisc.edu}; 639405Sandreas.hansson@arm.com 649405Sandreas.hansson@arm.comclass MachineCheckFault : public MipsFault 659405Sandreas.hansson@arm.com{ 669411Sandreas.hansson@arm.com private: 679411Sandreas.hansson@arm.com static FaultName _name; 689411Sandreas.hansson@arm.com static FaultVect _vect; 699411Sandreas.hansson@arm.com static FaultStat _count; 709411Sandreas.hansson@arm.com public: 719411Sandreas.hansson@arm.com FaultName name() const {return _name;} 729411Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 739411Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 749411Sandreas.hansson@arm.com bool isMachineCheckFault() {return true;} 759411Sandreas.hansson@arm.com}; 769235Sandreas.hansson@arm.com 772SN/Aclass NonMaskableInterrupt : public MipsFault 789235Sandreas.hansson@arm.com{ 799411Sandreas.hansson@arm.com private: 809411Sandreas.hansson@arm.com static FaultName _name; 819411Sandreas.hansson@arm.com static FaultVect _vect; 829411Sandreas.hansson@arm.com static FaultStat _count; 839411Sandreas.hansson@arm.com public: 849411Sandreas.hansson@arm.com FaultName name() const {return _name;} 859411Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 869235Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 879235Sandreas.hansson@arm.com bool isNonMaskableInterrupt() {return true;} 889235Sandreas.hansson@arm.com}; 899411Sandreas.hansson@arm.com 909411Sandreas.hansson@arm.comclass AlignmentFault : public MipsFault 919235Sandreas.hansson@arm.com{ 929235Sandreas.hansson@arm.com private: 939405Sandreas.hansson@arm.com static FaultName _name; 949412Sandreas.hansson@arm.com static FaultVect _vect; 959412Sandreas.hansson@arm.com static FaultStat _count; 969412Sandreas.hansson@arm.com public: 979412Sandreas.hansson@arm.com FaultName name() const {return _name;} 989412Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 999412Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 1009412Sandreas.hansson@arm.com bool isAlignmentFault() {return true;} 1019412Sandreas.hansson@arm.com}; 1029412Sandreas.hansson@arm.com 1039412Sandreas.hansson@arm.comclass AddressErrorFault : public MipsFault 1049412Sandreas.hansson@arm.com{ 1059412Sandreas.hansson@arm.com private: 1069412Sandreas.hansson@arm.com static FaultName _name; 1079412Sandreas.hansson@arm.com static FaultVect _vect; 1089412Sandreas.hansson@arm.com static FaultStat _count; 1099412Sandreas.hansson@arm.com public: 1109412Sandreas.hansson@arm.com FaultName name() const {return _name;} 1119412Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 1129412Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 1139412Sandreas.hansson@arm.com#if FULL_SYSTEM 1149412Sandreas.hansson@arm.com void invoke(ThreadContext * tc); 1159412Sandreas.hansson@arm.com#endif 1169412Sandreas.hansson@arm.com 1179412Sandreas.hansson@arm.com}; 1189412Sandreas.hansson@arm.com 1199412Sandreas.hansson@arm.comclass StoreAddressErrorFault : public MipsFault 1209412Sandreas.hansson@arm.com{ 1219412Sandreas.hansson@arm.com private: 1229412Sandreas.hansson@arm.com static FaultName _name; 1239412Sandreas.hansson@arm.com static FaultVect _vect; 1249412Sandreas.hansson@arm.com static FaultStat _count; 1259412Sandreas.hansson@arm.com public: 1269412Sandreas.hansson@arm.com FaultName name() const {return _name;} 1279412Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 1289412Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 1299412Sandreas.hansson@arm.com#if FULL_SYSTEM 1309412Sandreas.hansson@arm.com void invoke(ThreadContext * tc); 1319412Sandreas.hansson@arm.com#endif 1329412Sandreas.hansson@arm.com}; 1339412Sandreas.hansson@arm.com 1349411Sandreas.hansson@arm.comclass UnimplementedOpcodeFault : public MipsFault 1359411Sandreas.hansson@arm.com{ 1369411Sandreas.hansson@arm.com private: 1379411Sandreas.hansson@arm.com static FaultName _name; 1389411Sandreas.hansson@arm.com static FaultVect _vect; 1399411Sandreas.hansson@arm.com static FaultStat _count; 1409411Sandreas.hansson@arm.com public: 1419411Sandreas.hansson@arm.com FaultName name() const {return _name;} 1429411Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 1439411Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 1449411Sandreas.hansson@arm.com}; 1459581Sandreas.hansson@arm.com 1469581Sandreas.hansson@arm.com 1479780Sandreas.hansson@arm.comclass TLBRefillIFetchFault : public MipsFault 1489581Sandreas.hansson@arm.com{ 1499411Sandreas.hansson@arm.com private: 1509411Sandreas.hansson@arm.com Addr vaddr; 1519411Sandreas.hansson@arm.com static FaultName _name; 1529411Sandreas.hansson@arm.com static FaultVect _vect; 1539411Sandreas.hansson@arm.com static FaultStat _count; 1549411Sandreas.hansson@arm.com public: 1559411Sandreas.hansson@arm.com FaultName name() const {return _name;} 1569411Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 1579411Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 1589411Sandreas.hansson@arm.com void invoke(ThreadContext * tc); 1599405Sandreas.hansson@arm.com}; 1609411Sandreas.hansson@arm.com 1619411Sandreas.hansson@arm.comclass TLBInvalidIFetchFault : public MipsFault 1629405Sandreas.hansson@arm.com{ 1639411Sandreas.hansson@arm.com private: 1649411Sandreas.hansson@arm.com Addr vaddr; 1659411Sandreas.hansson@arm.com static FaultName _name; 1669411Sandreas.hansson@arm.com static FaultVect _vect; 167532SN/A static FaultStat _count; 1689405Sandreas.hansson@arm.com public: 1699405Sandreas.hansson@arm.com FaultName name() const {return _name;} 1709405Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 17110435Snilay@cs.wisc.edu FaultStat & countStat() {return _count;} 1729405Sandreas.hansson@arm.com void invoke(ThreadContext * tc); 1739405Sandreas.hansson@arm.com}; 1749405Sandreas.hansson@arm.com 1759405Sandreas.hansson@arm.comclass NDtbMissFault : public MipsFault 1769405Sandreas.hansson@arm.com{ 1779405Sandreas.hansson@arm.com private: 1789405Sandreas.hansson@arm.com static FaultName _name; 1799405Sandreas.hansson@arm.com static FaultVect _vect; 1809405Sandreas.hansson@arm.com static FaultStat _count; 1819405Sandreas.hansson@arm.com public: 1829405Sandreas.hansson@arm.com FaultName name() const {return _name;} 1839405Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 1849405Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 1859411Sandreas.hansson@arm.com}; 1869411Sandreas.hansson@arm.com 1879411Sandreas.hansson@arm.comclass PDtbMissFault : public MipsFault 1889411Sandreas.hansson@arm.com{ 1899411Sandreas.hansson@arm.com private: 1909411Sandreas.hansson@arm.com static FaultName _name; 1919411Sandreas.hansson@arm.com static FaultVect _vect; 1929411Sandreas.hansson@arm.com static FaultStat _count; 1939411Sandreas.hansson@arm.com public: 1949411Sandreas.hansson@arm.com FaultName name() const {return _name;} 1959411Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 1969411Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 1979411Sandreas.hansson@arm.com}; 1989411Sandreas.hansson@arm.com 1999411Sandreas.hansson@arm.comclass DtbPageFault : public MipsFault 2009411Sandreas.hansson@arm.com{ 2019411Sandreas.hansson@arm.com private: 2029411Sandreas.hansson@arm.com static FaultName _name; 2039411Sandreas.hansson@arm.com static FaultVect _vect; 2049411Sandreas.hansson@arm.com static FaultStat _count; 2059411Sandreas.hansson@arm.com public: 2069405Sandreas.hansson@arm.com FaultName name() const {return _name;} 2079279Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 2089279Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 2099279Sandreas.hansson@arm.com}; 2109279Sandreas.hansson@arm.com 2119279Sandreas.hansson@arm.comclass DtbAcvFault : public MipsFault 2129279Sandreas.hansson@arm.com{ 2139279Sandreas.hansson@arm.com private: 2149279Sandreas.hansson@arm.com static FaultName _name; 2159279Sandreas.hansson@arm.com static FaultVect _vect; 2169279Sandreas.hansson@arm.com static FaultStat _count; 2179279Sandreas.hansson@arm.com public: 2189411Sandreas.hansson@arm.com FaultName name() const {return _name;} 2199411Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 2209411Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 2219411Sandreas.hansson@arm.com}; 2229411Sandreas.hansson@arm.com 2239411Sandreas.hansson@arm.comclass CacheErrorFault : public MipsFault 2249411Sandreas.hansson@arm.com{ 2259411Sandreas.hansson@arm.com private: 2269411Sandreas.hansson@arm.com Addr vaddr; 2279411Sandreas.hansson@arm.com static FaultName _name; 2289411Sandreas.hansson@arm.com static FaultVect _vect; 2299411Sandreas.hansson@arm.com static FaultStat _count; 2309411Sandreas.hansson@arm.com public: 2319411Sandreas.hansson@arm.com FaultName name() const {return _name;} 2329411Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 2339411Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 2349411Sandreas.hansson@arm.com void invoke(ThreadContext * tc); 2359411Sandreas.hansson@arm.com}; 2369411Sandreas.hansson@arm.com 2379411Sandreas.hansson@arm.com 2389279Sandreas.hansson@arm.com 2399279Sandreas.hansson@arm.com 2409279Sandreas.hansson@arm.comstatic inline Fault genMachineCheckFault() 2419279Sandreas.hansson@arm.com{ 2429279Sandreas.hansson@arm.com return new MachineCheckFault; 2439279Sandreas.hansson@arm.com} 2449279Sandreas.hansson@arm.com 2459279Sandreas.hansson@arm.comstatic inline Fault genAlignmentFault() 2469279Sandreas.hansson@arm.com{ 2479279Sandreas.hansson@arm.com return new AlignmentFault; 2489279Sandreas.hansson@arm.com} 2499279Sandreas.hansson@arm.com 2509411Sandreas.hansson@arm.comclass ResetFault : public MipsFault 2519411Sandreas.hansson@arm.com{ 2529405Sandreas.hansson@arm.com private: 2539279Sandreas.hansson@arm.com static FaultName _name; 2549405Sandreas.hansson@arm.com static FaultVect _vect; 2559405Sandreas.hansson@arm.com static FaultStat _count; 2569405Sandreas.hansson@arm.com public: 2579405Sandreas.hansson@arm.com FaultName name() const {return _name;} 2589405Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 2599405Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 2609405Sandreas.hansson@arm.com void invoke(ThreadContext * tc); 2619405Sandreas.hansson@arm.com 2629405Sandreas.hansson@arm.com}; 2639411Sandreas.hansson@arm.com 2649411Sandreas.hansson@arm.comclass SystemCallFault : public MipsFault 2659411Sandreas.hansson@arm.com{ 2669411Sandreas.hansson@arm.com private: 2679541Sandreas.hansson@arm.com static FaultName _name; 2689411Sandreas.hansson@arm.com static FaultVect _vect; 2699411Sandreas.hansson@arm.com static FaultStat _count; 2709405Sandreas.hansson@arm.com public: 2712SN/A FaultName name() const {return _name;} 272531SN/A FaultVect vect() {return _vect;} 2739235Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 274531SN/A void invoke(ThreadContext * tc); 2759235Sandreas.hansson@arm.com}; 2762SN/A 2779405Sandreas.hansson@arm.comclass SoftResetFault : public MipsFault 2789405Sandreas.hansson@arm.com{ 2799405Sandreas.hansson@arm.com private: 2809405Sandreas.hansson@arm.com static FaultName _name; 2819405Sandreas.hansson@arm.com static FaultVect _vect; 2829405Sandreas.hansson@arm.com static FaultStat _count; 2839405Sandreas.hansson@arm.com public: 2849405Sandreas.hansson@arm.com FaultName name() const {return _name;} 2859405Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 2869411Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 2879411Sandreas.hansson@arm.com void invoke(ThreadContext * tc); 2889411Sandreas.hansson@arm.com}; 2899411Sandreas.hansson@arm.com 2909411Sandreas.hansson@arm.comclass DebugSingleStep : public MipsFault 2919411Sandreas.hansson@arm.com{ 2929405Sandreas.hansson@arm.com private: 293531SN/A static FaultName _name; 2949405Sandreas.hansson@arm.com static FaultVect _vect; 2959405Sandreas.hansson@arm.com static FaultStat _count; 2962SN/A public: 29710481Sandreas.hansson@arm.com FaultName name() const {return _name;} 29810481Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 29910481Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 30010481Sandreas.hansson@arm.com void invoke(ThreadContext * tc); 30110481Sandreas.hansson@arm.com}; 3029235Sandreas.hansson@arm.com 3039235Sandreas.hansson@arm.comclass DebugInterrupt : public MipsFault 3049405Sandreas.hansson@arm.com{ 3052SN/A private: 3069235Sandreas.hansson@arm.com static FaultName _name; 3079235Sandreas.hansson@arm.com static FaultVect _vect; 3089405Sandreas.hansson@arm.com static FaultStat _count; 3092SN/A public: 3109235Sandreas.hansson@arm.com FaultName name() const {return _name;} 3119235Sandreas.hansson@arm.com FaultVect vect() {return _vect;} 3129405Sandreas.hansson@arm.com FaultStat & countStat() {return _count;} 3132SN/A void invoke(ThreadContext * tc); 3149235Sandreas.hansson@arm.com}; 315 316class CoprocessorUnusableFault : public MipsFault 317{ 318 private: 319 static FaultName _name; 320 static FaultVect _vect; 321 static FaultStat _count; 322 int coProcID; 323 public: 324 FaultName name() const {return _name;} 325 FaultVect vect() {return _vect;} 326 FaultStat & countStat() {return _count;} 327 void invoke(ThreadContext * tc); 328 CoprocessorUnusableFault(int _procid){ coProcID = _procid;} 329}; 330 331class ReservedInstructionFault : public MipsFault 332{ 333 private: 334 static FaultName _name; 335 static FaultVect _vect; 336 static FaultStat _count; 337 public: 338 FaultName name() const {return _name;} 339 FaultVect vect() {return _vect;} 340 FaultStat & countStat() {return _count;} 341 void invoke(ThreadContext * tc); 342}; 343 344class ThreadFault : public MipsFault 345{ 346 private: 347 static FaultName _name; 348 static FaultVect _vect; 349 static FaultStat _count; 350 public: 351 FaultName name() const {return _name;} 352 FaultVect vect() {return _vect;} 353 FaultStat & countStat() {return _count;} 354 void invoke(ThreadContext * tc); 355}; 356 357class ArithmeticFault : public MipsFault 358{ 359 protected: 360 bool skipFaultingInstruction() {return true;} 361 private: 362 static FaultName _name; 363 static FaultVect _vect; 364 static FaultStat _count; 365 public: 366 FaultName name() const {return _name;} 367 FaultVect vect() {return _vect;} 368 FaultStat & countStat() {return _count;} 369#if FULL_SYSTEM 370 void invoke(ThreadContext * tc); 371#endif 372}; 373 374class InterruptFault : public MipsFault 375{ 376 protected: 377 bool setRestartAddress() {return false;} 378 private: 379 static FaultName _name; 380 static FaultVect _vect; 381 static FaultStat _count; 382 public: 383 FaultName name() const {return _name;} 384 FaultVect vect() {return _vect;} 385 FaultStat & countStat() {return _count;} 386 387#if FULL_SYSTEM 388 void invoke(ThreadContext * tc); 389#endif 390}; 391 392class TrapFault : public MipsFault 393{ 394 private: 395 static FaultName _name; 396 static FaultVect _vect; 397 static FaultStat _count; 398 public: 399 FaultName name() const {return _name;} 400 FaultVect vect() {return _vect;} 401 FaultStat & countStat() {return _count;} 402#if FULL_SYSTEM 403 void invoke(ThreadContext * tc); 404#endif 405}; 406 407class BreakpointFault : public MipsFault 408{ 409 private: 410 static FaultName _name; 411 static FaultVect _vect; 412 static FaultStat _count; 413 public: 414 FaultName name() const {return _name;} 415 FaultVect vect() {return _vect;} 416 FaultStat & countStat() {return _count;} 417#if FULL_SYSTEM 418 void invoke(ThreadContext * tc); 419#endif 420}; 421 422class ItbRefillFault : public MipsFault 423{ 424 private: 425 static FaultName _name; 426 static FaultVect _vect; 427 static FaultStat _count; 428 public: 429 FaultName name() const {return _name;} 430 FaultVect vect() {return _vect;} 431 FaultStat & countStat() {return _count;} 432#if FULL_SYSTEM 433 void invoke(ThreadContext * tc); 434#endif 435}; 436 437class DtbRefillFault : public MipsFault 438{ 439 private: 440 static FaultName _name; 441 static FaultVect _vect; 442 static FaultStat _count; 443 public: 444 FaultName name() const {return _name;} 445 FaultVect vect() {return _vect;} 446 FaultStat & countStat() {return _count;} 447#if FULL_SYSTEM 448 void invoke(ThreadContext * tc); 449#endif 450}; 451 452class ItbPageFault : public MipsFault 453{ 454 private: 455 static FaultName _name; 456 static FaultVect _vect; 457 static FaultStat _count; 458 public: 459 FaultName name() const {return _name;} 460 FaultVect vect() {return _vect;} 461 FaultStat & countStat() {return _count;} 462#if FULL_SYSTEM 463 void invoke(ThreadContext * tc); 464#endif 465}; 466 467class ItbInvalidFault : public MipsFault 468{ 469 private: 470 static FaultName _name; 471 static FaultVect _vect; 472 static FaultStat _count; 473 public: 474 FaultName name() const {return _name;} 475 FaultVect vect() {return _vect;} 476 FaultStat & countStat() {return _count;} 477#if FULL_SYSTEM 478 void invoke(ThreadContext * tc); 479#endif 480}; 481 482class TLBModifiedFault : public MipsFault 483{ 484 private: 485 static FaultName _name; 486 static FaultVect _vect; 487 static FaultStat _count; 488 public: 489 FaultName name() const {return _name;} 490 FaultVect vect() {return _vect;} 491 FaultStat & countStat() {return _count;} 492#if FULL_SYSTEM 493 void invoke(ThreadContext * tc); 494#endif 495}; 496 497class DtbInvalidFault : public MipsFault 498{ 499 private: 500 static FaultName _name; 501 static FaultVect _vect; 502 static FaultStat _count; 503 public: 504 FaultName name() const {return _name;} 505 FaultVect vect() {return _vect;} 506 FaultStat & countStat() {return _count;} 507#if FULL_SYSTEM 508 void invoke(ThreadContext * tc); 509#endif 510}; 511 512class FloatEnableFault : public MipsFault 513{ 514 private: 515 static FaultName _name; 516 static FaultVect _vect; 517 static FaultStat _count; 518 public: 519 FaultName name() const {return _name;} 520 FaultVect vect() {return _vect;} 521 FaultStat & countStat() {return _count;} 522}; 523 524class ItbMissFault : public MipsFault 525{ 526 private: 527 static FaultName _name; 528 static FaultVect _vect; 529 static FaultStat _count; 530 public: 531 FaultName name() const {return _name;} 532 FaultVect vect() {return _vect;} 533 FaultStat & countStat() {return _count;} 534}; 535 536class ItbAcvFault : public MipsFault 537{ 538 private: 539 static FaultName _name; 540 static FaultVect _vect; 541 static FaultStat _count; 542 public: 543 FaultName name() const {return _name;} 544 FaultVect vect() {return _vect;} 545 FaultStat & countStat() {return _count;} 546}; 547 548class IntegerOverflowFault : public MipsFault 549{ 550 private: 551 static FaultName _name; 552 static FaultVect _vect; 553 static FaultStat _count; 554 public: 555 FaultName name() const {return _name;} 556 FaultVect vect() {return _vect;} 557 FaultStat & countStat() {return _count;} 558}; 559 560class DspStateDisabledFault : public MipsFault 561{ 562 private: 563 static FaultName _name; 564 static FaultVect _vect; 565 static FaultStat _count; 566 public: 567 FaultName name() const {return _name;} 568 FaultVect vect() {return _vect;} 569 FaultStat & countStat() {return _count;} 570 void invoke(ThreadContext * tc); 571}; 572 573} // MipsISA namespace 574 575#endif // __MIPS_FAULTS_HH__ 576