2 * code to keep track of registers
9 * translate a name to a magic register offset
16 for (rp = mach->reglist; rp->rname; rp++)
17 if (strcmp(name, rp->rname) == 0)
23 getreg(Map *map, Reglist *rp)
35 ret = get2(map, rp->roffs, &s);
40 ret = get4(map, rp->roffs, &w);
46 ret = get8(map, rp->roffs, &v);
49 werrstr("can't retrieve register %s", rp->rname);
53 werrstr("Register %s: %r", rp->rname);
60 rget(Map *map, char *name)
66 error("invalid register name");
67 return getreg(map, rp);
71 rput(Map *map, char *name, vlong v)
78 error("invalid register name");
79 if (rp->rflags & RRDONLY)
80 error("register is read-only");
84 ret = put2(map, rp->roffs, (ushort) v);
89 ret = put4(map, rp->roffs, (long) v);
92 ret = put8(map, rp->roffs, v);
98 error("can't write register");
101 * print the registers
110 for (i = 1, rp = mach->reglist; rp->rname; rp++, i++) {
111 if ((rp->rflags & RFLT)) {
114 if (rp->rformat == '8' || rp->rformat == '3')
117 v = getreg(cormap, rp);
118 if(rp->rformat == 'Y')
119 dprint("%-8s %-20#llux", rp->rname, v);
121 dprint("%-8s %-12#lux", rp->rname, (ulong)v);
129 dprint ("%s\n", machdata->excep(cormap, rget));