Clean up RCS ids
[projects/cmucl/cmucl.git] / src / lisp / sparc-lispregs.h
CommitLineData
eeab7066
RT
1/*
2
3 This code was written as part of the CMU Common Lisp project at
4 Carnegie Mellon University, and has been placed in the public domain.
5
6*/
571df509 7
e67c0397 8#ifndef _SPARC_LISPREGS_H_
9#define _SPARC_LISPREGS_H_
36232b68 10
11#ifdef LANGUAGE_ASSEMBLY
12
571df509 13#ifdef __STDC__
14 /* Standard C token concatenation */
15#define CAT(a,b) a ## b
16
17#else
18 /* Reisser CPP token concatenation */
19#define CAT(a,b) a/**/b
20
21#endif
22
23/*
24 * Note: concatenation to non preprocessor symbols is not defined,
25 * SunPRO C 2.0.1 yields % g0, perfectly valid according to ANSI
26 */
27#define GREG(num) CAT(%g,num)
28#define OREG(num) CAT(%o,num)
29#define LREG(num) CAT(%l,num)
30#define IREG(num) CAT(%i,num)
36232b68 31
32#else
33
34#define GREG(num) (num)
35#define OREG(num) ((num)+8)
36#define LREG(num) ((num)+16)
37#define IREG(num) ((num)+24)
38
39#endif
40
54d63fde 41#define GREG_NUM(num) (num)
42#define OREG_NUM(num) ((num)+8)
43#define LREG_NUM(num) ((num)+16)
44#define IREG_NUM(num) ((num)+24)
45
36232b68 46#define NREGS (32)
47
54d63fde 48/*
49 * Define all the Lisp registers appropriately for assembly and C.
50 * The registers ending with NUM are meant for use in assembly
51 * routines where we need the register number for getting SC_OFFSET
52 */
36232b68 53#define reg_ZERO GREG(0)
54d63fde 54#define reg_ZERO_NUM GREG_NUM(0)
36232b68 55#define reg_ALLOC GREG(1)
54d63fde 56#define reg_ALLOC_NUM GREG_NUM(1)
36232b68 57#define reg_NIL GREG(2)
54d63fde 58#define reg_NIL_NUM GREG_NUM(2)
36232b68 59#define reg_CSP GREG(3)
54d63fde 60#define reg_CSP_NUM GREG_NUM(3)
36232b68 61#define reg_CFP GREG(4)
54d63fde 62#define reg_CFP_NUM GREG_NUM(4)
36232b68 63#define reg_BSP GREG(5)
54d63fde 64#define reg_BSP_NUM GREG_NUM(5)
5e5f74ca 65/* %g6 and %g7 are supposed to be reserved for the system */
36232b68 66
67#define reg_NL0 OREG(0)
54d63fde 68#define reg_NL0_NUM OREG_NUM(0)
36232b68 69#define reg_NL1 OREG(1)
54d63fde 70#define reg_NL1_NUM OREG_NUM(1)
36232b68 71#define reg_NL2 OREG(2)
54d63fde 72#define reg_NL2_NUM OREG_NUM(2)
36232b68 73#define reg_NL3 OREG(3)
54d63fde 74#define reg_NL3_NUM OREG_NUM(3)
36232b68 75#define reg_NL4 OREG(4)
54d63fde 76#define reg_NL4_NUM OREG_NUM(4)
36232b68 77#define reg_NL5 OREG(5)
54d63fde 78#define reg_NL5_NUM OREG_NUM(5)
36232b68 79#define reg_NSP OREG(6)
54d63fde 80#define reg_NSP_NUM OREG_NUM(6)
36232b68 81#define reg_NARGS OREG(7)
54d63fde 82#define reg_NARGS_NUM OREG_NUM(7)
36232b68 83
84#define reg_A0 LREG(0)
54d63fde 85#define reg_A0_NUM LREG_NUM(0)
36232b68 86#define reg_A1 LREG(1)
54d63fde 87#define reg_A1_NUM LREG_NUM(1)
36232b68 88#define reg_A2 LREG(2)
54d63fde 89#define reg_A2_NUM LREG_NUM(2)
36232b68 90#define reg_A3 LREG(3)
54d63fde 91#define reg_A3_NUM LREG_NUM(3)
36232b68 92#define reg_A4 LREG(4)
54d63fde 93#define reg_A4_NUM LREG_NUM(4)
36232b68 94#define reg_A5 LREG(5)
54d63fde 95#define reg_A5_NUM LREG_NUM(5)
36232b68 96#define reg_OCFP LREG(6)
54d63fde 97#define reg_OCFP_NUM LREG_NUM(6)
36232b68 98#define reg_LRA LREG(7)
54d63fde 99#define reg_LRA_NUM LREG_NUM(7)
36232b68 100
101#define reg_FDEFN IREG(0)
54d63fde 102#define reg_FDEFN_NUM IREG_NUM(0)
36232b68 103#define reg_LEXENV IREG(1)
54d63fde 104#define reg_LEXENV_NUM IREG_NUM(1)
36232b68 105#define reg_L0 IREG(2)
54d63fde 106#define reg_L0_NUM IREG_NUM(2)
5e5f74ca 107#define reg_NFP IREG(3)
54d63fde 108#define reg_NFP_NUM IREG_NUM(3)
5e5f74ca 109#define reg_CFUNC IREG(4)
54d63fde 110#define reg_CFUNC_NUM IREG_NUM(4)
36232b68 111#define reg_CODE IREG(5)
54d63fde 112#define reg_CODE_NUM IREG_NUM(5)
36232b68 113#define reg_LIP IREG(7)
54d63fde 114#define reg_LIP_NUM IREG_NUM(7)
115
36232b68 116#define REGNAMES \
117 "ZERO", "ALLOC", "NULL", "CSP", \
5e5f74ca 118 "CFP", "BSP", "%g6", "%g7", \
36232b68 119 "NL0", "NL1", "NL2", "NL3", \
120 "NL4", "NL5", "NSP", "NARGS", \
121 "A0", "A1", "A2", "A3", \
122 "A4", "A5", "OCFP", "LRA", \
5e5f74ca 123 "FDEFN", "LEXENV", "L0", "NFP", \
124 "CFUNC", "CODE", "???", "LIP"
36232b68 125
126#define BOXED_REGISTERS { \
127 reg_A0, reg_A1, reg_A2, reg_A3, reg_A4, reg_A5, reg_FDEFN, reg_LEXENV, \
249f5588 128 reg_OCFP, reg_LRA, reg_CODE \
36232b68 129}
130
131#ifndef LANGUAGE_ASSEMBLY
132
571df509 133#ifdef SOLARIS
134
135#include <ucontext.h>
136
9a8c1c2f 137extern int *solaris_register_address(struct ucontext *, int);
571df509 138
139#define SC_REG(sc, reg) (*solaris_register_address(sc,reg))
140
141/* short cuts */
142
143#define SC_PC(sc) ((sc)->uc_mcontext.gregs[REG_PC])
144#define SC_NPC(sc) ((sc)->uc_mcontext.gregs[REG_nPC])
145
146#else
147
36232b68 148#define SC_REG(sc, n) (((int *)((sc)->sc_g1))[n])
149#define SC_PC(sc) ((sc)->sc_pc)
150#define SC_NPC(sc) ((sc)->sc_npc)
151
571df509 152#endif /* SOLARIS */
153
36232b68 154#endif
e67c0397 155
156#endif /* _SPARC_LISPREGS_H_ */