source: trunk/source/lisp-kernel/x86-constants32.s @ 10250

Last change on this file since 10250 was 10250, checked in by rme, 11 years ago

Update nil_value, t_value, lisp_globals_limit, nrs.

Add save_eflags slot to TCR.

Add TCR_FLAG_BIT_PENDING_SUSPEND.

File size: 15.5 KB
Line 
1define([eax_l],[eax])
2define([ecx_l],[ecx])
3define([edx_l],[edx])
4define([ebx_l],[ebx])
5define([esi_l],[esi])
6define([edi_l],[edi])
7
8define([eax_b],[al])
9define([ecx_b],[cl])
10define([edx_b],[dl])
11define([ebx_b],[bl])
12
13define([imm0],[eax])
14        define([imm0_l],[eax])
15        define([imm0_w],[ax])
16        define([imm0_b],[al])
17        define([imm0_bh],[ah])
18        define([Rimm0],[0])
19
20define([temp0],[ecx])
21        define([temp0_l],[ecx])
22        define([temp0_w],[cx])
23        define([temp0_b],[cl])
24        define([temp0_bh],[ch])
25        define([Rtemp0],[1])
26
27define([temp1],[edx])
28        define([temp1_l],[edx])
29        define([temp1_w],[dx])
30        define([temp1_b],[dl])
31        define([temp1_bh],[dh])
32        define([Rtemp1],[2])
33
34define([arg_z],[ebx])
35        define([arg_z_l],[ebx])
36        define([arg_z_w],[bx])
37        define([arg_z_b],[bl])
38        define([arg_z_bh],[bh])
39        define([Rarg_z],[3])
40
41define([arg_y],[esi])
42        define([Rarg_y],[6])
43
44define([fn],[edi])
45        define([Rfn],[7])
46
47define([rcontext_reg],[fs])
48define([rcontext],[%rcontext_reg:$1])
49
50define([fname],[temp0])
51define([allocptr],[temp0])
52
53define([nargs],[temp1])
54define([nargs_w],[temp1_w])
55
56define([ra0],[temp0])
57define([xfn],[temp1])
58
59define([allocptr],[temp0])
60define([stack_temp],[mm7])
61
62define([fp0],[xmm0])           
63define([fp1],[xmm1])           
64define([fp2],[xmm2])           
65define([fp3],[xmm3])           
66define([fp4],[xmm4])           
67define([fp5],[xmm5])           
68define([fp6],[xmm6])           
69define([fp7],[xmm7])           
70define([fpzero],[fp7])
71
72nbits_in_word = 32
73nbits_in_byte = 8
74ntagbits = 3
75nlisptagbits = 2
76nfixnumtagbits = 2
77num_subtag_bits = 8
78subtag_shift = num_subtag_bits
79fixnumshift = 2
80fixnum_shift = 2
81fulltagmask = 7
82tagmask = 3
83fixnummask = 3
84ncharcodebits = 8
85charcode_shift = 8
86word_shift = 2
87node_size = 4
88dnode_size = 8
89dnode_align_bits = 3
90dnode_shift = dnode_align_bits       
91bitmap_shift = 5
92
93fixnumone = (1<<fixnumshift)
94fixnum_one = fixnumone
95fixnum1 = fixnumone
96
97nargregs = 2
98
99tag_fixnum = 0
100tag_list = 1
101tag_misc = 2
102tag_imm = 3
103
104fulltag_even_fixnum = 0
105fulltag_cons = 1
106fulltag_nodeheader = 2
107fulltag_imm = 3
108fulltag_odd_fixnum = 4
109fulltag_tra = 5
110fulltag_misc = 6
111fulltag_immheader = 7
112
113define([define_subtag],[subtag_$1 = ($2 | ($3 << ntagbits))])
114define([define_imm_subtag],[define_subtag($1,fulltag_immheader,$2)])
115define([define_node_subtag],[define_subtag($1,fulltag_nodeheader,$2)])
116
117define_imm_subtag(bignum,0)
118min_numeric_subtag = subtag_bignum
119define_node_subtag(ratio,1)
120max_rational_subtag = subtag_ratio
121define_imm_subtag(single_float,1)
122define_imm_subtag(double_float,2)
123min_float_subtag = subtag_single_float
124max_float_subtag = subtag_double_float
125max_real_subtag = subtag_double_float
126define_node_subtag(complex,3)
127max_numeric_subtag = subtag_complex
128
129define_imm_subtag(bit_vector,31)
130define_imm_subtag(double_float_vector,30)
131define_imm_subtag(s16_vector,29)
132define_imm_subtag(u16_vector,28)
133min_16_bit_ivector_subtag = subtag_u16_vector
134max_16_bit_ivector_subtag = subtag_s16_vector
135define_imm_subtag(s8_vector,26)
136define_imm_subtag(u8_vector,25)
137min_8_bit_ivector_subtag = subtag_u8_vector
138max_8_bit_ivector_subtag = fulltag_immheader|(27<<ntagbits)
139define_imm_subtag(simple_base_string,24)
140define_imm_subtag(fixnum_vector,23)
141define_imm_subtag(s32_vector,22)
142define_imm_subtag(u32_vector,21)
143define_imm_subtag(single_float_vector,20)
144max_32_bit_ivector_subtag = fulltag_immheader|(24<<ntagbits)
145min_cl_ivector_subtag = subtag_single_float_vector
146
147define_node_subtag(arrayH,19)
148define_node_subtag(vectorH,20)
149define_node_subtag(simple_vector,21)
150min_vector_subtag = subtag_vectorH
151min_array_subtag = subtag_arrayH
152
153define_imm_subtag(macptr,3)
154min_non_numeric_imm_subtag = subtag_macptr
155define_imm_subtag(dead_macptr,4)
156define_imm_subtag(xcode_vector,7)
157
158define_subtag(unbound,fulltag_imm,6)
159unbound_marker = subtag_unbound
160undefined = unbound_marker
161define_subtag(character,fulltag_imm,9)
162define_subtag(slot_unbound,fulltag_imm,10)
163slot_unbound_marker = subtag_slot_unbound
164define_subtag(illegal,fulltag_imm,11)
165illegal = subtag_illegal
166define_subtag(reserved_frame,fulltag_imm,29)
167reserved_frame_marker = subtag_reserved_frame
168define_subtag(no_thread_local_binding,fulltag_imm,30)
169no_thread_local_binding_marker = subtag_no_thread_local_binding
170define_subtag(function_boundary_marker,fulltag_imm,31)
171function_boundary_marker = subtag_function_boundary_marker
172
173max_non_array_imm_subtag = (18<<ntagbits)|fulltag_immheader
174
175define_node_subtag(catch_frame,4)
176define_node_subtag(function,5)
177define_node_subtag(basic_stream,6)
178define_node_subtag(symbol,7)
179define_node_subtag(lock,8)
180define_node_subtag(hash_vector,9)
181define_node_subtag(pool,10)
182define_node_subtag(weak,11)
183define_node_subtag(package,12)
184define_node_subtag(slot_vector,13)
185define_node_subtag(instance,14)
186define_node_subtag(struct,15)
187define_node_subtag(istruct,16)
188define_node_subtag(value_cell,17)
189define_node_subtag(xfunction,18)
190
191max_non_array_node_subtag = (18<<ntagbits)|fulltag_immheader
192
193misc_header_offset = -fulltag_misc
194misc_subtag_offset = misc_header_offset
195misc_data_offset = misc_header_offset+node_size
196misc_dfloat_offset = misc_header_offset+8
197
198nil_value = (0x13000 + fulltag_cons)
199t_value = (0x13008 + fulltag_misc)
200t_offset = (t_value-nil_value)
201misc_bias = fulltag_misc
202cons_bias = fulltag_cons
203
204        _struct(cons,-cons_bias)
205         _node(cdr)
206         _node(car)
207        _ends
208
209        _structf(ratio)
210         _node(numer)
211         _node(denom)
212        _endstructf
213
214        _structf(single_float)
215         _word(value)
216        _endstructf
217
218        _structf(double_float)
219         _word(pad)
220         _dword(value)
221        _endstructf
222
223        _structf(macptr)
224         _node(address)
225         _node(domain)
226         _node(type)
227        _endstructf
228
229        _structf(catch_frame)
230         _node(catch_tag)  /* #<unbound> -> unwind-protect, else catch */
231         _node(link)       /* backpointer to previous catch frame */
232         _node(mvflag)     /* 0 if single-valued catch, fixnum 1 otherwise */
233         _node(esp)        /* saved lisp esp */
234         _node(ebp)        /* saved lisp ebp */
235         _node(foreign_sp) /* necessary? */
236         _node(db_link)    /* head of special-binding chain */
237         _node(xframe)     /* exception frame chain */
238         _node(pc)         /* TRA of catch exit or cleanup form */
239        _endstructf
240
241        _struct(_function,-misc_bias)
242         _node(header)
243         _node(codevector)
244        _ends
245
246        _struct(tsp_frame,0)
247         _node(backlink)
248         _node(save_ebp)
249         _struct_label(fixed_overhead)
250         _struct_label(data_offset)
251        _ends
252
253        _structf(symbol)
254         _node(pname)
255         _node(vcell)
256         _node(fcell)
257         _node(package_predicate)
258         _node(flags)
259         _node(plist)
260         _node(binding_index)
261        _endstructf
262
263        _structf(vectorH)
264         _node(logsize)
265         _node(physsize)
266         _node(data_vector)
267         _node(displacement)
268         _node(flags)
269        _endstructf     
270
271        _structf(arrayH)
272         _node(rank)
273         _node(physsize)
274         _node(data_vector)
275         _node(displacement)
276         _node(flags)
277         _struct_label(dim0)       
278        _endstructf     
279
280        _struct(lisp_frame,0)
281         _node(backlink)
282         _node(savera0)
283        _ends
284
285        _struct(vector,-fulltag_misc)
286         _node(header)
287         _struct_label(data)
288        _ends
289
290        _struct(binding,0)
291         _node(link)
292         _node(sym)
293         _node(val)
294        _ends
295
296symbol_extra = symbol.size-fulltag_misc
297
298        _struct(nrs,0x13008)
299         _struct_pad(fulltag_misc)
300         _struct_label(tsym)
301         _struct_pad(symbol_extra)      /* t */
302
303         _struct_pad(fulltag_misc)
304         _struct_label(nilsym)
305         _struct_pad(symbol_extra)      /* nil */
306
307         _struct_pad(fulltag_misc)
308         _struct_label(errdisp)
309         _struct_pad(symbol_extra)      /* %err-disp */
310
311         _struct_pad(fulltag_misc)
312         _struct_label(cmain)
313         _struct_pad(symbol_extra)      /* cmain */
314
315         _struct_pad(fulltag_misc)
316         _struct_label(eval)
317         _struct_pad(symbol_extra)      /* eval */
318 
319         _struct_pad(fulltag_misc)
320         _struct_label(appevalfn)
321         _struct_pad(symbol_extra)      /* apply-evaluated-function */
322
323         _struct_pad(fulltag_misc)
324         _struct_label(error)
325         _struct_pad(symbol_extra)      /* error */
326
327         _struct_pad(fulltag_misc)
328         _struct_label(defun)
329         _struct_pad(symbol_extra)      /* %defun */
330
331         _struct_pad(fulltag_misc)
332         _struct_label(defvar)
333         _struct_pad(symbol_extra)      /* %defvar */
334
335         _struct_pad(fulltag_misc)
336         _struct_label(defconstant)
337         _struct_pad(symbol_extra)      /* %defconstant */
338
339         _struct_pad(fulltag_misc)
340         _struct_label(macrosym)
341         _struct_pad(symbol_extra)      /* %macro */
342
343         _struct_pad(fulltag_misc)
344         _struct_label(kernelrestart)
345         _struct_pad(symbol_extra)      /* %kernel-restart */
346
347         _struct_pad(fulltag_misc)
348         _struct_label(package)
349         _struct_pad(symbol_extra)      /* *package* */
350
351         _struct_pad(fulltag_misc)
352         _struct_label(total_bytes_freed)
353         _struct_pad(symbol_extra)      /* *total-bytes-freed* */
354
355         _struct_pad(fulltag_misc)
356         _struct_label(kallowotherkeys)
357         _struct_pad(symbol_extra)      /* allow-other-keys */
358
359         _struct_pad(fulltag_misc)
360         _struct_label(toplcatch)
361         _struct_pad(symbol_extra)      /* %toplevel-catch% */
362
363         _struct_pad(fulltag_misc)
364         _struct_label(toplfunc)
365         _struct_pad(symbol_extra)      /* %toplevel-function% */
366
367         _struct_pad(fulltag_misc)
368         _struct_label(callbacks)
369         _struct_pad(symbol_extra)      /* %pascal-functions% */
370
371         _struct_pad(fulltag_misc)
372         _struct_label(allmeteredfuns)
373         _struct_pad(symbol_extra)      /* *all-metered-functions* */
374
375         _struct_pad(fulltag_misc)
376         _struct_label(total_gc_microseconds)
377         _struct_pad(symbol_extra)      /* *total-gc-microseconds* */
378
379         _struct_pad(fulltag_misc)
380         _struct_label(builtin_functions)
381         _struct_pad(symbol_extra)      /* %builtin-functions% */
382       
383         _struct_pad(fulltag_misc)
384         _struct_label(udf)
385         _struct_pad(symbol_extra)      /* %unbound-function% */
386
387         _struct_pad(fulltag_misc)
388         _struct_label(init_misc)
389         _struct_pad(symbol_extra)      /* %init-misc */
390
391         _struct_pad(fulltag_misc)
392         _struct_label(macro_code)
393         _struct_pad(symbol_extra)      /* %macro-code% */
394
395         _struct_pad(fulltag_misc)
396         _struct_label(closure_code)
397         _struct_pad(symbol_extra)      /* %closure-code% */
398
399         _struct_pad(fulltag_misc)
400         _struct_label(new_gcable_ptr)
401         _struct_pad(symbol_extra)      /* %new-gcable-ptr */
402       
403         _struct_pad(fulltag_misc)
404         _struct_label(gc_event_status_bits)
405         _struct_pad(symbol_extra)      /* *gc-event-status-bits* */
406
407         _struct_pad(fulltag_misc)
408         _struct_label(post_gc_hook)
409         _struct_pad(symbol_extra)      /* *post-gc-hook* */
410
411         _struct_pad(fulltag_misc)
412         _struct_label(handlers)
413         _struct_pad(symbol_extra)      /* %handlers% */
414
415         _struct_pad(fulltag_misc)
416         _struct_label(all_packages)
417         _struct_pad(symbol_extra)      /* %all-packages% */
418
419         _struct_pad(fulltag_misc)
420         _struct_label(keyword_package)
421         _struct_pad(symbol_extra)      /* *keyword-package* */
422
423         _struct_pad(fulltag_misc)
424         _struct_label(finalization_alist)
425         _struct_pad(symbol_extra)      /* %finalization-alist% */
426
427         _struct_pad(fulltag_misc)
428         _struct_label(foreign_thread_control)
429         _struct_pad(symbol_extra)      /* %foreign-thread-control */
430
431        _ends
432
433define([def_header],[$1 = ($2<<num_subtag_bits)|$3])
434
435def_header(single_float_header,single_float.element_count,subtag_single_float)
436def_header(double_float_header,double_float.element_count,subtag_double_float)
437def_header(one_digit_bignum_header,1,subtag_bignum)
438def_header(two_digit_bignum_header,2,subtag_bignum)
439def_header(three_digit_bignum_header,3,subtag_bignum)
440def_header(symbol_header,symbol.element_count,subtag_symbol)
441def_header(value_cell_header,1,subtag_value_cell)
442def_header(macptr_header,macptr.element_count,subtag_macptr)
443def_header(vectorH_header,vectorH.element_count,subtag_vectorH)
444
445        include(errors.s)
446
447/* Symbol bits that we care about */
448sym_vbit_bound = (0+fixnum_shift)
449sym_vbit_bound_mask = (1<<sym_vbit_bound)
450sym_vbit_const = (1+fixnum_shift)
451sym_vbit_const_mask = (1<<sym_vbit_const)
452
453        _struct(area,0)
454         _node(pred) 
455         _node(succ) 
456         _node(low) 
457         _node(high) 
458         _node(active) 
459         _node(softlimit) 
460         _node(hardlimit) 
461         _node(code) 
462         _node(markbits) 
463         _node(ndwords) 
464         _node(older) 
465         _node(younger) 
466         _node(h) 
467         _node(sofprot) 
468         _node(hardprot) 
469         _node(owner) 
470         _node(refbits) 
471         _node(nextref) 
472        _ends
473
474TCR_BIAS = 0
475               
476/*  Thread context record.  */
477
478        _struct(tcr,TCR_BIAS)
479         _node(next)            /* in doubly-linked list */
480         _node(prev)            /* in doubly-linked list */
481         _word(node_regs_mask)
482         _node(linear)          /* our linear (non-segment-based) address. */
483         _node(save0)           /* spill area for node registers (16-byte aligned ) */
484         _node(save1)
485         _node(save2)
486         _node(save3)
487         _node(save_ebp)        /* lisp EBP when in foreign code */
488         _word(lisp_mxcsr)
489         _word(foreign_mxcsr)   
490         _node(db_link)         /* special binding chain head */
491         _node(catch_top)       /* top catch frame */
492         _node(save_vsp)        /* VSP when in foreign code */
493         _node(save_tsp)        /* TSP when in foreign code */
494         _node(foreign_sp)      /* Saved foreign SP when in lisp code */
495         _node(cs_area)         /* cstack area pointer */
496         _node(vs_area)         /* vstack area pointer */
497         _node(ts_area)         /* tstack area pointer */
498         _node(cs_limit)        /* cstack overflow limit */
499         _word(bytes_allocated)
500         _word(bytes_consed_high)
501         _node(log2_allocation_quantum)
502         _node(interrupt_pending)
503         _node(xframe)          /* per-thread exception frame list */
504         _node(errno_loc)       /* per-thread  errno location */
505         _node(ffi_exception)   /* mxcsr exception bits from ff-call */
506         _node(osid)            /* OS thread id */
507         _node(valence)         /* odd when in foreign code */
508         _node(foreign_exception_status)
509         _node(native_thread_info)
510         _node(native_thread_id)
511         _node(last_allocptr)
512         _node(save_allocptr)
513         _node(save_allocbase)
514         _node(reset_completion)
515         _node(activate)
516         _node(suspend_count)
517         _node(suspend_context)
518         _node(pending_exception_context)
519         _node(suspend)         /* semaphore for suspension notify */
520         _node(resume)          /* sempahore for resumption notify */
521         _node(flags)     
522         _node(gc_context)
523         _node(termination_semaphore)
524         _node(unwinding)
525         _node(tlb_limit)
526         _node(tlb_pointer)     /* Consider using tcr+N as tlb_pointer */
527         _node(shutdown_count)
528         _node(next_tsp)
529         _node(safe_ref_address)
530         _word(ldt_selector)
531         _word(scratch_mxcsr)
532         _word(unboxed0)
533         _word(unboxed1)
534         _node(next_method_context)
535         _word(save_eflags)
536        _ends
537
538TCR_FLAG_BIT_FOREIGN = fixnum_shift
539TCR_FLAG_BIT_AWAITING_PRESET = (fixnum_shift+1) 
540TCR_FLAG_BIT_ALT_SUSPEND = (fixnumshift+2)
541TCR_FLAG_BIT_PROPAGATE_EXCEPTION = (fixnumshift+3)
542TCR_FLAG_BIT_SUSPEND_ACK_PENDING = (fixnumshift+4)
543TCR_FLAG_BIT_PENDING_EXCEPTION = (fixnumshift+5)
544TCR_FLAG_BIT_FOREIGN_EXCEPTION = (fixnumshift+6)
545TCR_FLAG_BIT_PENDING_SUSPEND = (fixnumshift+7)
546
547target_most_positive_fixnum = 536870911
548target_most_negative_fixnum = -536870912
549call_arguments_limit = 8192
550
551lisp_globals_limit = 0x13000
552       
553INTERRUPT_LEVEL_BINDING_INDEX = fixnumone
554
Note: See TracBrowser for help on using the repository browser.