1*ce95e1b3SDavid du Colombier /* 2*ce95e1b3SDavid du Colombier * RISC-V RV64 definition 3*ce95e1b3SDavid du Colombier */ 4*ce95e1b3SDavid du Colombier #include <u.h> 5*ce95e1b3SDavid du Colombier #include <libc.h> 6*ce95e1b3SDavid du Colombier #include <bio.h> 7*ce95e1b3SDavid du Colombier #include "/riscv64/include/ureg.h" 8*ce95e1b3SDavid du Colombier #include <mach.h> 9*ce95e1b3SDavid du Colombier 10*ce95e1b3SDavid du Colombier #define REGOFF(x) (u64int)(&((struct Ureg *) 0)->x) 11*ce95e1b3SDavid du Colombier #define REGSIZE sizeof(struct Ureg) 12*ce95e1b3SDavid du Colombier 13*ce95e1b3SDavid du Colombier #define RCURMODE REGOFF(curmode) 14*ce95e1b3SDavid du Colombier #define FP_REG(x) (RCURMODE+8+8*(x)) 15*ce95e1b3SDavid du Colombier #define FPREGSIZE (8*33) 16*ce95e1b3SDavid du Colombier 17*ce95e1b3SDavid du Colombier Reglist riscv64reglist[] = { 18*ce95e1b3SDavid du Colombier {"STATUS", REGOFF(status), RINT|RRDONLY, 'Y'}, 19*ce95e1b3SDavid du Colombier {"CAUSE", REGOFF(cause), RINT|RRDONLY, 'Y'}, 20*ce95e1b3SDavid du Colombier {"IE", REGOFF(ie), RINT|RRDONLY, 'Y'}, 21*ce95e1b3SDavid du Colombier {"TVAL", REGOFF(tval), RINT|RRDONLY, 'Y'}, 22*ce95e1b3SDavid du Colombier {"CURMODE", REGOFF(curmode), RINT|RRDONLY, 'Y'}, 23*ce95e1b3SDavid du Colombier {"PC", REGOFF(pc), RINT, 'Y'}, 24*ce95e1b3SDavid du Colombier {"SP", REGOFF(r2), RINT, 'Y'}, 25*ce95e1b3SDavid du Colombier {"R31", REGOFF(r31), RINT, 'Y'}, 26*ce95e1b3SDavid du Colombier {"R30", REGOFF(r30), RINT, 'Y'}, 27*ce95e1b3SDavid du Colombier {"R28", REGOFF(r28), RINT, 'Y'}, 28*ce95e1b3SDavid du Colombier {"R27", REGOFF(r27), RINT, 'Y'}, 29*ce95e1b3SDavid du Colombier {"R26", REGOFF(r26), RINT, 'Y'}, 30*ce95e1b3SDavid du Colombier {"R25", REGOFF(r25), RINT, 'Y'}, 31*ce95e1b3SDavid du Colombier {"R24", REGOFF(r24), RINT, 'Y'}, 32*ce95e1b3SDavid du Colombier {"R23", REGOFF(r23), RINT, 'Y'}, 33*ce95e1b3SDavid du Colombier {"R22", REGOFF(r22), RINT, 'Y'}, 34*ce95e1b3SDavid du Colombier {"R21", REGOFF(r21), RINT, 'Y'}, 35*ce95e1b3SDavid du Colombier {"R20", REGOFF(r20), RINT, 'Y'}, 36*ce95e1b3SDavid du Colombier {"R19", REGOFF(r19), RINT, 'Y'}, 37*ce95e1b3SDavid du Colombier {"R18", REGOFF(r18), RINT, 'Y'}, 38*ce95e1b3SDavid du Colombier {"R17", REGOFF(r17), RINT, 'Y'}, 39*ce95e1b3SDavid du Colombier {"R16", REGOFF(r16), RINT, 'Y'}, 40*ce95e1b3SDavid du Colombier {"R15", REGOFF(r15), RINT, 'Y'}, 41*ce95e1b3SDavid du Colombier {"R14", REGOFF(r14), RINT, 'Y'}, 42*ce95e1b3SDavid du Colombier {"R13", REGOFF(r13), RINT, 'Y'}, 43*ce95e1b3SDavid du Colombier {"R12", REGOFF(r12), RINT, 'Y'}, 44*ce95e1b3SDavid du Colombier {"R11", REGOFF(r11), RINT, 'Y'}, 45*ce95e1b3SDavid du Colombier {"R10", REGOFF(r10), RINT, 'Y'}, 46*ce95e1b3SDavid du Colombier {"R9", REGOFF(r9), RINT, 'Y'}, 47*ce95e1b3SDavid du Colombier {"R8", REGOFF(r8), RINT, 'Y'}, 48*ce95e1b3SDavid du Colombier {"R7", REGOFF(r7), RINT, 'Y'}, 49*ce95e1b3SDavid du Colombier {"R6", REGOFF(r6), RINT, 'Y'}, 50*ce95e1b3SDavid du Colombier {"R5", REGOFF(r5), RINT, 'Y'}, 51*ce95e1b3SDavid du Colombier {"R4", REGOFF(r4), RINT, 'Y'}, 52*ce95e1b3SDavid du Colombier {"R3", REGOFF(r3), RINT, 'Y'}, 53*ce95e1b3SDavid du Colombier {"R2", REGOFF(r2), RINT, 'Y'}, 54*ce95e1b3SDavid du Colombier {"R1", REGOFF(r1), RINT, 'Y'}, 55*ce95e1b3SDavid du Colombier {"F0", FP_REG(0), RFLT, 'F'}, 56*ce95e1b3SDavid du Colombier {"F1", FP_REG(1), RFLT, 'F'}, 57*ce95e1b3SDavid du Colombier {"F2", FP_REG(2), RFLT, 'F'}, 58*ce95e1b3SDavid du Colombier {"F3", FP_REG(3), RFLT, 'F'}, 59*ce95e1b3SDavid du Colombier {"F4", FP_REG(4), RFLT, 'F'}, 60*ce95e1b3SDavid du Colombier {"F5", FP_REG(5), RFLT, 'F'}, 61*ce95e1b3SDavid du Colombier {"F6", FP_REG(6), RFLT, 'F'}, 62*ce95e1b3SDavid du Colombier {"F7", FP_REG(7), RFLT, 'F'}, 63*ce95e1b3SDavid du Colombier {"F8", FP_REG(8), RFLT, 'F'}, 64*ce95e1b3SDavid du Colombier {"F9", FP_REG(9), RFLT, 'F'}, 65*ce95e1b3SDavid du Colombier {"F10", FP_REG(10), RFLT, 'F'}, 66*ce95e1b3SDavid du Colombier {"F11", FP_REG(11), RFLT, 'F'}, 67*ce95e1b3SDavid du Colombier {"F12", FP_REG(12), RFLT, 'F'}, 68*ce95e1b3SDavid du Colombier {"F13", FP_REG(13), RFLT, 'F'}, 69*ce95e1b3SDavid du Colombier {"F14", FP_REG(14), RFLT, 'F'}, 70*ce95e1b3SDavid du Colombier {"F15", FP_REG(15), RFLT, 'F'}, 71*ce95e1b3SDavid du Colombier {"F16", FP_REG(16), RFLT, 'F'}, 72*ce95e1b3SDavid du Colombier {"F17", FP_REG(17), RFLT, 'F'}, 73*ce95e1b3SDavid du Colombier {"F18", FP_REG(18), RFLT, 'F'}, 74*ce95e1b3SDavid du Colombier {"F19", FP_REG(19), RFLT, 'F'}, 75*ce95e1b3SDavid du Colombier {"F20", FP_REG(20), RFLT, 'F'}, 76*ce95e1b3SDavid du Colombier {"F21", FP_REG(21), RFLT, 'F'}, 77*ce95e1b3SDavid du Colombier {"F22", FP_REG(22), RFLT, 'F'}, 78*ce95e1b3SDavid du Colombier {"F23", FP_REG(23), RFLT, 'F'}, 79*ce95e1b3SDavid du Colombier {"F24", FP_REG(24), RFLT, 'F'}, 80*ce95e1b3SDavid du Colombier {"F25", FP_REG(25), RFLT, 'F'}, 81*ce95e1b3SDavid du Colombier {"F26", FP_REG(26), RFLT, 'F'}, 82*ce95e1b3SDavid du Colombier {"F27", FP_REG(27), RFLT, 'F'}, 83*ce95e1b3SDavid du Colombier {"F28", FP_REG(28), RFLT, 'F'}, 84*ce95e1b3SDavid du Colombier {"F29", FP_REG(29), RFLT, 'F'}, 85*ce95e1b3SDavid du Colombier {"F30", FP_REG(30), RFLT, 'F'}, 86*ce95e1b3SDavid du Colombier {"F31", FP_REG(31), RFLT, 'F'}, 87*ce95e1b3SDavid du Colombier {"FPCSR", FP_REG(32)+4, RFLT, 'X'}, 88*ce95e1b3SDavid du Colombier { 0 } 89*ce95e1b3SDavid du Colombier }; 90*ce95e1b3SDavid du Colombier 91*ce95e1b3SDavid du Colombier /* the machine description */ 92*ce95e1b3SDavid du Colombier Mach mriscv64 = 93*ce95e1b3SDavid du Colombier { 94*ce95e1b3SDavid du Colombier "riscv64", 95*ce95e1b3SDavid du Colombier MRISCV64, /* machine type */ 96*ce95e1b3SDavid du Colombier riscv64reglist, /* register set */ 97*ce95e1b3SDavid du Colombier REGSIZE, /* register set size */ 98*ce95e1b3SDavid du Colombier FPREGSIZE, /* FP register set size */ 99*ce95e1b3SDavid du Colombier "PC", /* name of PC */ 100*ce95e1b3SDavid du Colombier "SP", /* name of SP */ 101*ce95e1b3SDavid du Colombier "R1", /* name of link register */ 102*ce95e1b3SDavid du Colombier "setSB", /* static base register name */ 103*ce95e1b3SDavid du Colombier 0, /* static base register value */ 104*ce95e1b3SDavid du Colombier 0x1000, /* page size */ 105*ce95e1b3SDavid du Colombier /* these are Sv39 values */ 106*ce95e1b3SDavid du Colombier 0xffffffc080000000ULL, /* kernel base */ 107*ce95e1b3SDavid du Colombier 0x8000000000000000ULL, /* kernel text mask for all Sv* */ 108*ce95e1b3SDavid du Colombier 0x0000003fffffffffULL, /* user stack top */ 109*ce95e1b3SDavid du Colombier 2, /* quantization of pc */ 110*ce95e1b3SDavid du Colombier 8, /* szaddr */ 111*ce95e1b3SDavid du Colombier 8, /* szreg */ 112*ce95e1b3SDavid du Colombier 4, /* szfloat */ 113*ce95e1b3SDavid du Colombier 8, /* szdouble */ 114*ce95e1b3SDavid du Colombier }; 115