1*ce95e1b3SDavid du Colombier// riscv64 support 2*ce95e1b3SDavid du Colombier 3*ce95e1b3SDavid du Colombierdefn acidinit() // Called after all the init modules are loaded 4*ce95e1b3SDavid du Colombier{ 5*ce95e1b3SDavid du Colombier bplist = {}; 6*ce95e1b3SDavid du Colombier bpfmt = 'Y'; 7*ce95e1b3SDavid du Colombier 8*ce95e1b3SDavid du Colombier srcpath = { 9*ce95e1b3SDavid du Colombier "./", 10*ce95e1b3SDavid du Colombier "/sys/src/libc/port/", 11*ce95e1b3SDavid du Colombier "/sys/src/libc/9sys/", 12*ce95e1b3SDavid du Colombier "/sys/src/libc/riscv64/" 13*ce95e1b3SDavid du Colombier }; 14*ce95e1b3SDavid du Colombier 15*ce95e1b3SDavid du Colombier srcfiles = {}; // list of loaded files 16*ce95e1b3SDavid du Colombier srctext = {}; // the text of the files 17*ce95e1b3SDavid du Colombier} 18*ce95e1b3SDavid du Colombier 19*ce95e1b3SDavid du Colombierdefn stk() // trace 20*ce95e1b3SDavid du Colombier{ 21*ce95e1b3SDavid du Colombier _stk(*PC, *SP, linkreg(0), 0); 22*ce95e1b3SDavid du Colombier} 23*ce95e1b3SDavid du Colombier 24*ce95e1b3SDavid du Colombierdefn lstk() // trace with locals 25*ce95e1b3SDavid du Colombier{ 26*ce95e1b3SDavid du Colombier _stk(*PC, *SP, linkreg(0), 1); 27*ce95e1b3SDavid du Colombier} 28*ce95e1b3SDavid du Colombier 29*ce95e1b3SDavid du Colombierdefn gpr() // print general purpose registers 30*ce95e1b3SDavid du Colombier{ 31*ce95e1b3SDavid du Colombier print("R1\t", *R1, " R2\t", *R2, " R3\t", *R3, "\n"); 32*ce95e1b3SDavid du Colombier print("R4\t", *R4, " R5\t", *R5, " R6\t", *R6, "\n"); 33*ce95e1b3SDavid du Colombier print("R7\t", *R7, " R8\t", *R8, " R9\t", *R9, "\n"); 34*ce95e1b3SDavid du Colombier print("R10\t", *R10, " R11\t", *R11, " R12\t", *R12, "\n"); 35*ce95e1b3SDavid du Colombier print("R13\t", *R13, " R14\t", *R14, " R15\t", *R15, "\n"); 36*ce95e1b3SDavid du Colombier print("R16\t", *R16, " R17\t", *R17, " R18\t", *R18, "\n"); 37*ce95e1b3SDavid du Colombier print("R19\t", *R19, " R20\t", *R20, " R21\t", *R21, "\n"); 38*ce95e1b3SDavid du Colombier print("R22\t", *R22, " R23\t", *R23, " R24\t", *R24, "\n"); 39*ce95e1b3SDavid du Colombier print("R25\t", *R25, " R26\t", *R26, " R27\t", *R27, "\n"); 40*ce95e1b3SDavid du Colombier print("R28\t", *R28, " R29\t", *SP, " R30\t", *R30, "\n"); 41*ce95e1b3SDavid du Colombier print("R31\t", *R31, "\n"); 42*ce95e1b3SDavid du Colombier} 43*ce95e1b3SDavid du Colombier 44*ce95e1b3SDavid du Colombierdefn Fpr() 45*ce95e1b3SDavid du Colombier{ 46*ce95e1b3SDavid du Colombier print("F0\t", *fmt(F0, 'G'), "\tF1\t", *fmt(F1, 'G'), "\n"); 47*ce95e1b3SDavid du Colombier print("F2\t", *fmt(F2, 'G'), "\tF3\t", *fmt(F3, 'G'), "\n"); 48*ce95e1b3SDavid du Colombier print("F4\t", *fmt(F4, 'G'), "\tF5\t", *fmt(F5, 'G'), "\n"); 49*ce95e1b3SDavid du Colombier print("F6\t", *fmt(F6, 'G'), "\tF7\t", *fmt(F7, 'G'), "\n"); 50*ce95e1b3SDavid du Colombier print("F8\t", *fmt(F8, 'G'), "\tF9\t", *fmt(F9, 'G'), "\n"); 51*ce95e1b3SDavid du Colombier print("F10\t", *fmt(F10, 'G'), "\tF11\t", *fmt(F11, 'G'), "\n"); 52*ce95e1b3SDavid du Colombier print("F12\t", *fmt(F12, 'G'), "\tF13\t", *fmt(F13, 'G'), "\n"); 53*ce95e1b3SDavid du Colombier print("F14\t", *fmt(F14, 'G'), "\tF15\t", *fmt(F15, 'G'), "\n"); 54*ce95e1b3SDavid du Colombier print("F16\t", *fmt(F16, 'G'), "\tF17\t", *fmt(F17, 'G'), "\n"); 55*ce95e1b3SDavid du Colombier print("F18\t", *fmt(F18, 'G'), "\tF19\t", *fmt(F19, 'G'), "\n"); 56*ce95e1b3SDavid du Colombier print("F20\t", *fmt(F20, 'G'), "\tF21\t", *fmt(F21, 'G'), "\n"); 57*ce95e1b3SDavid du Colombier print("F22\t", *fmt(F22, 'G'), "\tF23\t", *fmt(F23, 'G'), "\n"); 58*ce95e1b3SDavid du Colombier print("F24\t", *fmt(F24, 'G'), "\tF25\t", *fmt(F25, 'G'), "\n"); 59*ce95e1b3SDavid du Colombier print("F26\t", *fmt(F26, 'G'), "\tF27\t", *fmt(F27, 'G'), "\n"); 60*ce95e1b3SDavid du Colombier print("F28\t", *fmt(F28, 'G'), "\tF29\t", *fmt(F29, 'G'), "\n"); 61*ce95e1b3SDavid du Colombier print("F30\t", *fmt(F30, 'G'), "\tF31\t", *fmt(F31, 'G'), "\n"); 62*ce95e1b3SDavid du Colombier} 63*ce95e1b3SDavid du Colombier 64*ce95e1b3SDavid du Colombierdefn fpr() 65*ce95e1b3SDavid du Colombier{ 66*ce95e1b3SDavid du Colombier print("F0\t", *fmt(F0, 'g'), "\tF1\t", *fmt(F1, 'g'), "\n"); 67*ce95e1b3SDavid du Colombier print("F2\t", *fmt(F2, 'g'), "\tF3\t", *fmt(F3, 'g'), "\n"); 68*ce95e1b3SDavid du Colombier print("F4\t", *fmt(F4, 'g'), "\tF5\t", *fmt(F5, 'g'), "\n"); 69*ce95e1b3SDavid du Colombier print("F6\t", *fmt(F6, 'g'), "\tF7\t", *fmt(F7, 'g'), "\n"); 70*ce95e1b3SDavid du Colombier print("F8\t", *fmt(F8, 'g'), "\tF9\t", *fmt(F9, 'g'), "\n"); 71*ce95e1b3SDavid du Colombier print("F10\t", *fmt(F10, 'g'), "\tF11\t", *fmt(F11, 'g'), "\n"); 72*ce95e1b3SDavid du Colombier print("F12\t", *fmt(F12, 'g'), "\tF13\t", *fmt(F13, 'g'), "\n"); 73*ce95e1b3SDavid du Colombier print("F14\t", *fmt(F14, 'g'), "\tF15\t", *fmt(F15, 'g'), "\n"); 74*ce95e1b3SDavid du Colombier print("F16\t", *fmt(F16, 'g'), "\tF17\t", *fmt(F17, 'g'), "\n"); 75*ce95e1b3SDavid du Colombier print("F18\t", *fmt(F18, 'g'), "\tF19\t", *fmt(F19, 'g'), "\n"); 76*ce95e1b3SDavid du Colombier print("F20\t", *fmt(F20, 'g'), "\tF21\t", *fmt(F21, 'g'), "\n"); 77*ce95e1b3SDavid du Colombier print("F22\t", *fmt(F22, 'g'), "\tF23\t", *fmt(F23, 'g'), "\n"); 78*ce95e1b3SDavid du Colombier print("F24\t", *fmt(F24, 'g'), "\tF25\t", *fmt(F25, 'g'), "\n"); 79*ce95e1b3SDavid du Colombier print("F26\t", *fmt(F26, 'g'), "\tF27\t", *fmt(F27, 'g'), "\n"); 80*ce95e1b3SDavid du Colombier print("F28\t", *fmt(F28, 'g'), "\tF29\t", *fmt(F29, 'g'), "\n"); 81*ce95e1b3SDavid du Colombier print("F30\t", *fmt(F30, 'g'), "\tF31\t", *fmt(F31, 'g'), "\n"); 82*ce95e1b3SDavid du Colombier} 83*ce95e1b3SDavid du Colombier 84*ce95e1b3SDavid du Colombierdefn spr() // print special processor registers 85*ce95e1b3SDavid du Colombier{ 86*ce95e1b3SDavid du Colombier local pc, link, cause; 87*ce95e1b3SDavid du Colombier 88*ce95e1b3SDavid du Colombier pc = *PC; 89*ce95e1b3SDavid du Colombier print("PC\t", pc, " ", fmt(pc, 'a'), " "); 90*ce95e1b3SDavid du Colombier pfl(pc); 91*ce95e1b3SDavid du Colombier 92*ce95e1b3SDavid du Colombier link = *R1; 93*ce95e1b3SDavid du Colombier print("SP\t", *SP, "\tLINK\t", link, " ", fmt(link, 'a'), " "); 94*ce95e1b3SDavid du Colombier pfl(link); 95*ce95e1b3SDavid du Colombier 96*ce95e1b3SDavid du Colombier cause = *CAUSE; 97*ce95e1b3SDavid du Colombier print("STATUS\t", *STATUS, "\tCAUSE\t", cause, " ", reason(cause), "\n"); 98*ce95e1b3SDavid du Colombier} 99*ce95e1b3SDavid du Colombier 100*ce95e1b3SDavid du Colombierdefn regs() // print all registers 101*ce95e1b3SDavid du Colombier{ 102*ce95e1b3SDavid du Colombier spr(); 103*ce95e1b3SDavid du Colombier gpr(); 104*ce95e1b3SDavid du Colombier Fpr(); 105*ce95e1b3SDavid du Colombier} 106*ce95e1b3SDavid du Colombier 107*ce95e1b3SDavid du Colombierdefn pstop(pid) 108*ce95e1b3SDavid du Colombier{ 109*ce95e1b3SDavid du Colombier local l, pc; 110*ce95e1b3SDavid du Colombier 111*ce95e1b3SDavid du Colombier pc = *PC; 112*ce95e1b3SDavid du Colombier 113*ce95e1b3SDavid du Colombier print(pid,": ", reason(*CAUSE), "\t"); 114*ce95e1b3SDavid du Colombier print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n"); 115*ce95e1b3SDavid du Colombier 116*ce95e1b3SDavid du Colombier if notes then { 117*ce95e1b3SDavid du Colombier if notes[0] != "sys: breakpoint" then { 118*ce95e1b3SDavid du Colombier print("Notes pending:\n"); 119*ce95e1b3SDavid du Colombier l = notes; 120*ce95e1b3SDavid du Colombier while l do { 121*ce95e1b3SDavid du Colombier print("\t", head l, "\n"); 122*ce95e1b3SDavid du Colombier l = tail l; 123*ce95e1b3SDavid du Colombier } 124*ce95e1b3SDavid du Colombier } 125*ce95e1b3SDavid du Colombier } 126*ce95e1b3SDavid du Colombier} 127*ce95e1b3SDavid du Colombier 128*ce95e1b3SDavid du ColombiersizeofUreg = 296; 129*ce95e1b3SDavid du Colombieraggr Ureg 130*ce95e1b3SDavid du Colombier{ 131*ce95e1b3SDavid du Colombier { 132*ce95e1b3SDavid du Colombier 'W' 0 pc; 133*ce95e1b3SDavid du Colombier 'a' 0 regs; 134*ce95e1b3SDavid du Colombier }; 135*ce95e1b3SDavid du Colombier 'W' 8 r1; 136*ce95e1b3SDavid du Colombier { 137*ce95e1b3SDavid du Colombier 'W' 16 r2; 138*ce95e1b3SDavid du Colombier 'W' 16 sp; 139*ce95e1b3SDavid du Colombier 'W' 16 usp; 140*ce95e1b3SDavid du Colombier }; 141*ce95e1b3SDavid du Colombier 'W' 24 r3; 142*ce95e1b3SDavid du Colombier 'W' 32 r4; 143*ce95e1b3SDavid du Colombier 'W' 40 r5; 144*ce95e1b3SDavid du Colombier 'W' 48 r6; 145*ce95e1b3SDavid du Colombier 'W' 56 r7; 146*ce95e1b3SDavid du Colombier { 147*ce95e1b3SDavid du Colombier 'W' 64 r8; 148*ce95e1b3SDavid du Colombier 'W' 64 arg; 149*ce95e1b3SDavid du Colombier 'W' 64 ret; 150*ce95e1b3SDavid du Colombier }; 151*ce95e1b3SDavid du Colombier 'W' 72 r9; 152*ce95e1b3SDavid du Colombier 'W' 80 r10; 153*ce95e1b3SDavid du Colombier 'W' 88 r11; 154*ce95e1b3SDavid du Colombier 'W' 96 r12; 155*ce95e1b3SDavid du Colombier 'W' 104 r13; 156*ce95e1b3SDavid du Colombier 'W' 112 r14; 157*ce95e1b3SDavid du Colombier 'W' 120 r15; 158*ce95e1b3SDavid du Colombier 'W' 128 r16; 159*ce95e1b3SDavid du Colombier 'W' 136 r17; 160*ce95e1b3SDavid du Colombier 'W' 144 r18; 161*ce95e1b3SDavid du Colombier 'W' 152 r19; 162*ce95e1b3SDavid du Colombier 'W' 160 r20; 163*ce95e1b3SDavid du Colombier 'W' 168 r21; 164*ce95e1b3SDavid du Colombier 'W' 176 r22; 165*ce95e1b3SDavid du Colombier 'W' 184 r23; 166*ce95e1b3SDavid du Colombier 'W' 192 r24; 167*ce95e1b3SDavid du Colombier 'W' 200 r25; 168*ce95e1b3SDavid du Colombier 'W' 208 r26; 169*ce95e1b3SDavid du Colombier 'W' 216 r27; 170*ce95e1b3SDavid du Colombier 'W' 224 r28; 171*ce95e1b3SDavid du Colombier 'W' 232 r29; 172*ce95e1b3SDavid du Colombier 'W' 240 r30; 173*ce95e1b3SDavid du Colombier 'W' 248 r31; 174*ce95e1b3SDavid du Colombier 'W' 256 status; 175*ce95e1b3SDavid du Colombier 'W' 264 ie; 176*ce95e1b3SDavid du Colombier { 177*ce95e1b3SDavid du Colombier 'W' 272 cause; 178*ce95e1b3SDavid du Colombier 'W' 272 type; 179*ce95e1b3SDavid du Colombier }; 180*ce95e1b3SDavid du Colombier 'W' 280 tval; 181*ce95e1b3SDavid du Colombier 'W' 288 curmode; 182*ce95e1b3SDavid du Colombier}; 183*ce95e1b3SDavid du Colombier 184*ce95e1b3SDavid du Colombierdefn 185*ce95e1b3SDavid du ColombierUreg(addr) { 186*ce95e1b3SDavid du Colombier complex Ureg addr; 187*ce95e1b3SDavid du Colombier print("_32_ {\n"); 188*ce95e1b3SDavid du Colombier _32_(addr+0); 189*ce95e1b3SDavid du Colombier print("}\n"); 190*ce95e1b3SDavid du Colombier print(" r1 ", addr.r1, "\n"); 191*ce95e1b3SDavid du Colombier print("_33_ {\n"); 192*ce95e1b3SDavid du Colombier _33_(addr+16); 193*ce95e1b3SDavid du Colombier print("}\n"); 194*ce95e1b3SDavid du Colombier print(" r3 ", addr.r3, "\n"); 195*ce95e1b3SDavid du Colombier print(" r4 ", addr.r4, "\n"); 196*ce95e1b3SDavid du Colombier print(" r5 ", addr.r5, "\n"); 197*ce95e1b3SDavid du Colombier print(" r6 ", addr.r6, "\n"); 198*ce95e1b3SDavid du Colombier print(" r7 ", addr.r7, "\n"); 199*ce95e1b3SDavid du Colombier print("_34_ {\n"); 200*ce95e1b3SDavid du Colombier _34_(addr+64); 201*ce95e1b3SDavid du Colombier print("}\n"); 202*ce95e1b3SDavid du Colombier print(" r9 ", addr.r9, "\n"); 203*ce95e1b3SDavid du Colombier print(" r10 ", addr.r10, "\n"); 204*ce95e1b3SDavid du Colombier print(" r11 ", addr.r11, "\n"); 205*ce95e1b3SDavid du Colombier print(" r12 ", addr.r12, "\n"); 206*ce95e1b3SDavid du Colombier print(" r13 ", addr.r13, "\n"); 207*ce95e1b3SDavid du Colombier print(" r14 ", addr.r14, "\n"); 208*ce95e1b3SDavid du Colombier print(" r15 ", addr.r15, "\n"); 209*ce95e1b3SDavid du Colombier print(" r16 ", addr.r16, "\n"); 210*ce95e1b3SDavid du Colombier print(" r17 ", addr.r17, "\n"); 211*ce95e1b3SDavid du Colombier print(" r18 ", addr.r18, "\n"); 212*ce95e1b3SDavid du Colombier print(" r19 ", addr.r19, "\n"); 213*ce95e1b3SDavid du Colombier print(" r20 ", addr.r20, "\n"); 214*ce95e1b3SDavid du Colombier print(" r21 ", addr.r21, "\n"); 215*ce95e1b3SDavid du Colombier print(" r22 ", addr.r22, "\n"); 216*ce95e1b3SDavid du Colombier print(" r23 ", addr.r23, "\n"); 217*ce95e1b3SDavid du Colombier print(" r24 ", addr.r24, "\n"); 218*ce95e1b3SDavid du Colombier print(" r25 ", addr.r25, "\n"); 219*ce95e1b3SDavid du Colombier print(" r26 ", addr.r26, "\n"); 220*ce95e1b3SDavid du Colombier print(" r27 ", addr.r27, "\n"); 221*ce95e1b3SDavid du Colombier print(" r28 ", addr.r28, "\n"); 222*ce95e1b3SDavid du Colombier print(" r29 ", addr.r29, "\n"); 223*ce95e1b3SDavid du Colombier print(" r30 ", addr.r30, "\n"); 224*ce95e1b3SDavid du Colombier print(" r31 ", addr.r31, "\n"); 225*ce95e1b3SDavid du Colombier print(" status ", addr.status, "\n"); 226*ce95e1b3SDavid du Colombier print(" ie ", addr.ie, "\n"); 227*ce95e1b3SDavid du Colombier print("_35_ {\n"); 228*ce95e1b3SDavid du Colombier _35_(addr+272); 229*ce95e1b3SDavid du Colombier print("}\n"); 230*ce95e1b3SDavid du Colombier print(" tval ", addr.tval, "\n"); 231*ce95e1b3SDavid du Colombier print(" curmode ", addr.curmode, "\n"); 232*ce95e1b3SDavid du Colombier}; 233*ce95e1b3SDavid du Colombier 234*ce95e1b3SDavid du Colombierdefn linkreg(addr) 235*ce95e1b3SDavid du Colombier{ 236*ce95e1b3SDavid du Colombier complex Ureg addr; 237*ce95e1b3SDavid du Colombier return addr.r1\Y; 238*ce95e1b3SDavid du Colombier} 239*ce95e1b3SDavid du Colombier 240*ce95e1b3SDavid du Colombierprint("/sys/lib/acid/riscv64"); 241