1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
|
/* ml-roots.h
*
* COPYRIGHT (c) 1995 by AT&T Bell Laboratories.
*
* The root register indices for various machines.
*
* NROOTS gives the size of the variable-size portion (roots[]) of the
* ML state vector. Note that the name "roots" is slightly misleading;
* while every entry in the vector must be saved over calls to C, not
* every entry is a valid root on every entry to C. The valididity of
* most entries is indicated using the register map convention (via
* ArgRegMap); these entries are valid (and live) iff the corresponding
* bit in the register mask is set (see cps/generic.sml). N_ARG_REGS
* gives the number of such entries. The pc, exncont, varptr, and baseptr
* (if defined) are always valid roots, and the icounter (if defined) never is.
*/
#ifndef _ML_ROOTS_
#define _ML_ROOTS_
#if defined(TARGET_ALPHA32)
# define NROOTS 22 /* $0-$4, pc, $6-$8, $10, $14, $16-26 */
# define N_ARG_REGS 18
# define N_PSEUDO_REGS 2
# define ARG_INDX 0 /* $0 */
# define CONT_INDX 1 /* $1 */
# define CLOSURE_INDX 2 /* $2 */
# define LINK_INDX 3 /* $3 */
# define PC_INDX 4
# define MISC0_INDX 5 /* $6 */
# define MISC1_INDX 6 /* $7 */
# define MISC2_INDX 7 /* $8 */
# define MISC3_INDX 8 /* $15 */
# define MISC4_INDX 9 /* $16 */
# define MISC5_INDX 10 /* $17 */
# define MISC6_INDX 11 /* $18 */
# define MISC7_INDX 12 /* $19 */
# define MISC8_INDX 13 /* $20 */
# define MISC9_INDX 14 /* $20 */
# define MISC10_INDX 15 /* $20 */
# define MISC11_INDX 16 /* $20 */
# define MISC12_INDX 17 /* $20 */
# define MISC13_INDX 18 /* $20 */
# define VAR_INDX 19 /* $10 */
# define EXN_INDX 20 /* $14 */
# define BASE_INDX 21 /* $4 */
#elif defined(TARGET_HPPA)
# define NROOTS 24
# define N_PSEUDO_REGS 2
# define N_ARG_REGS 20 /* 4 std. regs & 16 miscregs */
# define PC_INDX 0
# define LINK_INDX 1
# define CLOSURE_INDX 2
# define ARG_INDX 3
# define CONT_INDX 4
# define VAR_INDX 5
# define BASE_INDX 6
# define EXN_INDX 7
# define MISC0_INDX 8
# define MISC1_INDX 9
# define MISC2_INDX 10
# define MISC3_INDX 11
# define MISC4_INDX 12
# define MISC5_INDX 13
# define MISC6_INDX 14
# define MISC7_INDX 15
# define MISC8_INDX 16
# define MISC9_INDX 17
# define MISC10_INDX 18
# define MISC11_INDX 19
# define MISC12_INDX 20
# define MISC13_INDX 21
# define MISC14_INDX 22
# define MISC15_INDX 23
#elif defined (TARGET_M68)
# define NROOTS 8 /* d7, a0-a4, d3, pc */
# define N_ARG_REGS 5
# define PC_INDX 7
# define EXN_INDX 0 /* d7 */
# define ARG_INDX 1 /* a0 */
# define CONT_INDX 2 /* a1 */
# define CLOSURE_INDX 3 /* a2 */
# define VAR_INDX 6 /* d3 */
# define LINK_INDX 4
#elif defined(TARGET_MIPS)
# define NROOTS 21 /* $2-$4, $30, pc, $5-$18, $20, $24 */
# define N_ARG_REGS 17
# define N_PSEUDO_REGS 2
# define PC_INDX 4
# define EXN_INDX 3 /* $30 */
# define ARG_INDX 0 /* $2 */
# define CONT_INDX 1 /* $3 */
# define CLOSURE_INDX 2 /* $4 */
# define VAR_INDX 19 /* $20 */
# define BASE_INDX 20 /* $24 */
# define LINK_INDX 5 /* $5 */
# define MISC0_INDX 6 /* $6 */
# define MISC1_INDX 7 /* $7 */
# define MISC2_INDX 8 /* $8 */
# define MISC3_INDX 9 /* $9 */
# define MISC4_INDX 10 /* $10 */
# define MISC5_INDX 11 /* $11 */
# define MISC6_INDX 12 /* $12 */
# define MISC7_INDX 13 /* $13 */
#elif (defined(TARGET_PPC) || defined(TARGET_RS6000))
# define NROOTS 24
# define N_ARG_REGS 19
# define N_PSEUDO_REGS 2
# define LINK_INDX 0
# define CLOSURE_INDX 1
# define ARG_INDX 2
# define CONT_INDX 3
# define EXN_INDX 4
# define VAR_INDX 5
# define BASE_INDX 6
# define PC_INDX 8
# define MISC0_INDX 9 /* 24 */
# define MISC1_INDX 10 /* 25 */
# define MISC2_INDX 11 /* 26 */
# define MISC3_INDX 12 /* 27 */
# define MISC4_INDX 13 /* 3 */
# define MISC5_INDX 14 /* 4 */
# define MISC6_INDX 15 /* 5 */
# define MISC7_INDX 16 /* 6 */
# define MISC8_INDX 17 /* 7 */
# define MISC9_INDX 18 /* 8 */
# define MISC10_INDX 19 /* 9 */
# define MISC11_INDX 20 /* 10 */
# define MISC12_INDX 21 /* 11 */
# define MISC13_INDX 22 /* 12 */
# define MISC14_INDX 23 /* 13 */
#elif defined(TARGET_SPARC)
# define NROOTS 23 /* pc, %i0-i5, %g7, %g1-%g3, %l0-%l7, %o0-%o1 %o3-%o4 */
# define N_ARG_REGS 19 /* exclude baseptr */
# define N_PSEUDO_REGS 2
# define PC_INDX 6
# define EXN_INDX 7 /* %g7 */
# define ARG_INDX 0 /* %i0 */
# define CONT_INDX 1 /* %i1 */
# define CLOSURE_INDX 2 /* %i2 */
# define BASE_INDX 3 /* %i3 */
# define VAR_INDX 5 /* %i5 */
# define LINK_INDX 4 /* %g1 */
# define MISC0_INDX 8 /* %g2 */
# define MISC1_INDX 9 /* %g3 */
# define MISC2_INDX 10 /* %o0 */
# define MISC3_INDX 11 /* %o1 */
# define MISC4_INDX 12 /* %l0 */
# define MISC5_INDX 13 /* %l1 */
# define MISC6_INDX 14 /* %l2 */
# define MISC7_INDX 15 /* %l3 */
# define MISC8_INDX 16 /* %l4 */
# define MISC9_INDX 17 /* %l5 */
# define MISC10_INDX 18 /* %l6 */
# define MISC11_INDX 19 /* %l7 */
# define MISC12_INDX 20 /* %i4 */
# define MISC13_INDX 21 /* %o3 */
# define MISC14_INDX 22 /* %o4 */
#elif defined (TARGET_X86)
# define NROOTS 26
# define N_ARG_REGS 23
# define N_PSEUDO_REGS 2
# define EXN_INDX 0 /* 8(esp) */
# define ARG_INDX 1 /* ebp */
# define CONT_INDX 2 /* esi */
# define CLOSURE_INDX 3 /* 16(esp) */
# define VAR_INDX 4 /* 28(esp) */
# define LINK_INDX 5 /* 20(esp) */
# define PC_INDX 6 /* eip */
# define MISC0_INDX 7 /* ebx */
# define MISC1_INDX 8 /* ecx */
# define MISC2_INDX 9 /* edx */
/* MISCn, where n > 2, is a virtual register */
# define MISC3_INDX 10 /* 40(esp) */
# define MISC4_INDX 11 /* 44(esp) */
# define MISC5_INDX 12 /* 48(esp) */
# define MISC6_INDX 13 /* 52(esp) */
# define MISC7_INDX 14 /* 56(esp) */
# define MISC8_INDX 15 /* 60(esp) */
# define MISC9_INDX 16 /* 64(esp) */
# define MISC10_INDX 17 /* 68(esp) */
# define MISC11_INDX 18 /* 72(esp) */
# define MISC12_INDX 19 /* 76(esp) */
# define MISC13_INDX 20 /* 80(esp) */
# define MISC14_INDX 21 /* 84(esp) */
# define MISC15_INDX 22 /* 88(esp) */
# define MISC16_INDX 23 /* 92(esp) */
# define MISC17_INDX 24 /* 96(esp) */
# define MISC18_INDX 25 /* 100(esp) */
#elif defined (TARGET_BYTECODE)
# define NROOTS 18 /* GPR[0-14], PC, exnPtr, varPtr */
# define N_ARG_REGS 15 /* GPR[0-14] */
# define PC_INDX 15
# define EXN_INDX 16 /* exnPtr */
# define ARG_INDX 0 /* GPR[0] */
# define CONT_INDX 1 /* GPR[1] */
# define CLOSURE_INDX 2 /* GPR[2] */
# define LINK_INDX 3 /* GPR[3] */
# define VAR_INDX 17 /* varPtr */
#endif
#endif /* !_ML_ROOTS_ */
|