| Commit | Line | Data |
|---|---|---|
| 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 | 137 | extern 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_ */ |