source: trunk/ccl/lisp-kernel/constants64.s @ 557

Last change on this file since 557 was 557, checked in by gb, 16 years ago

PPC64 changes (some of them rather suspect ...). 32-bit kernel may be a
little funky ...

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 19.0 KB
Line 
1/*
2   Copyright (C) 1994-2001 Digitool, Inc
3   This file is part of OpenMCL. 
4
5   OpenMCL is licensed under the terms of the Lisp Lesser GNU Public
6   License , known as the LLGPL and distributed with OpenMCL as the
7   file "LICENSE".  The LLGPL consists of a preamble and the LGPL,
8   which is distributed with OpenMCL as the file "LGPL".  Where these
9   conflict, the preamble takes precedence. 
10
11   OpenMCL is referenced in the preamble as the "LIBRARY."
12
13   The LLGPL is also available online at
14   http://opensource.franz.com/preamble.html
15*/
16
17
18nbits_in_word = 64
19nbits_in_byte = 8
20ntagbits = 4
21nlisptagbits = 3
22nfixnumtagbits = 3
23num_subtag_bits = 8
24fixnumshift = 3
25fixnum_shift = 3
26fulltagmask = 15
27tagmask = 7
28fixnummask = 7
29ncharcodebits = 16
30charcode_shift = nbits_in_word-ncharcodebits
31word_shift = 3
32node_size = 8
33dnode_size = 16
34dnode_align_bits = 4
35
36fixnumone = (1<<fixnumshift)
37fixnum_one = fixnumone
38fixnum1 = fixnumone
39
40
41
42tag_fixnum = 0
43
44fulltag_even_fixnum = 0
45fulltag_imm_0 = 1
46fulltag_immheader_0 = 2
47fulltag_nodeheader_0 = 3
48fulltag_cons = 4
49fulltag_imm_1 = 5
50fulltag_immheader_1 = 6
51fulltag_nodeheader_1 = 7
52fulltag_odd_fixnum = 8
53fulltag_imm_2 = 9
54fulltag_immheader_2 = 10
55fulltag_nodeheader_2 = 11
56fulltag_misc = 12
57fulltag_imm_3 = 13
58fulltag_immheader_3 = 14
59fulltag_nodeheader_3 = 15
60
61define([define_subtag],[
62subtag_$1 = ($2 | ($3 << ntagbits))
63])
64                       
65cl_array_subtag_mask = 0x80
66define([define_cl_array_subtag],[
67define_subtag($1,(cl_array_subtag_mask|$2),$3)
68])
69
70define_cl_array_subtag(arrayH,fulltag_nodeheader_1,0)
71define_cl_array_subtag(vectorH,fulltag_nodeheader_2,0)
72define_cl_array_subtag(simple_vector,fulltag_nodeheader_3,0)
73min_vector_subtag = subtag_vectorH     
74       
75ivector_class_64_bit = fulltag_immheader_3
76ivector_class_32_bit = fulltag_immheader_2
77ivector_class_other_bit = fulltag_immheader_1
78ivector_class_8_bit = fulltag_immheader_0
79
80define_cl_array_subtag(s64_vector,ivector_class_64_bit,1)
81define_cl_array_subtag(u64_vector,ivector_class_64_bit,2)
82define_cl_array_subtag(double_float_vector,ivector_class_64_bit,4)
83define_cl_array_subtag(s32_vector,ivector_class_32_bit,1)
84define_cl_array_subtag(u32_vector,ivector_class_32_bit,2)
85define_cl_array_subtag(single_float_vector,ivector_class_32_bit,3)
86define_cl_array_subtag(s16_vector,ivector_class_other_bit,1)
87define_cl_array_subtag(u16_vector,ivector_class_other_bit,2)
88define_cl_array_subtag(bit_vector,ivector_class_other_bit,7)
89define_cl_array_subtag(s8_vector,ivector_class_8_bit,1)
90define_cl_array_subtag(u8_vector,ivector_class_8_bit,2)
91define_cl_array_subtag(simple_base_string,ivector_class_8_bit,5)
92
93/* There's some room for expansion in non-array ivector space. */
94define_subtag(bignum,ivector_class_64_bit,0)
95define_subtag(double_float,ivector_class_64_bit,3)
96define_subtag(macptr,ivector_class_64_bit,5)
97define_subtag(dead_macptr,ivector_class_64_bit,6)
98define_subtag(code_vector,ivector_class_32_bit,0)
99define_subtag(xcode_vector,ivector_class_32_bit,1)
100
101
102
103       
104/*       
105 Size doesn't matter for non-CL-array gvectors; I can't think of a good
106 reason to classify them in any particular way.  Let's put funcallable
107 things in the first slice by themselves, though it's not clear that
108 that helps FUNCALL much.
109*/       
110gvector_funcallable = fulltag_nodeheader_0
111       
112define_subtag(function,gvector_funcallable,0)
113define_subtag(symbol,gvector_funcallable,1)
114define_subtag(catch_frame,fulltag_nodeheader_1,0)
115define_subtag(lisp_thread,fulltag_nodeheader_1,1)
116define_subtag(lock,fulltag_nodeheader_1,2)
117define_subtag(hash_vector,fulltag_nodeheader_1,3)
118define_subtag(pool,fulltag_nodeheader_1,4)
119define_subtag(weak,fulltag_nodeheader_1,5)
120define_subtag(package,fulltag_nodeheader_1,6)
121define_subtag(svar,fulltag_nodeheader_1,7)
122define_subtag(slot_vector,0,fulltag_nodeheader_2)
123define_subtag(instance,1,fulltag_nodeheader_2)
124define_subtag(struct,2,fulltag_nodeheader_2)
125define_subtag(istruct,3,fulltag_nodeheader_2)
126define_subtag(value_cell,4,fulltag_nodeheader_2)
127define_subtag(xfunction,5,fulltag_nodeheader_2)
128                       
129nil_value = (0x2000+fulltag_misc+symbol.size)
130t_value = (0x2000+fulltag_misc)
131misc_bias = fulltag_misc
132cons_bias = fulltag_cons
133
134       
135misc_header_offset = -fulltag_misc
136misc_subtag_offset = misc_header_offset+7       /* low byte of header */
137misc_data_offset = misc_header_offset+4         /* first word of data */
138misc_dfloat_offset = misc_header_offset         /* double-floats are doubleword-aligned */
139
140define_subtag(single_float,fulltag_imm_0,0)
141
142define_subtag(go_tag,fulltag_imm_1,0)
143define_subtag(block_tag,fulltag_imm_1,1)
144
145define_subtag(character,fulltag_imm_2,0)
146                       
147define_subtag(unbound,fulltag_imm_3,0)
148unbound_marker = subtag_unbound
149undefined = unbound_marker
150define_subtag(slot_unbound,fulltag_imm_3,1)
151slot_unbound_marker = subtag_slot_unbound
152define_subtag(illegal,fulltag_imm_3,2)
153illegal_marker = subtag_illegal
154define_subtag(no_thread_local_binding,fulltag_imm_3,3)
155no_thread_local_binding_marker = subtag_no_thread_local_binding       
156
157       
158max_64_bit_constant_index = ((0x7fff + misc_dfloat_offset)>>3)
159max_32_bit_constant_index = ((0x7fff + misc_data_offset)>>2)
160max_16_bit_constant_index = ((0x7fff + misc_data_offset)>>1)
161max_8_bit_constant_index = (0x7fff + misc_data_offset)
162max_1_bit_constant_index = ((0x7fff + misc_data_offset)<<5)
163
164
165       
166/* The objects themselves look something like this: */
167       
168/* Order of CAR and CDR doesn]t seem to matter much - there aren't */
169/* too many tricks to be played with predecrement/preincrement addressing. */
170/* Keep them in the confusing MCL 3.0 order, to avoid confusion. */
171        _struct(cons,-cons_bias)
172         _node(cdr)
173         _node(car)
174        _ends
175       
176        _structf(ratio)
177         _node(numer)
178         _node(denom)
179        _endstructf
180       
181        _structf(double_float)
182         _word(pad)
183         _dword(value)
184        _endstructf
185       
186        _structf(macptr)
187         _node(address)
188         _node(domain)
189         _node(type)
190        _endstructf
191       
192/* Functions are of (conceptually) unlimited size. */
193        _struct(_function,-misc_bias)
194         _node(header)
195         _node(codevector)
196        _ends
197
198        _struct(tsp_frame,0)
199         _node(backlink)
200         _node(type)
201         _struct_label(fixed_overhead)
202         _struct_label(data_offset)
203        _ends
204
205
206
207        _structf(symbol)
208         _node(pname)
209         _node(vcell)
210         _node(fcell)
211         _node(package_plist)
212         _node(flags)
213        _endstructf
214
215        _structf(catch_frame)
216         _node(catch_tag)       /* #<unbound> -> unwind-protect, else catch */
217         _node(link)            /* backpointer to previous catch frame */
218         _node(mvflag)          /* 0 if single-valued catch, fixnum 1 otherwise */
219         _node(csp)             /* pointer to lisp_frame on csp */
220         _node(db_link)         /* head of special-binding chain */
221         _field(regs,8*node_size)       /* save7-save0 */
222         _node(xframe)          /* exception frame chain */
223         _node(tsp_segment)     /* maybe someday; padding for now */
224        _endstructf
225
226
227        _structf(vectorH)
228         _node(logsize)
229         _node(physsize)
230         _node(data_vector)
231         _node(displacement)
232         _node(flags)
233        _endstructf     
234       
235        _structf(svar)          /* shallow-bound special-variable info */
236         _node(symbol)
237         _node(idx)
238        _endstructf
239       
240        _struct(c_frame,0)      /* PowerOpen ABI C stack frame */
241         _node(backlink)
242         _node(crsave)
243         _node(savelr)
244         _field(unused, 8)
245         _node(savetoc)
246         _struct_label(params)
247         _node(param0)
248         _node(param1)
249         _node(param2)
250         _node(param3)
251         _node(param4)
252         _node(param5)
253         _node(param6)
254         _node(param7)
255         _struct_label(minsiz)
256        _ends
257
258
259        _struct(eabi_c_frame,0)
260         _word(backlink) 
261         _word(savelr)
262         _word(param0)
263         _word(param1)
264         _word(param2)
265         _word(param3)
266         _word(param4)
267         _word(param5)
268         _word(param6)
269         _word(param7)
270         _struct_label(minsiz)
271        _ends
272
273        /* For entry to variable-argument-list functions
274          (e.g., via callback) */
275        _struct(varargs_eabi_c_frame,0)
276         _word(backlink)
277         _word(savelr)
278         _struct_label(va_list)
279         _word(flags)           /* gpr count byte, fpr count byte, padding */
280         _word(overflow_arg_area)
281         _word(reg_save_area)
282         _field(padding,4)
283         _struct_label(regsave)
284         _field(gp_save,8*4)
285         _field(fp_save,8*8)
286         _word(old_backlink)
287         _word(old_savelr)
288         _struct_label(incoming_stack_args)
289        _ends
290               
291        _struct(lisp_frame,0)
292         _node(backlink) 
293         _node(savefn) 
294         _node(savelr) 
295         _node(savevsp) 
296        _ends
297
298        _struct(vector,-fulltag_misc)
299         _node(header)
300         _struct_label(data)
301        _ends
302
303        _struct(binding,0)
304         _node(link)
305         _node(sym)
306         _node(val)
307        _ends
308
309
310/* Nilreg-relative globals.  Talking the assembler into doing something reasonable here */
311/* is surprisingly hard. */
312
313symbol_extra = symbol.size-fulltag_misc
314num_lisp_globals = 48            /* MUST UPDATE THIS !!! */
315       
316        _struct(lisp_globals,0x1000)
317         _struct_pad((512-num_lisp_globals)*node_size)
318         _node(initial_tcr)             /* initial thread tcr */
319         _node(image_name)              /* --image-name argument */
320         _node(BADfpscr_save_high)              /* high word of FP reg used to save FPSCR */
321         _node(BADfpscr_save)              /* saved FPSCR */
322         _node(batch_flag)              /* -b */
323         _node(host_platform)           /* for runtime platform-specific stuff */
324         _node(argv)                    /* address of argv[0] */
325         _node(errno)                   /* ADDRESS of errno */
326         _node(tenured_area)            /* the tenured_area */
327         _node(oldest_ephemeral)        /* dword address of oldest ephemeral object or 0 */
328         _node(lisp_exit_hook)          /* install foreign exception_handling */
329         _node(lisp_return_hook)        /* install lisp exception_handling */
330         _node(double_float_one)        /* high half of 1.0d0 */
331         _node(short_float_zero)        /* low half of 1.0d0 */
332         _node(doh_head)                /* creole objects header */
333         _node(metering_info)           /* address of lisp_metering global */
334         _node(in_gc)                   /* non-zero when GC active */
335         _node(lexpr_return1v)          /* simpler when &lexpr called for single value. */
336         _node(lexpr_return)            /* magic &lexpr return code. */
337         _node(all_areas)               /* doubly-linked list of all memory areas */
338         _node(BAD_cs_overflow_limit)   /* limit for control-stack overflow check */
339         _node(BAD_current_ts)          /* current temp-stack area */
340         _node(BAD_current_vs)          /* current value-stack area */
341         _node(statically_linked)       /* non-zero if -static */
342         _node(heap_end)                /* end of lisp heap */
343         _node(heap_start)              /* start of lisp heap */
344         _node(gcable_pointers)         /* linked-list of weak macptrs. */
345         _node(gc_num)                  /* fixnum: GC call count. */
346         _node(fwdnum)                  /* fixnum: GC "forwarder" call count. */
347         _node(altivec_present)         /* non-zero when AltiVec available */
348         _node(tb_trap_call)            /* CallUniversalProc]s descriptor */
349         _node(os_trap_call)            /* CallOSTrapUnivesalProc]s descriptor */
350         _node(gc_inhibit_count)
351         _node(intflag)                 /* sigint pending */
352         _node(block_tag_counter)       /* counter for (immediate) block tag */
353         _node(go_tag_counter)          /* counter for (immediate) go tag */
354         _node(exception_lock)
355         _node(BADgc_lock)
356         _node(tcr_key)                 /* tsd key for per-thread tcr */
357         _node(ret1val_addr)            /* address of "dynamic" subprims magic values return addr */
358         _node(subprims_base)           /* address of dynamic subprims jump table */
359         _node(appmain)                 /* probably don]t really need this */
360         _node(emulator_registers)      /* where the 68K emulator stores the  emulated regs */
361         _node(tcr_lock)                /* this thread]s exception frame chain */
362         _node(kernel_imports)          /* some things we need imported for us */
363         _node(interrupt_signal)        /* signal used by PROCESS-INTERRUPT */
364         _node(tcr_count)               /* tcr_id for next tcr */
365         _node(get_tcr)                 /* address of get_tcr() */     
366        _ends
367       
368lisp_globals.saveTOC = lisp_globals.emulator_registers
369lisp_globals.saveR13 = lisp_globals.appmain
370
371       
372        _struct(nrs,0x2000)
373         _struct_pad(fulltag_misc)
374         _struct_label(tsym)
375         _struct_pad(symbol_extra)      /* t  */
376
377         _struct_pad(fulltag_misc)
378         _struct_label(nil)
379         _struct_pad(symbol_extra)      /* nil  */
380
381         _struct_pad(fulltag_misc)
382         _struct_label(errdisp)
383         _struct_pad(symbol_extra)      /* %err-disp  */
384
385         _struct_pad(fulltag_misc)
386         _struct_label(cmain)
387         _struct_pad(symbol_extra)      /* cmain  */
388
389         _struct_pad(fulltag_misc)
390         _struct_label(eval)
391         _struct_pad(symbol_extra)      /* eval  */
392 
393         _struct_pad(fulltag_misc)
394         _struct_label(appevalfn)
395         _struct_pad(symbol_extra)      /* apply-evaluated-function  */
396
397         _struct_pad(fulltag_misc)
398         _struct_label(error)
399         _struct_pad(symbol_extra)      /* error  */
400
401         _struct_pad(fulltag_misc)
402         _struct_label(defun)
403         _struct_pad(symbol_extra)      /* %defun  */
404
405         _struct_pad(fulltag_misc)
406         _struct_label(defvar)
407         _struct_pad(symbol_extra)      /* %defvar  */
408
409         _struct_pad(fulltag_misc)
410         _struct_label(defconstant)
411         _struct_pad(symbol_extra)      /* %defconstant  */
412
413         _struct_pad(fulltag_misc)
414         _struct_label(macrosym)
415         _struct_pad(symbol_extra)      /* %macro  */
416
417         _struct_pad(fulltag_misc)
418         _struct_label(kernelrestart)
419         _struct_pad(symbol_extra)      /* %kernel-restart  */
420
421         _struct_pad(fulltag_misc)
422         _struct_label(package)
423         _struct_pad(symbol_extra)      /* *package*  */
424
425         _struct_pad(fulltag_misc)
426         _struct_label(total_bytes_freed)               /* *total-bytes-freed* */
427         _struct_pad(symbol_extra)
428
429         _struct_pad(fulltag_misc)
430         _struct_label(kallowotherkeys)
431         _struct_pad(symbol_extra)      /* allow-other-keys  */
432
433         _struct_pad(fulltag_misc)
434         _struct_label(toplcatch)
435         _struct_pad(symbol_extra)      /* %toplevel-catch%  */
436
437         _struct_pad(fulltag_misc)
438         _struct_label(toplfunc)
439         _struct_pad(symbol_extra)      /* %toplevel-function%  */
440
441         _struct_pad(fulltag_misc)
442         _struct_label(callbacks)
443         _struct_pad(symbol_extra)      /* %pascal-functions%  */
444
445         _struct_pad(fulltag_misc)
446         _struct_label(allmeteredfuns)
447         _struct_pad(symbol_extra)      /* *all-metered-functions*  */
448
449         _struct_pad(fulltag_misc)
450         _struct_label(total_gc_microseconds)           /* *total-gc-microseconds* */
451         _struct_pad(symbol_extra)
452
453         _struct_pad(fulltag_misc)
454         _struct_label(builtin_functions)               /* %builtin-functions% */
455         _struct_pad(symbol_extra)               
456
457         _struct_pad(fulltag_misc)
458         _struct_label(udf)
459         _struct_pad(symbol_extra)      /* %unbound-function%  */
460
461         _struct_pad(fulltag_misc)
462         _struct_label(init_misc)
463         _struct_pad(symbol_extra)      /* %init-misc */
464
465         _struct_pad(fulltag_misc)
466         _struct_label(macro_code)
467         _struct_pad(symbol_extra)      /* %macro-code% */
468
469         _struct_pad(fulltag_misc)
470         _struct_label(closure_code)
471         _struct_pad(symbol_extra)      /* %closure-code% */
472
473         _struct_pad(fulltag_misc)
474         _struct_label(new_gcable_ptr) /* %new-gcable-ptr */
475         _struct_pad(symbol_extra)
476       
477         _struct_pad(fulltag_misc)
478         _struct_label(gc_event_status_bits)
479         _struct_pad(symbol_extra)      /* *gc-event-status-bits*  */
480
481         _struct_pad(fulltag_misc)
482         _struct_label(post_gc_hook)
483         _struct_pad(symbol_extra)      /* *post-gc-hook*  */
484
485         _struct_pad(fulltag_misc)
486         _struct_label(handlers)
487         _struct_pad(symbol_extra)      /* %handlers%  */
488
489
490         _struct_pad(fulltag_misc)
491         _struct_label(all_packages)
492         _struct_pad(symbol_extra)      /* %all-packages%  */
493
494         _struct_pad(fulltag_misc)
495         _struct_label(keyword_package)
496         _struct_pad(symbol_extra)      /* *keyword-package*  */
497
498         _struct_pad(fulltag_misc)
499         _struct_label(finalization_alist)
500         _struct_pad(symbol_extra)      /* %finalization-alist%  */
501
502         _struct_pad(fulltag_misc)
503         _struct_label(foreign_thread_control)
504         _struct_pad(symbol_extra)      /* %foreign-thread-control  */
505
506        _ends
507
508define([def_header],[
509$1 = ($2<<num_subtag_bits)|$3])
510
511        def_header(double_float_header,double_float.element_count,subtag_double_float)
512        def_header(one_digit_bignum_header,1,subtag_bignum)
513        def_header(two_digit_bignum_header,2,subtag_bignum)
514        def_header(three_digit_bignum_header,3,subtag_bignum)
515        def_header(symbol_header,symbol.element_count,subtag_symbol)
516        def_header(value_cell_header,1,subtag_value_cell        )
517        def_header(macptr_header,macptr.element_count,subtag_macptr)
518        def_header(vectorH_header,vectorH.element_count,subtag_vectorH)
519
520        include(errors.s)
521
522/* Symbol bits that we care about */
523sym_vbit_bound = (0+fixnum_shift)
524sym_vbit_bound_mask = (1<<sym_vbit_bound)
525sym_vbit_const = (1+fixnum_shift)
526sym_vbit_const_mask = (1<<sym_vbit_const)
527
528        _struct(area,0)
529         _node(pred)
530         _node(succ)
531         _node(low)
532         _node(high)
533         _node(active)
534         _node(softlimit)
535         _node(hardlimit)
536         _node(code)
537         _node(markbits)
538         _node(ndwords)
539         _node(older)
540         _node(younger)
541         _node(h)
542         _node(sofprot)
543         _node(hardprot)
544         _node(owner)
545         _node(refbits)
546         _node(nextref)
547        _ends
548
549
550/* This is only referenced by c->lisp code that needs to save/restore C NVRs in a TSP frame. */
551        _struct(c_reg_save,0)
552         _node(tsp_link)        /* backpointer */
553         _node(tsp_mark)        /* frame type */
554         _node(save_fpscr)      /* for Cs FPSCR */
555         _field(save_gprs,19*4) /* r13-r31 */
556         _dword(save_fp_zero)   /* for fp_zero */
557         _dword(save_fps32conv)
558        _ends
559
560/* Indices in %builtin-functions% */
561_builtin_plus = 0       /* +-2 */
562_builtin_minus = 1      /* --2 */
563_builtin_times = 2      /* *-2 */
564_builtin_div = 3        /* /-2 */
565_builtin_eq = 4         /* =-2 */
566_builtin_ne = 5         /* /-2 */
567_builtin_gt = 6         /* >-2 */
568_builtin_ge = 7         /* >=-2 */
569_builtin_lt = 8         /* <-2 */
570_builtin_le = 9         /* <=-2 */
571_builtin_eql = 10       /* eql */
572_builtin_length = 11    /* length */
573_builtin_seqtype = 12   /* sequence-type */
574_builtin_assq = 13      /* assq */
575_builtin_memq = 14      /* memq */
576_builtin_logbitp = 15   /* logbitp */
577_builtin_logior = 16    /* logior-2 */
578_builtin_logand = 17    /* logand-2 */
579_builtin_ash = 18       /* ash */
580_builtin_negate = 19    /* %negate */
581_builtin_logxor = 20    /* logxor-2 */
582_builtin_aref1 = 21     /* %aref1 */
583_builtin_aset1 = 22     /* %aset1 */
584
585        /* FPSCR status bits */
586fpscr_FX = 0
587fpscr_FEX = 1
588fpscr_VX = 2
589fpscr_OX = 3
590fpscr_UX = 4
591fpscr_ZX = 5
592fpscr_XX = 6
593        /* FPSCR control bits */
594fpscr_VE = 24
595fpscr_OE = 25
596fpscr_UE = 26
597fpscr_ZE = 27
598fpscr_XE = 28
599       
600
601/*
602  This should be (a) an (UNSIGNED-BYTE 16) and (b) one less than
603  TSTACK_SOFTPROT (defined in "area.h")
604*/             
605tstack_alloc_limit = 0xffff
606
607/*
608  Thread context record.
609*/
610        _struct(tcr,0)
611         _node(prev)            /* in doubly-linked list */
612         _node(next)            /* in doubly-linked list */
613         _node(lisp_fpscr)      /* lisp thread's fpscr (in low word) */
614         _node(lisp_fpscr_low)
615         _node(db_link)         /* special binding chain head */
616         _node(catch_top)       /* top catch frame */
617         _node(save_vsp)        /* VSP when in foreign code */
618         _node(save_tsp)        /* TSP when in foreign code */
619         _node(cs_area)         /* cstack area pointer */
620         _node(vs_area)         /* vstack area pointer */
621         _node(ts_area)         /* tstack area pointer */
622         _node(cs_limit)        /* cstack overflow limit */
623         _node(bytes_consed_high)
624         _node(bytes_consed_low)
625         _node(interrupt_level)
626         _node(interrupt_pending)
627         _node(xframe)          /* per-thread exception frame list */
628         _node(errno_loc)       /* per-thread  errno location */
629         _node(ffi_exception)   /* fpscr exception bits from ff-call */
630         _node(osid)            /* OS thread id */
631         _node(valence)         /* odd when in foreign code */ 
632         _node(foreign_exception_status)
633         _node(native_thread_info)
634         _node(native_thread_id)
635         _node(last_allocptr)
636         _node(save_allocptr)
637         _node(save_allocbase)
638         _node(reset_completion)
639         _node(activate)
640         _node(suspend_count)
641         _node(suspend_context)
642         _node(pending_exception_context)
643         _node(suspend)         /* semaphore for suspension notify */
644         _node(resume)          /* sempahore for resumption notify */
645         _node(flags)     
646         _node(gc_context)
647         _node(suspend_total)
648         _node(suspend_total_on_exception_entry)
649         _node(tlb_limit)
650         _node(tlb_pointer)     /* Consider using tcr+N as tlb_pointer */
651         _node(shutdown_count)
652        _ends
653
654TCR_FLAG_BIT_FOREIGN = fixnum_shift
655TCR_FLAG_BIT_AWAITING_PRESET = (fixnum_shift+1) 
656
657nil_value = 0x2000+symbol.size+fulltag_misc
658       
659define([RESERVATION_DISCHARGE],0x1008)
Note: See TracBrowser for help on using the repository browser.