source: branches/arm/lisp-kernel/x86-constants32.s @ 13923

Last change on this file since 13923 was 13406, checked in by rme, 10 years ago

Increase CALL-ARGUMENTS-LIMIT to 65536 on non-PPC targets.

On x86-64, this lets a single APPLY push 512KB, which is a
significant portion of the default stack size of 2MB.

At the moment, the only thing that checks CALL-ARGUMENTS-LIMIT
is .SPspreadargz, which uses it to guard against the case of
a possibly-circular last argument to APPLY.

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