📄 sparc.h
字号:
/* * sparc sim.h * * The integer instruction side of this emulator is portable if sizeof(long) >= 4 * Floating point emulation however is not. Assumptions made are: * sizeof(ulong) == sizeof(float) * sizeof(ulong)*2 == sizeof(double) * bits of floating point in memory may be reversed lsw/msw * unions of double & 2*float & 2*long have no padding */#include "/sparc/include/ureg.h"#define USERADDR 0xC0000000#define UREGADDR (USERADDR+BY2PG-4-0xA0)#define USER_REG(x) (UREGADDR+(ulong)(x))#define REGOFF(x) (USER_REG(&((struct Ureg *) 0)->x))typedef struct Registers Registers;typedef struct Segment Segment;typedef struct Memory Memory;typedef struct Mul Mul;typedef struct Mulu Mulu;typedef struct Inst Inst;typedef struct Icache Icache;typedef struct Breakpoint Breakpoint;enum{ Instruction = 1, Read = 2, Write = 4, Access = 2|4, Equal = 4|8,};struct Breakpoint{ int type; /* Instruction/Read/Access/Write/Equal */ ulong addr; /* Place at address */ int count; /* To execute count times or value */ int done; /* How many times passed through */ Breakpoint *next; /* Link to next one */};enum{ Iload, Istore, Iarith, Ibranch, Ireg, Isyscall, Ifloat, Inop,};struct Icache{ int on; /* Turned on */ int linesize; /* Line size in bytes */ int stall; /* Cache stalls */ int *lines; /* Tag array */ int* (*hash)(ulong); /* Hash function */ char *hashtext; /* What the function looks like */};struct Inst{ void (*func)(ulong); char *name; int type; int count; int taken; int useddelay;};struct Registers{ ulong pc; ulong ir; Inst *ip; long r[32]; ulong Y; ulong psr; ulong fpsr; union { double fd[16]; float fl[32]; ulong di[32]; };};struct Mulu{ ulong lo; ulong hi;};struct Mul{ long lo; long hi;};enum{ MemRead, MemReadstring, MemWrite,};enum{ Stack, Text, Data, Bss, Nseg,};struct Segment{ short type; ulong base; ulong end; ulong fileoff; ulong fileend; int rss; int refs; uchar **table;};struct Memory{ Segment seg[Nseg];};void fatal(int, char*, ...);void run(void);void undef(ulong);void dumpreg(void);void dumpfreg(void);void dumpdreg(void);void* emalloc(ulong);void* erealloc(void*, ulong, ulong);void* vaddr(ulong);void itrace(char *, ...);void segsum(void);void ta(ulong);char* memio(char*, ulong, int, int);ulong getmem_w(ulong);ulong ifetch(ulong);ushort getmem_h(ulong);void putmem_w(ulong, ulong);uchar getmem_b(ulong);void putmem_b(ulong, uchar);ulong getmem_4(ulong);ulong getmem_2(ulong);void putmem_h(ulong, short);Mul mul(long, long);Mulu mulu(ulong, ulong);void isum(void);void initicache(void);void updateicache(ulong addr);long lnrand(long);void randseed(long, long);void cmd(void);void brkchk(ulong, int);void delbpt(char*);void breakpoint(char*, char*);char* nextc(char*);ulong expr(char*);void initstk(int, char**);void initmap(void);void inithdr(int);void reset(void);void dobplist(void);void procinit(int);void printsource(long);void printparams(Symbol *, ulong);void printlocals(Symbol *, ulong);void stktrace(int);void delay(ulong);void iprofile(void);/* Globals */Extern Registers reg;Extern Memory memory;Extern int text;Extern int trace;Extern int sysdbg;Extern int calltree;Extern Icache icache;Extern int count;Extern jmp_buf errjmp;Extern Breakpoint *bplist;Extern int atbpt;Extern int membpt;Extern int cmdcount;Extern int nopcount;Extern ulong dot;extern char *file;Extern Biobuf *bioout;Extern Biobuf *bin;Extern Inst *ci;Extern ulong *iprof;Extern ulong loadlock;Extern ulong anulled;extern int datasize; extern int printcol;Extern Map *symmap;/* Plan9 Kernel constants */#define BY2PG 4096#define BY2WD 4#define UTZERO 0x1000#define TSTKSIZ 32#define TSTACKTOP 0x10000000#define STACKTOP (TSTACKTOP-TSTKSIZ*BY2PG)#define STACKSIZE (4*1024*1024)#define ANUL (1<<29)#define PROFGRAN 4#define NOP 0x80300000#define SIGNBIT 0x80000000#define IMMBIT (1<<13)#define getrop23(i) rd = (i>>25)&0x1f; rs1 = (i>>14)&0x1f; rs2 = i&0x1f;#define ximm(xx, ii) xx = ii&0x1FFF; if(xx&0x1000) xx |= ~0x1FFF#define PSR_n (1<<23)#define PSR_z (1<<22)#define PSR_v (1<<21)#define PSR_c (1<<20)#define FP_U 3#define FP_L 1#define FP_G 2#define FP_E 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -