⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cp0.h

📁 一个用在mips体系结构中的操作系统
💻 H
字号:
/* * Copyright (C) 1996-1998 by the Board of Trustees *    of Leland Stanford Junior University. *  * This file is part of the SimOS distribution.  * See LICENSE file for terms of the license.  * *//***************************************************************** * cp0.h *  * Definitions for CP0 - TLB and exception handling * Written for BIG ENDIAN!!! * * $Author: bosch $ * $Date: 1998/02/10 00:31:20 $ *****************************************************************/#ifndef MIPSY_CP0_H#define MIPSY_CP0_H#include "simtypes.h"#include "mips_arch.h"#include "addr_layout.h"#include "mipsy.h"#include "list.h"/* Global CP0 Functions */extern void   MipsyInitTLBHashTable(CPUState *P);extern void   EXCEPTION(CPUState *P, int);extern int    ExecuteC0Instruction(CPUState *P, Inst instr);extern void   EnableInterruptCheck(CPUState *P, int interval);extern Result TranslateVirtual(CPUState *P,VA, PA *, uint *tlbFlavor, void **bdoorAddr);extern Result TranslateVirtualNoSideeffect(CPUState *P, VA, PA *);extern void   MipsyCheckForInterrupts(CPUState *P);extern void   MipsyCacheError(int cpuNum, bool isAsync);/* Global CP0 Constants */#define TLB_CACHED     0x00000000#define TLB_BDOOR      0x00000001#define TLB_UNCACHED   0x00000002/* Make sure that you can do a (value&TLB_BDOOR) */#define TLB_BDOOR_DATA 0x00000011#define TLB_BDOOR_FUNC 0x00000021/* jump to a backdoor function -- only used in compatibility mode */#define TLB_BDOOR_FUNC_COMPAT 0x00000031#define TLB_READING    0x0#define TLB_WRITING    0x00000004#define TLB_DFETCH   0x0#define TLB_IFETCH   0x00000008#define TLB_PREFETCH 0x00000040#define TLB_ACCELERATED 0x00000010#ifdef HWBCOPY#define TLB_MSG_SPACE 0x00000020#endif/* Return values for a cop0 instruction */#define C0_SUCCESS       0#define C0_ILLEGAL_INST  1#define C0_CONTINUE      2#define TLB_IS_IFETCH(_flag)    (_flag & TLB_IFETCH)#define TLB_IS_PREFETCH(_flag)  (_flag & TLB_PREFETCH)#define TLB_IS_WRITE(_flag)     (_flag & TLB_WRITING)/***************************************************************** *  Hash table support for mipsy's TLB - From Emmett's mshade  *  This uses the List_Links package from Sprite - *****************************************************************//*  * Exception handling routines.  */#define _MIPSY_RECORD_EXCEPTION(_P, _cause, _vec, _badaddr, _hireg, _ctxtreg,_xctxtreg) { \ (_P)->CP0[C0_BADVADDR] = (_badaddr); \ (_P)->CP0[C0_TLBHI] = (_hireg); \ (_P)->CP0[C0_CTXT] = (_ctxtreg); \ (_P)->CP0[C0_XCTXT] = (_xctxtreg); \ EXCEPTION((_P), (_cause)); \}#define _MIPSY_RECORD_UTLBEXCEPTION(_P, _cause, _vec, _badaddr, _hireg, _ctxtreg,_xctxtreg) { \ (_P)->CP0[C0_BADVADDR] = (_badaddr); \ (_P)->CP0[C0_TLBHI] = (_hireg); \ (_P)->CP0[C0_CTXT] = (_ctxtreg); \ (_P)->CP0[C0_XCTXT] = (_xctxtreg); \ UTLB_EXCEPTION((_P), (_cause)); \}#ifdef MIPSY_MXS#define _MXS_RECORD_EXCEPTION(_P, _cause, _vec, _badaddr, _hireg, _ctxtreg,_xctxtreg) { \ (_P)->lastException = (((_P)->lastException+1) % MAX_NUM_EXCEPTIONS); \ (_P)->exception[(_P)->lastException].cause = (_cause); \ (_P)->exception[(_P)->lastException].vec = (_vec); \ (_P)->exception[(_P)->lastException].badaddr = (_badaddr); \ (_P)->exception[(_P)->lastException].hireg = (_hireg); \ (_P)->exception[(_P)->lastException].ctxtreg = (_ctxtreg); \ (_P)->exception[(_P)->lastException].xctxtreg = (_xctxtreg);   }#define RECORD_EXCEPTION(_P, _cause, _vec, _badaddr, _hireg, _ctxtreg,_xctxtreg) \ if ((_P)->inMXS) \    _MXS_RECORD_EXCEPTION(_P, _cause, _vec, _badaddr, _hireg, _ctxtreg,_xctxtreg) \ else  \    _MIPSY_RECORD_EXCEPTION(_P, _cause, _vec, _badaddr, _hireg, _ctxtreg,_xctxtreg) #define RECORD_UTLBEXCEPTION(_P, _cause, _vec, _badaddr, _hireg, _ctxtreg,_xctxtreg) \ if ((_P)->inMXS) \    _MXS_RECORD_EXCEPTION(_P, _cause, _vec, _badaddr, _hireg, _ctxtreg,_xctxtreg) \ else  \    _MIPSY_RECORD_UTLBEXCEPTION(_P, _cause, _vec, _badaddr, _hireg, _ctxtreg,_xctxtreg) #endif /* MIPSY_MXS */#ifndef RECORD_EXCEPTION#define RECORD_EXCEPTION(_P, _cause, _vec, _badaddr, _hireg, _ctxtreg,_xctxtreg) \  _MIPSY_RECORD_EXCEPTION(_P, _cause, _vec, _badaddr, _hireg, _ctxtreg,_xctxtreg) #define RECORD_UTLBEXCEPTION(_P, _cause, _vec, _badaddr, _hireg, _ctxtreg,_xctxtreg) \  _MIPSY_RECORD_UTLBEXCEPTION(_P, _cause, _vec, _badaddr, _hireg, _ctxtreg,_xctxtreg) #endif /* RECORD_EXCEPTION */#endif /* !MIPSY_CP0_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -