home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1994 November / macformat-018.iso / Utility Spectacular / Developer / macgambit-20-compiler-src-p1 / Runtime (.c & .h) / gambit.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-07-26  |  7.9 KB  |  272 lines  |  [TEXT/KAHL]

  1. #ifdef THINK_C
  2. #define mac
  3. #define __STDC__
  4. #undef MAX_NB_STATS
  5. #define MAX_NB_STATS 1024
  6. #undef MAX_NB_EVENTS
  7. #define MAX_NB_EVENTS 8
  8. #undef LOCAL_HEAP_LENGTH_IN_K
  9. #define LOCAL_HEAP_LENGTH_IN_K 4
  10. #undef ADDITIONAL_CONST_LENGTH_IN_K
  11. #define ADDITIONAL_CONST_LENGTH_IN_K 0
  12. #undef DEFAULT_STACK_LENGTH_IN_K
  13. #define DEFAULT_STACK_LENGTH_IN_K MIN_STACK_LENGTH_IN_K
  14. #define IEEE_FP64 short double
  15. #define IEEE_FP80 double
  16. #define OS_EVENT_SIZE 16
  17. #else
  18. #define IEEE_FP64 double
  19. #define IEEE_FP80 double
  20. #define OS_EVENT_SIZE 0
  21. #endif
  22.  
  23. #ifdef NULL
  24. #undef NULL
  25. #endif
  26.  
  27. #define NULL 0L
  28.  
  29. #define K 1024
  30. #define ceiling2(x) ((((long)(x)) + 1L) & -2L)
  31. #define ceiling8(x) ((((long)(x)) + 7L) & -8L)
  32.  
  33. #define INTR_FLAG          0
  34. #define LTQ_TAIL           1
  35. #define LTQ_HEAD           2
  36. #define DEQ_TAIL           3
  37. #define DEQ_HEAD           4
  38. #define Q_BOT              5
  39. #define Q_TOP              6
  40. #define STACK_LIM          7
  41. #define STACK_PTR          8
  42. #define STACK_BOT          9
  43. #define STACK_TOP          10
  44. #define HEAP_OLD           11
  45. #define HEAP_LIM           12
  46. #define HEAP_PTR           13
  47. #define HEAP_BOT           14
  48. #define HEAP_TOP           15
  49. #define HEAP_MID           16
  50. #define CLOSURE_LIM        17
  51. #define CLOSURE_PTR        18
  52. #define WORKQ_LOCKO        19
  53. #define WORKQ_LOCKV        20
  54. #define WORKQ_TAIL         21
  55. #define WORKQ_HEAD         22
  56. #define CURRENT_TASK       23
  57. #define PARENT_RET         24
  58. #define PARENT_FRAME       25
  59. #define CURRENT_DYN_ENV    26
  60. #define TEMP_TASK          27
  61. #define BOS_RET            28
  62. #define STEAL_SCAN         29
  63. #define STEAL_LOCKO        30
  64. #define STEAL_LOCKV        31
  65. #define RESPONSE           32
  66. #define THIEF              33
  67. #define INTR_OTHER         34
  68. #define INTR_BARRIER       35
  69. #define INTR_TIMER         36
  70. #define INTR_USER          37
  71. #define INTR_IO            38
  72. #define FLUSH_WRITES       39
  73. #define TEMP1              40
  74. #define TEMP2              41
  75. #define HEAP_MARGIN        42
  76. #define STACK_MARGIN       43
  77. #define HEAP_MAX_MARGIN    44
  78. #define STACK_MAX_MARGIN   45
  79. #define COUNT1             46
  80. #define COUNT2             47
  81. #define ELOG_BOT           59
  82. #define ELOG_TOP           60
  83. #define ELOG_PTR           61
  84. #define ID                 62
  85. #define NB_PROCESSORS      63
  86. #define PS                 64
  87.  
  88. #define SYMBOL_TABLE     0
  89. #define GLOBAL_VAR_COUNT 1
  90.  
  91. #define PAIR_SIZE       2
  92. #define PAIR_CAR        1
  93. #define PAIR_CDR        0
  94.  
  95. #define SYMBOL_SIZE     3
  96. #define SYMBOL_NAME     0
  97. #define SYMBOL_PLIST    1
  98. #define SYMBOL_GLOBAL   2
  99.  
  100. #define PH_SIZE         4
  101. #define PH_VALUE        0
  102. #define PH_QUEUE        1
  103. #define PH_DELAY        2
  104. #define PH_TASK         3
  105.  
  106. #define TASK_SIZE         9
  107. #define TASK_CONT_FRAME   0
  108. #define TASK_CONT_RET     1
  109. #define TASK_CONT_DYN_ENV 2
  110. #define TASK_LEGIT        3
  111. #define TASK_VALUE        4
  112. #define TASK_SYNC_PH      5
  113. #define TASK_STATUS       6
  114. #define TASK_LOCKO        7
  115. #define TASK_LOCKV        8
  116.  
  117. #define QUEUE_SIZE 2
  118. #define QUEUE_TAIL 0
  119. #define QUEUE_HEAD 1
  120.  
  121. #define SEMAPHORE_SIZE  3
  122. #define SEMAPHORE_TAIL  0
  123. #define SEMAPHORE_HEAD  1
  124. #define SEMAPHORE_COUNT 2
  125.  
  126. #define CACHE_LINE_LENGTH  16
  127.  
  128. #define PRIM_PROC_PREFIX   1
  129. #define USER_PROC_PREFIX   2
  130. #define PAIR_PREFIX        3
  131.  
  132. #define OFILE_VERSION_MAJOR 3
  133. #define OFILE_VERSION_MINOR 0
  134.  
  135. #define OBJECT                  0xfffe0007
  136. #define SYMBOL                  0xfffe8007
  137. #define PRIM_PROC               0xffff0007
  138.  
  139. #define PADDING_TAG             0x0000
  140. #define END_OF_CODE_TAG         0x8000
  141. #define M68020_TAG              0x8001
  142. #define M68881_TAG              0x8002
  143. #define STAT_TAG                0x8003
  144.  
  145. #define PROC_REF_TAG            0x9000
  146. #define GLOBAL_VAR_REF_TAG      0xa000
  147. #define GLOBAL_VAR_SET_TAG      0xb000
  148. #define GLOBAL_VAR_REF_JUMP_TAG 0xc000
  149. #define PRIM_REF_TAG            0xd000
  150.  
  151. #define INDEX_MASK              0x0fff
  152.  
  153. #define PREDEFINED_STATS { \
  154. "((profile 1 (###_kernel.gc 1)))", \
  155. "((touch 1 (non-placeholder 1)))", \
  156. "((touch 0 (non-placeholder -1) (determined-placeholder 1)))", \
  157. "((touch 0 (determined-placeholder -1) (undetermined-placeholder 1)))" }
  158.  
  159. #define STAT_GC                          0
  160. #define STAT_TOUCH_NON_PH                1
  161. #define STAT_TOUCH_DET_PH                2
  162. #define STAT_TOUCH_UNDET_PH              3
  163. #define FIRST_AUTO_STAT STAT_TOUCH_NON_PH
  164.  
  165. #define EVENTS { \
  166. "determine", \
  167. "working", \
  168. "task_switch", \
  169. "idle", \
  170. "interrupt", \
  171. "stealing", \
  172. "touch_undet", \
  173. "touch_legit", \
  174. "c_call" }
  175.  
  176. #define EVENT_DETERMINE     0
  177. #define EVENT_WORKING       1
  178. #define EVENT_TASK_SWITCH   2
  179. #define EVENT_IDLE          3
  180. #define EVENT_INTERRUPT     4
  181. #define EVENT_STEALING      5
  182. #define EVENT_TOUCH_UNDET   6
  183. #define EVENT_TOUCH_LEGIT   7
  184. #define EVENT_C_CALL        8
  185.  
  186. #define NB_TRAPS                  32
  187. #define NB_TRAMPOLINE_TRAPS       24
  188.  
  189. #define global_jump_trap          0
  190. #define TOUCH_trap                1
  191. #define non_proc_jump_trap        6
  192. #define rest_params_trap          7
  193. #define rest_params_closed_trap   8
  194. #define wrong_nb_arg1_trap        9
  195. #define wrong_nb_arg1_closed_trap 10
  196. #define wrong_nb_arg2_trap        11
  197. #define wrong_nb_arg2_closed_trap 12
  198. #define heap_alloc1_trap          13
  199. #define heap_alloc2_trap          14
  200. #define closure_alloc_trap        15
  201. #define delay_future_trap         16
  202. #define eager_future_trap         17
  203. #define steal_conflict_trap       18
  204. #define C_TRAP_trap               22
  205. #define C_CALL_trap               23
  206. #define intr_trap                 24
  207.  
  208. #define SCM_obj              long
  209.  
  210. #define SCM_int_to_obj(n)    ((n) * 8L)
  211. #define SCM_obj_to_int(obj)  ((obj) >> 3)
  212. #define SCM_str_to_obj(s)    ((SCM_obj)((s) - 1L))
  213. #define SCM_obj_to_str(obj)  ((char *)((obj) + 1L))
  214. #define SCM_vect_to_obj(v)   ((SCM_obj)(((long)(v)) - 1L))
  215. #define SCM_obj_to_vect(obj) ((SCM_obj *)((obj) + 1L))
  216. #define SCM_header(obj)      (*((long *)((obj) & ~7L)))
  217. #define SCM_length(obj)      (SCM_header(obj) >> 8)
  218. #define SCM_subtype(obj)     ((SCM_header(obj) & 0xFFL) >> 3)
  219. #define SCM_encode(d,t)      (((d) * 8L) + (t))
  220.  
  221. #define SCM_type(obj)                   ((obj) & 7L)
  222. #define SCM_add_type(obj, type)         (((long)(obj)) + type)
  223. #define SCM_align(obj)                  ((((long)(obj)) + 7L) & ~7L)
  224. #define SCM_make_header(length,subtype) (((length) * 256L) + ((subtype) * 8L))
  225. #define SCM_header_subtype(header)      ((header & 0xFFL) >> 3)
  226. #define SCM_header_length(header)       (header >> 8)
  227. #define SCM_header_slots(header)        (header >> 10)
  228. #define SCM_header_procedure(header)    (header < 0)
  229. #define SCM_header_closure(header)      ((header & 0xFFFFL) == JSR_OP)
  230. #define SCM_procedure_length(header)    ((header >> 16) + 0x8000)
  231. #define SCM_closure_slots(header)       ((header >> 18) + 0x2000)
  232. #define SCM_object_adr(obj)             ((SCM_obj *)((obj) & ~7L))
  233. #define SCM_copied_no_header(slot0)     ((slot0) == (long)SCM_BH)
  234. #define SCM_copied_header(slot0)        ((slot0) & 7L)
  235. #define SCM_subtype_is_ovector(subtype) (((subtype) >= (long)SCM_subtype_ovector_min) &&\
  236.                                         ((subtype) <= (long)SCM_subtype_ovector_max))
  237.  
  238. #define SCM_type_FIXNUM           0
  239. #define SCM_type_SPECIAL       7
  240. #define SCM_type_PAIR           4
  241. #define SCM_type_WEAK_PAIR     1
  242. #define SCM_type_PLACEHOLDER   5
  243. #define SCM_type_SUBTYPED      3
  244. #define SCM_type_PROCEDURE     2
  245.  
  246. #define SCM_subtype_VECTOR     0
  247. #define SCM_subtype_SYMBOL     1
  248. #define SCM_subtype_PORT       2
  249. #define SCM_subtype_RATNUM     3
  250. #define SCM_subtype_CPXNUM     4
  251. #define SCM_subtype_FRAME      5
  252. #define SCM_subtype_TASK       6
  253. #define SCM_subtype_QUEUE      7
  254. #define SCM_subtype_SEMAPHORE  8
  255. #define SCM_subtype_STRING     16
  256. #define SCM_subtype_BIGNUM     17
  257. #define SCM_subtype_FLONUM     18
  258. #define SCM_subtype_WEAK_PAIR  31
  259.  
  260. #define SCM_subtype_ovector_min 0
  261. #define SCM_subtype_ovector_max 15
  262.  
  263. #define SCM_marker  -0x1
  264. #define SCM_false   -0x10101011
  265. #define SCM_null    -0x20202021
  266. #define SCM_true    -0x09
  267. #define SCM_undef   -0x11
  268. #define SCM_unass   -0x19
  269. #define SCM_unbound -0x21
  270. #define SCM_eof     -0x29
  271. #define SCM_BH      -0x31
  272.