plan9front/sys/src/libmach/2.c

88 lines
2.1 KiB
C

/*
* 68020 definition
*/
#include <u.h>
#include "/68020/include/ureg.h"
#include <libc.h>
#include <bio.h>
#include <mach.h>
#define MAXREG 0
#define MINREG 0
#define REGOFF(x) (ulong)(&((struct Ureg *) 0)->x)
#define VO REGOFF(vo) /* vo, 2 bytes */
#define SR REGOFF(sr) /* sr, 2 bytes */
#define R0 REGOFF(r0)
#define PC REGOFF(pc)
#define DBMAGIC REGOFF(magic)
#define SP REGOFF(usp)
#define REGSIZE (R0+4)
#define FCTL(x) (REGSIZE+(x)*4)
#define FREG(x) (FCTL(3)+(x)*12)
#define FPREGSIZE (11*12)
/*
* 68020 register set
*/
Reglist m68020reglist[] = {
{"VO", VO, RINT, 'x'},
{"SR", SR, RINT, 'x'},
{"MAGIC", DBMAGIC, RINT, 'X'},
{"PC", PC, RINT, 'X'},
{"A7", SP, RINT, 'X'},
{"KSP", REGOFF(sp), RINT, 'X'},
{"A6", REGOFF(a6), RINT, 'X'},
{"A5", REGOFF(a5), RINT, 'X'},
{"A4", REGOFF(a4), RINT, 'X'},
{"A3", REGOFF(a3), RINT, 'X'},
{"A2", REGOFF(a2), RINT, 'X'},
{"A1", REGOFF(a1), RINT, 'X'},
{"A0", REGOFF(a0), RINT, 'X'},
{"R7", REGOFF(r7), RINT, 'X'},
{"R6", REGOFF(r6), RINT, 'X'},
{"R5", REGOFF(r5), RINT, 'X'},
{"R4", REGOFF(r4), RINT, 'X'},
{"R3", REGOFF(r3), RINT, 'X'},
{"R2", REGOFF(r2), RINT, 'X'},
{"R1", REGOFF(r1), RINT, 'X'},
{"R0", REGOFF(r0), RINT, 'X'},
{"FPCR", FCTL(0), RFLT, 'X'},
{"FPSR", FCTL(1), RFLT, 'X'},
{"FPIAR", FCTL(2), RFLT, 'X'},
{"F0", FREG(0), RFLT, '8'},
{"F1", FREG(1), RFLT, '8'},
{"F2", FREG(2), RFLT, '8'},
{"F3", FREG(3), RFLT, '8'},
{"F4", FREG(4), RFLT, '8'},
{"F5", FREG(5), RFLT, '8'},
{"F6", FREG(6), RFLT, '8'},
{"F7", FREG(7), RFLT, '8'},
{0}
};
Mach m68020 =
{
"68020",
M68020, /* machine type */
m68020reglist, /* register list */
REGSIZE, /* number of bytes in reg set */
FPREGSIZE, /* number of bytes in fp reg set */
"PC",
"A7",
0, /* link register */
"a6base", /* static base register name */
0, /* value */
0x2000, /* page size */
0x80000000ULL, /* kernel base */
0x80000000ULL, /* kernel text mask */
0x7FFFFFFFULL, /* user stack top */
2, /* quantization of pc */
4, /* szaddr */
4, /* szreg */
4, /* szfloat */
8, /* szdouble */
};