147ad9175SDavid du Colombier /* 247ad9175SDavid du Colombier * PowerPC 64 definition 347ad9175SDavid du Colombier * forsyth@vitanuova.com 447ad9175SDavid du Colombier */ 547ad9175SDavid du Colombier #include <u.h> 647ad9175SDavid du Colombier #include <libc.h> 747ad9175SDavid du Colombier #include <bio.h> 847ad9175SDavid du Colombier #include "/power64/include/ureg.h" 947ad9175SDavid du Colombier #include <mach.h> 1047ad9175SDavid du Colombier 1147ad9175SDavid du Colombier 1247ad9175SDavid du Colombier #define REGOFF(x) offsetof(struct Ureg, x) 1347ad9175SDavid du Colombier 1447ad9175SDavid du Colombier #define R31 REGOFF(r31) 1547ad9175SDavid du Colombier #define FP_REG(x) (R31+4+8*(x)) 1647ad9175SDavid du Colombier 1747ad9175SDavid du Colombier #define REGSIZE sizeof(struct Ureg) 1847ad9175SDavid du Colombier #define FPREGSIZE (8*33) 1947ad9175SDavid du Colombier 2047ad9175SDavid du Colombier Reglist power64reglist[] = { 2147ad9175SDavid du Colombier {"CAUSE", REGOFF(cause), RINT|RRDONLY, 'Y'}, 2247ad9175SDavid du Colombier {"TRAP", REGOFF(cause), RINT|RRDONLY, 'Y'}, /* alias for acid */ 23d1be6b08SDavid du Colombier // {"MSR", REGOFF(msr), RINT|RRDONLY, 'Y'}, 2447ad9175SDavid du Colombier {"PC", REGOFF(pc), RINT, 'Y'}, 2547ad9175SDavid du Colombier {"LR", REGOFF(lr), RINT, 'Y'}, 2647ad9175SDavid du Colombier {"CR", REGOFF(cr), RINT, 'X'}, 2747ad9175SDavid du Colombier {"XER", REGOFF(xer), RINT, 'Y'}, 2847ad9175SDavid du Colombier {"CTR", REGOFF(ctr), RINT, 'Y'}, 2947ad9175SDavid du Colombier {"PC", REGOFF(pc), RINT, 'Y'}, 3047ad9175SDavid du Colombier {"SP", REGOFF(sp), RINT, 'Y'}, 3147ad9175SDavid du Colombier {"R0", REGOFF(r0), RINT, 'Y'}, 3247ad9175SDavid du Colombier /* R1 is SP */ 3347ad9175SDavid du Colombier {"R2", REGOFF(r2), RINT, 'Y'}, 3447ad9175SDavid du Colombier {"R3", REGOFF(r3), RINT, 'Y'}, 3547ad9175SDavid du Colombier {"R4", REGOFF(r4), RINT, 'Y'}, 3647ad9175SDavid du Colombier {"R5", REGOFF(r5), RINT, 'Y'}, 3747ad9175SDavid du Colombier {"R6", REGOFF(r6), RINT, 'Y'}, 3847ad9175SDavid du Colombier {"R7", REGOFF(r7), RINT, 'Y'}, 3947ad9175SDavid du Colombier {"R8", REGOFF(r8), RINT, 'Y'}, 4047ad9175SDavid du Colombier {"R9", REGOFF(r9), RINT, 'Y'}, 4147ad9175SDavid du Colombier {"R10", REGOFF(r10), RINT, 'Y'}, 4247ad9175SDavid du Colombier {"R11", REGOFF(r11), RINT, 'Y'}, 4347ad9175SDavid du Colombier {"R12", REGOFF(r12), RINT, 'Y'}, 4447ad9175SDavid du Colombier {"R13", REGOFF(r13), RINT, 'Y'}, 4547ad9175SDavid du Colombier {"R14", REGOFF(r14), RINT, 'Y'}, 4647ad9175SDavid du Colombier {"R15", REGOFF(r15), RINT, 'Y'}, 4747ad9175SDavid du Colombier {"R16", REGOFF(r16), RINT, 'Y'}, 4847ad9175SDavid du Colombier {"R17", REGOFF(r17), RINT, 'Y'}, 4947ad9175SDavid du Colombier {"R18", REGOFF(r18), RINT, 'Y'}, 5047ad9175SDavid du Colombier {"R19", REGOFF(r19), RINT, 'Y'}, 5147ad9175SDavid du Colombier {"R20", REGOFF(r20), RINT, 'Y'}, 5247ad9175SDavid du Colombier {"R21", REGOFF(r21), RINT, 'Y'}, 5347ad9175SDavid du Colombier {"R22", REGOFF(r22), RINT, 'Y'}, 5447ad9175SDavid du Colombier {"R23", REGOFF(r23), RINT, 'Y'}, 5547ad9175SDavid du Colombier {"R24", REGOFF(r24), RINT, 'Y'}, 5647ad9175SDavid du Colombier {"R25", REGOFF(r25), RINT, 'Y'}, 5747ad9175SDavid du Colombier {"R26", REGOFF(r26), RINT, 'Y'}, 5847ad9175SDavid du Colombier {"R27", REGOFF(r27), RINT, 'Y'}, 5947ad9175SDavid du Colombier {"R28", REGOFF(r28), RINT, 'Y'}, 6047ad9175SDavid du Colombier {"R29", REGOFF(r29), RINT, 'Y'}, 6147ad9175SDavid du Colombier {"R30", REGOFF(r30), RINT, 'Y'}, 6247ad9175SDavid du Colombier {"R31", REGOFF(r31), RINT, 'Y'}, 6347ad9175SDavid du Colombier {"F0", FP_REG(0), RFLT, 'F'}, 6447ad9175SDavid du Colombier {"F1", FP_REG(1), RFLT, 'F'}, 6547ad9175SDavid du Colombier {"F2", FP_REG(2), RFLT, 'F'}, 6647ad9175SDavid du Colombier {"F3", FP_REG(3), RFLT, 'F'}, 6747ad9175SDavid du Colombier {"F4", FP_REG(4), RFLT, 'F'}, 6847ad9175SDavid du Colombier {"F5", FP_REG(5), RFLT, 'F'}, 6947ad9175SDavid du Colombier {"F6", FP_REG(6), RFLT, 'F'}, 7047ad9175SDavid du Colombier {"F7", FP_REG(7), RFLT, 'F'}, 7147ad9175SDavid du Colombier {"F8", FP_REG(8), RFLT, 'F'}, 7247ad9175SDavid du Colombier {"F9", FP_REG(9), RFLT, 'F'}, 7347ad9175SDavid du Colombier {"F10", FP_REG(10), RFLT, 'F'}, 7447ad9175SDavid du Colombier {"F11", FP_REG(11), RFLT, 'F'}, 7547ad9175SDavid du Colombier {"F12", FP_REG(12), RFLT, 'F'}, 7647ad9175SDavid du Colombier {"F13", FP_REG(13), RFLT, 'F'}, 7747ad9175SDavid du Colombier {"F14", FP_REG(14), RFLT, 'F'}, 7847ad9175SDavid du Colombier {"F15", FP_REG(15), RFLT, 'F'}, 7947ad9175SDavid du Colombier {"F16", FP_REG(16), RFLT, 'F'}, 8047ad9175SDavid du Colombier {"F17", FP_REG(17), RFLT, 'F'}, 8147ad9175SDavid du Colombier {"F18", FP_REG(18), RFLT, 'F'}, 8247ad9175SDavid du Colombier {"F19", FP_REG(19), RFLT, 'F'}, 8347ad9175SDavid du Colombier {"F20", FP_REG(20), RFLT, 'F'}, 8447ad9175SDavid du Colombier {"F21", FP_REG(21), RFLT, 'F'}, 8547ad9175SDavid du Colombier {"F22", FP_REG(22), RFLT, 'F'}, 8647ad9175SDavid du Colombier {"F23", FP_REG(23), RFLT, 'F'}, 8747ad9175SDavid du Colombier {"F24", FP_REG(24), RFLT, 'F'}, 8847ad9175SDavid du Colombier {"F25", FP_REG(25), RFLT, 'F'}, 8947ad9175SDavid du Colombier {"F26", FP_REG(26), RFLT, 'F'}, 9047ad9175SDavid du Colombier {"F27", FP_REG(27), RFLT, 'F'}, 9147ad9175SDavid du Colombier {"F28", FP_REG(28), RFLT, 'F'}, 9247ad9175SDavid du Colombier {"F29", FP_REG(29), RFLT, 'F'}, 9347ad9175SDavid du Colombier {"F30", FP_REG(30), RFLT, 'F'}, 9447ad9175SDavid du Colombier {"F31", FP_REG(31), RFLT, 'F'}, 9547ad9175SDavid du Colombier {"FPSCR", FP_REG(32)+4, RFLT, 'X'}, 9647ad9175SDavid du Colombier { 0 } 9747ad9175SDavid du Colombier }; 9847ad9175SDavid du Colombier 9947ad9175SDavid du Colombier /* the machine description */ 10047ad9175SDavid du Colombier Mach mpower64 = 10147ad9175SDavid du Colombier { 10247ad9175SDavid du Colombier "power64", 10347ad9175SDavid du Colombier MPOWER64, /* machine type */ 10447ad9175SDavid du Colombier power64reglist, /* register set */ 10547ad9175SDavid du Colombier REGSIZE, /* number of bytes in register set */ 10647ad9175SDavid du Colombier FPREGSIZE, /* number of bytes in FP register set */ 10747ad9175SDavid du Colombier "PC", /* name of PC */ 10847ad9175SDavid du Colombier "SP", /* name of SP */ 10947ad9175SDavid du Colombier "LR", /* name of link register */ 11047ad9175SDavid du Colombier "setSB", /* static base register name */ 11147ad9175SDavid du Colombier 0, /* value */ 112*d3993254SDavid du Colombier 0x100000, /* page size (TODO, too many choices) */ 113*d3993254SDavid du Colombier 0xffffffff80000000ull, /* kernel base (TODO, likely incorrect) */ 114*d3993254SDavid du Colombier 0xf000000000000000ull, /* kernel text mask (TODO, likely incorrect) */ 115*d3993254SDavid du Colombier 0x00007ffffff00000ull, /* user stack top (TODO, likely incorrect) */ 11647ad9175SDavid du Colombier 4, /* quantization of pc */ 11747ad9175SDavid du Colombier 8, /* szaddr */ 11847ad9175SDavid du Colombier 8, /* szreg */ 11947ad9175SDavid du Colombier 4, /* szfloat */ 12047ad9175SDavid du Colombier 8, /* szdouble */ 12147ad9175SDavid du Colombier }; 122