#include #include #include Regdesc* regdesc(char *name) { Regdesc *r; for(r=mach->reglist; r->name; r++) if(strcmp(r->name, name) == 0) return r; return nil; } int rput(Regs *regs, char *name, u64int u) { if(regs == nil){ werrstr("registers not mapped"); return -1; } return regs->rw(regs, name, &u, 0); } int rget(Regs *regs, char *name, u64int *u) { if(regs == nil){ *u = ~(u64int)0; werrstr("registers not mapped"); return -1; } return regs->rw(regs, name, u, 1); } int _uregrw(Regs *regs, char *name, u64int *u, int isr) { Regdesc *r; uchar *ureg; if(!isr){ werrstr("cannot write registers"); return -1; } if((r = regdesc(name)) == nil) return -1; ureg = ((UregRegs*)regs)->ureg + r->offset; switch(r->format){ default: case 'X': *u = mach->swap4(*(u32int*)ureg); return 0; case 'Y': *u = mach->swap8(*(u64int*)ureg); return 0; } }