source: release/1.9/source/lisp-kernel/x86-constants64.s @ 16083

Last change on this file since 16083 was 15371, checked in by gb, 7 years ago

Ensure that lisp_globals_limit is defined before lisp_globals.s
is included. (Newer versions of gas can handle forward references
better than older versions do.)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 21.5 KB
Line 
1/*   Copyright (C) 2005-2009 Clozure Associates  */
2/*   This file is part of Clozure CL.    */
3
4/*   Clozure CL is licensed under the terms of the Lisp Lesser GNU Public  */
5/*   License , known as the LLGPL and distributed with Clozure CL as the  */
6/*   file "LICENSE".  The LLGPL consists of a preamble and the LGPL,  */
7/*   which is distributed with Clozure CL as the file "LGPL".  Where these  */
8/*   conflict, the preamble takes precedence.    */
9 
10/*   Clozure CL is referenced in the preamble as the "LIBRARY."  */
11 
12/*   The LLGPL is also available online at  */
13/*   http://opensource.franz.com/preamble.html  */
14
15
16/* Register usage.  This is certainly a little short of  */
17/* immediate registers; we can maybe use the low bits  */
18/* of mmx or xmm registers to hold immediate values and  */
19/* do some unboxed arithmetic.   */
20
21
22/*
23
24        Register usage in C calling conventions differ between
25        Darwin/Linux/FreeBSD (which use the AMD-defined ABI) and
26        Windows64 (which uses something else).  The good news is that
27        Win64 did away with the cdecl/stdcall/fastcall madness, there
28        is only one ABI left.  Here's a rundown.
29
30        AMD64^Wx86-64 ABI:
31         * Integer and pointer function arguments passed (from left to
32        right) in RDI, RSI, RDX, RCX, R8 and R9
33         * FP arguments are passed in XMM0..XMM7
34         * rest is passed on stack
35         * return value in RAX
36         * Callee must preserve RBP, RBX, R12..R15, MXCSR control bits
37         * On function entry, x87 mode and DF clear is assumed
38         * `RSP'..`RSP-128' must not be touched by signal handlers
39
40        Win64 ABI:
41         * Integer and pointers passed in RCX, RDX, R8, R9
42         * FP passed in XMM0..XMM3
43         * rest is passed on stack
44         * Return value in RAX or XMM0
45         * Caller (!) responsible for creating and cleaning stack space for
46        spilling integer registers
47         * Callee must preserve RBP, RBX, RSI, RDI, R12..R15, XMM6..XMM15
48
49        Both want their stack pointers to be 16 byte aligned on call,
50        equivalent to 8 byte offset after call due to pushed return address.
51       
52        http://msdn2.microsoft.com/en-us/library/zthk2dkh(VS.80).aspx
53        http://www.tortall.net/projects/yasm/manual/html/objfmt-win64-exception.html
54        http://www.x86-64.org/documentation/abi.pdf
55
56
57        Lisp register usage:
58
59        Clozure CL renames the physical registers, giving them names
60        based on their usage. An overview:
61
62        imm0..imm2
63        temp0..temp2
64        save0..save3
65        arg_x, arg_y, arg_z
66        fn
67
68        On top of that, further mappings are defined:
69
70        fname, next_method_context:     temp0
71        nargs:                          imm2
72        ra0:                            temp2
73        xfn:                            temp1
74        allocptr:                       temp0
75        stack_temp:                     mm7     
76       
77        x86-64 ABI mapping:
78       
79        imm0..imm2:             RAX, RDX, RCX
80        temp0..temp2:           RBX, R9, R10
81        save0..save3:           R15, R14, R12, R11
82        arg_x, arg_y, arg_z:    R8, RDI, RSI
83        fn:                     R13
84        rcontext_reg:           GS
85
86        Win64 specifics:
87        rcontext_reg:           R11
88       
89*/
90       
91
92/* Redefining these standard register names - with the same _l, _w, _b suffixes  */
93/*  used in lispy symbolic names - allows us to play Stupid M4 Tricks in macros  */
94                       
95define(`rax_l',`eax')
96define(`rax_w',`ax')
97define(`rax_b',`al')
98define(`rbx_l',`ebx')
99define(`rbx_w',`bx')
100define(`rbx_b',`bl')
101define(`rcx_l',`ecx')
102define(`rcx_w',`cx')
103define(`rdx_l',`edx')
104define(`rdx_w',`dx')                                   
105define(`rdx_b',`dl')                                                   
106define(`rsi_l',`esi')
107define(`rsi_w',`si')                           
108define(`rsi_b',`sil')
109define(`rdi_l',`edo')
110define(`rdi_w',`di')                           
111define(`rdi_b',`dil')
112define(`r8_l',`r8d')
113define(`r8_w',`r8w')                                   
114define(`r8_b',`r8b')                                                   
115define(`r9_l',`r9d')
116define(`r9_w',`r9w')                                   
117define(`r9_b',`r9b')                                                   
118define(`r10_l',`r10d')
119define(`r10_w',`r10w')                                 
120define(`r10_b',`r10b')                                                 
121define(`r10_l',`r11d')
122define(`r11_w',`r11w')                                 
123define(`r11_b',`r11b')                                                 
124define(`r12_l',`r12d')
125define(`r12_w',`r12w')                                 
126define(`r12_b',`r12b')                                                 
127define(`r13_l',`r13d')
128define(`r13_w',`r13w')                                 
129define(`r13_b',`r13b')                                                 
130define(`r14_l',`r14d')
131define(`r14_w',`r14w')                                 
132define(`r14_b',`r14b')                                                 
133define(`r15_l',`r15d')
134define(`r15_w',`r15w')                                 
135define(`r15_b',`r15b')                                                 
136
137/* Registers when using Lisp calling conventions */
138       
139define(`imm0',`rax')
140        define(`imm0_l',`eax')
141        define(`imm0_w',`ax')
142        define(`imm0_b',`al')
143        define(`Rimm0',`0')
144       
145define(`temp0',`rbx')
146        define(`temp0_l',`ebx')
147        define(`temp0_w',`bx')
148        define(`temp0_b',`bl')
149        define(`Rtemp0',`3')
150
151define(`imm2',`rcx')
152        define(`imm2_l',`ecx')
153        define(`imm2_w',`cx')
154        define(`imm2_b',`cl')
155        define(`Rimm2',`1')
156       
157define(`imm1',`rdx')
158        define(`imm1_l',`edx')
159        define(`imm1_w',`dx')
160        define(`imm1_b',`dl')
161        define(`Rimm1',`2')
162       
163define(`arg_z',`rsi')
164        define(`arg_z_l',`esi')
165        define(`arg_z_w',`si')
166        define(`arg_z_b',`sil')
167        define(`Rarg_z',`6')
168
169define(`arg_y',`rdi')
170        define(`arg_y_l',`edi')
171        define(`arg_y_w',`di')
172        define(`arg_y_b',`dil')
173        define(`Rarg_y',`7')
174
175define(`arg_x',`r8')
176        define(`arg_x_l',`r8d')
177        define(`arg_x_w',`r8w')
178        define(`arg_x_b',`r8b')
179        define(`Rarg_x',`8')
180
181define(`temp1',`r9')
182        define(`temp1_l',`r9d')
183        define(`temp1_w',`r9w')
184        define(`temp1_b',`r9b')
185        define(`Rtemp1',`9')
186
187define(`temp2',`r10')
188        define(`temp2_l',`r10d')
189        define(`temp2_w',`r10w')
190        define(`temp2_x_b',`r10b')
191        define(`Rtemp2',`10')
192       
193define(`save3',`r11')           
194        define(`save3_l',`r11d')
195        define(`save3_w',`r11w')
196        define(`save3_b',`r11b')
197        define(`Rsave3',`11')
198       
199define(`save2',`r12')
200        define(`save2_l',`r12d')
201        define(`save2_w',`r12w')
202        define(`save2_b',`r12b')
203        define(`Rsave2',`12')
204       
205define(`fn',`r13')              /* some addressing restrictions   */
206        define(`fn_l',`r13d')
207        define(`fn_w',`r13w')
208        define(`fn_b',`r13b')
209        define(`Rfn',`13')
210       
211define(`save1',`r14')
212        define(`save1_l',`r14d')
213        define(`save1_w',`r14w')
214        define(`save1_b',`r14b')
215        define(`Rsave1',`14')
216               
217define(`save0',`r15')
218        define(`save0_l',`r15d')
219        define(`save0_w',`r15w')
220        define(`save0_b',`r15b')
221        define(`Rsave0',`15')   
222
223
224ifdef(`TCR_IN_GPR',`
225/* We keep the TCR pointer in r11 */
226        define(`rcontext_reg', r11)
227        define(`rcontext',`$1(%rcontext_reg)')
228',`
229/* The TCR can be accessed relative to %gs   */
230        define(`rcontext_reg',`gs')
231        define(`rcontext',`%rcontext_reg:$1')
232')
233define(`fname',`temp0')
234define(`next_method_context',`temp0')
235define(`nargs_b',`imm2_b')     
236define(`nargs_w',`imm2_w')
237define(`nargs_q',`imm2')
238define(`nargs',`imm2_l')
239define(`ra0',`temp2')       
240                                               
241define(`xfn',`temp1')
242
243define(`allocptr',`temp0')             
244define(`stack_temp',`mm7')
245
246               
247define(`fp0',`xmm0')           
248define(`fp1',`xmm1')           
249define(`fp2',`xmm2')           
250define(`fp3',`xmm3')           
251define(`fp4',`xmm4')           
252define(`fp5',`xmm5')           
253define(`fp6',`xmm6')           
254define(`fp7',`xmm7')           
255define(`fp8',`xmm8')           
256define(`fp9',`xmm9')           
257define(`fp10',`xmm10')         
258define(`fp11',`xmm11')         
259define(`fp12',`xmm12')         
260define(`fp13',`xmm13')         
261define(`fp14',`xmm14')         
262define(`fp15',`xmm15')         
263define(`fpzero',`fp15')
264
265/* Registers when running with native C calling conventions */
266
267define(`cret',`rax')
268        define(`cret_l',`eax')
269        define(`cret_w',`ax')
270        define(`cret_b',`al')
271        define(`Rcret',`0')
272       
273define(`ctemp0',`r10')
274        define(`ctemp0_l',`r10d')
275        define(`ctemp0_w',`r10w')
276        define(`ctemp0_b',`r10b')
277        define(`Rctemp0',`10')
278       
279define(`ctemp1',`r11')         
280        define(`ctemp1_l',`r11d')
281        define(`ctemp1_w',`r11w')
282        define(`ctemp1_b',`r11b')
283        define(`Rctemp1',`11')
284       
285define(`csave0',`rbx')
286        define(`csave0_l',`ebx')
287        define(`csave0_w',`bx')
288        define(`csave0_b',`bl')
289        define(`Rcsave0',`3')
290
291define(`csave1',`r12')
292        define(`csave1_l',`r12d')
293        define(`csave1_w',`r12w')
294        define(`csave1_b',`r12b')
295        define(`Rcsave1',`12')
296       
297define(`csave2',`r13')
298        define(`csave2_l',`r13d')
299        define(`csave2_w',`r13w')
300        define(`csave2_b',`r13b')
301        define(`Rcsave2',`13')
302       
303define(`csave3',`r14')
304        define(`csave3_l',`r14d')
305        define(`csave3_w',`r14w')
306        define(`csave3_b',`r14b')
307        define(`Rcsave3',`14')
308               
309define(`csave4',`r15')
310        define(`csave4_l',`r15d')
311        define(`csave4_w',`r15w')
312        define(`csave4_b',`r15b')
313        define(`Rcsave4',`15') 
314
315ifdef(`WINDOWS',`
316
317define(`carg0',`rcx')
318        define(`carg0_l',`ecx')
319        define(`carg0_w',`cx')
320        define(`carg0_b',`cl')
321        define(`Rcarg0',`1')
322       
323define(`carg1',`rdx')
324        define(`carg1_l',`edx')
325        define(`carg1_w',`dx')
326        define(`carg1_b',`dl')
327        define(`Rcarg1',`2')
328       
329define(`carg2',`r8')
330        define(`carg2_l',`r8d')
331        define(`carg2_w',`r8w')
332        define(`carg2_b',`r8b')
333        define(`Rcarg2',`8')
334
335define(`carg3',`r9')
336        define(`carg3_l',`r9d')
337        define(`carg3_w',`r9w')
338        define(`carg3_b',`r9b')
339        define(`Rcarg3',`9')
340
341define(`csave5',`rsi')
342        define(`csave5_l',`esi')
343        define(`csave5_w',`si')
344        define(`csave5_b',`sil')
345        define(`csave5_z',`6')
346
347define(`csave6',`rdi')
348        define(`csave6_l',`edi')
349        define(`csave6_w',`di')
350        define(`csave6_b',`dil')
351        define(`Rcsave6',`7')
352
353',`
354       
355define(`carg0',`rdi')
356        define(`carg0_l',`edi')
357        define(`carg0_w',`di')
358        define(`carg0_b',`dil')
359        define(`Rcarg0',`7')
360
361define(`carg1',`rsi')
362        define(`carg1_l',`esi')
363        define(`carg1_w',`si')
364        define(`carg1_b',`sil')
365        define(`carg1_z',`6')
366
367define(`carg2',`rdx')
368        define(`carg2_l',`edx')
369        define(`carg2_w',`dx')
370        define(`carg2_b',`dl')
371        define(`Rcarg2',`2')
372       
373define(`carg3',`rcx')
374        define(`carg3_l',`ecx')
375        define(`carg3_w',`cx')
376        define(`carg3_b',`cl')
377        define(`Rcarg3',`1')
378       
379define(`carg4',`r8')
380        define(`carg4_l',`r8d')
381        define(`carg4_w',`r8w')
382        define(`carg4_b',`r8b')
383        define(`Rcarg4',`8')
384
385define(`carg5',`r9')
386        define(`carg5_l',`r9d')
387        define(`carg5_w',`r9w')
388        define(`carg5_b',`r9b')
389        define(`Rcarg5',`9')   
390')
391       
392nbits_in_word = 64
393nbits_in_byte = 8
394ntagbits = 4
395nlisptagbits = 3
396nfixnumtagbits = 3
397nlowtagbits = 2       
398num_subtag_bits = 8
399subtag_shift = num_subtag_bits 
400fixnumshift = 3
401fixnum_shift = 3
402fulltagmask = 15
403tagmask = 7
404fixnummask = 7
405ncharcodebits = 8
406charcode_shift = 8
407word_shift = 3
408node_size = 8
409dnode_size = 16
410dnode_align_bits = 4
411dnode_shift = dnode_align_bits       
412bitmap_shift = 6
413       
414fixnumone = (1<<fixnumshift)
415fixnum_one = fixnumone
416fixnum1 = fixnumone
417
418nargregs = 3
419nsaveregs = 4   
420               
421
422tag_fixnum = 0
423tag_imm_0 = 1           /* subtag_single_float ONLY   */
424tag_imm_1 = 2           /* subtag_character, internal markers   */
425tag_list = 3            /* fulltag_cons or NIL   */
426tag_tra = 4             /* tagged return_address   */
427tag_misc = 5            /* random uvector   */
428tag_symbol = 6          /* non-null symbol   */
429tag_function = 7        /* function entry point   */
430
431tag_single_float = tag_imm_0
432               
433fulltag_even_fixnum = 0
434fulltag_imm_0 = 1               /* subtag_single_float (ONLY)   */
435fulltag_imm_1 = 2               /* subtag_character (mostly)   */
436fulltag_cons = 3
437fulltag_tra_0 = 4               /* tagged return address   */
438fulltag_nodeheader_0 = 5
439fulltag_nodeheader_1 = 6
440fulltag_immheader_0 = 7 
441fulltag_odd_fixnum = 8
442fulltag_immheader_1 = 9
443fulltag_immheader_2 = 10
444fulltag_nil = 11
445fulltag_tra_1 = 12
446fulltag_misc = 13
447fulltag_symbol = 14
448fulltag_function = 15
449
450define(`define_subtag',`
451subtag_$1 = ($2 | ($3 << ntagbits))
452')
453       
454
455define_subtag(arrayH,fulltag_nodeheader_0,10)
456define_subtag(vectorH,fulltag_nodeheader_1,10)
457define_subtag(simple_vector,fulltag_nodeheader_1,11)
458min_vector_subtag = subtag_vectorH
459min_array_subtag = subtag_arrayH
460       
461       
462ivector_class_64_bit = fulltag_immheader_2
463ivector_class_32_bit = fulltag_immheader_1
464ivector_class_other_bit = fulltag_immheader_0
465
466define_subtag(fixnum_vector,ivector_class_64_bit,12)
467define_subtag(s64_vector,ivector_class_64_bit,13)
468define_subtag(u64_vector,ivector_class_64_bit,14)
469define_subtag(double_float_vector,ivector_class_64_bit,15)
470
471define_subtag(simple_base_string,ivector_class_32_bit,12)
472define_subtag(s32_vector,ivector_class_32_bit,13)
473define_subtag(u32_vector,ivector_class_32_bit,14)
474define_subtag(single_float_vector,ivector_class_32_bit,15)
475       
476define_subtag(s16_vector,ivector_class_other_bit,10)
477define_subtag(u16_vector,ivector_class_other_bit,11)
478define_subtag(s8_vector,ivector_class_other_bit,13)
479define_subtag(u8_vector,ivector_class_other_bit,14)
480define_subtag(bit_vector,ivector_class_other_bit,15)
481
482
483/* There's some room for expansion in non-array ivector space.   */
484define_subtag(macptr,ivector_class_64_bit,1)
485define_subtag(dead_macptr,ivector_class_64_bit,2)
486define_subtag(bignum,ivector_class_32_bit,1)
487define_subtag(double_float,ivector_class_32_bit,2)
488define_subtag(xcode_vector,ivector_class_32_bit,3)
489
490       
491/* Note the difference between (e.g) fulltag_function - which  */
492/* defines what the low 4 bytes of a function pointer look like -  */
493/* and subtag_function - which describes what the subtag byte  */
494/* in a function header looks like.  (Likewise for fulltag_symbol  */
495/* and subtag_symbol)  */
496               
497
498define_subtag(symbol,fulltag_nodeheader_0,1)
499define_subtag(catch_frame,fulltag_nodeheader_0,2)
500define_subtag(hash_vector,fulltag_nodeheader_0,3)
501define_subtag(pool,fulltag_nodeheader_0,4)
502define_subtag(weak,fulltag_nodeheader_0,5)
503define_subtag(package,fulltag_nodeheader_0,6)
504define_subtag(slot_vector,fulltag_nodeheader_0,7)
505define_subtag(basic_stream,fulltag_nodeheader_0,8)
506define_subtag(function,fulltag_nodeheader_0,9)
507       
508define_subtag(ratio,fulltag_nodeheader_1,1)
509define_subtag(complex,fulltag_nodeheader_1,2)
510define_subtag(struct,fulltag_nodeheader_1,3)
511define_subtag(istruct,fulltag_nodeheader_1,4)
512define_subtag(value_cell,fulltag_nodeheader_1,5)
513define_subtag(xfunction,fulltag_nodeheader_1,6)
514define_subtag(lock,fulltag_nodeheader_1,7)
515define_subtag(instance,fulltag_nodeheader_1,8)
516       
517                       
518nil_value = (0x13000+fulltag_nil)
519t_value = (0x13020+fulltag_symbol)
520misc_bias = fulltag_misc
521cons_bias = fulltag_cons
522define(`t_offset',(t_value-nil_value))
523       
524misc_header_offset = -fulltag_misc
525misc_data_offset = misc_header_offset+node_size /* first word of data    */
526misc_subtag_offset = misc_header_offset       /* low byte of header   */
527misc_dfloat_offset = misc_data_offset           /* double-floats are doubleword-aligned   */
528function_header_offset = -fulltag_function
529function_data_offset = function_header_offset+node_size
530
531define_subtag(single_float,fulltag_imm_0,0)
532
533
534define_subtag(character,fulltag_imm_1,0)
535                       
536define_subtag(unbound,fulltag_imm_1,1)
537unbound_marker = subtag_unbound
538undefined = unbound_marker
539define_subtag(slot_unbound,fulltag_imm_1,2)
540slot_unbound_marker = subtag_slot_unbound
541define_subtag(illegal,fulltag_imm_1,3)
542illegal_marker = subtag_illegal
543define_subtag(no_thread_local_binding,fulltag_imm_1,4)
544no_thread_local_binding_marker = subtag_no_thread_local_binding
545define_subtag(reserved_frame,fulltag_imm_1,5)
546reserved_frame_marker = subtag_reserved_frame
547define_subtag(function_boundary_marker,fulltag_imm_1,15)                       
548
549       
550
551
552       
553/* The objects themselves look something like this:   */
554       
555/* Order of CAR and CDR doesn't seem to matter much - there aren't   */
556/* too many tricks to be played with predecrement/preincrement addressing.   */
557/* Keep them in the confusing MCL 3.0 order, to avoid confusion.   */
558        _struct(cons,-cons_bias)
559         _node(cdr)
560         _node(car)
561        _ends
562       
563        _structf(ratio)
564         _node(numer)
565         _node(denom)
566        _endstructf
567       
568        _structf(double_float)
569         _word(value)
570         _word(val_low)
571        _endstructf
572       
573        _structf(macptr)
574         _node(address)
575         _node(domain)
576         _node(type)
577        _endstructf
578       
579/* Functions are of (conceptually) unlimited size.  */
580       
581        _struct(_function,-misc_bias)
582         _node(header)
583         _node(codevector)
584        _ends
585
586        _struct(tsp_frame,0)
587         _node(backlink)
588         _node(save_rbp)
589         _struct_label(fixed_overhead)
590         _struct_label(data_offset)
591        _ends
592
593        _struct(csp_frame,0)
594         _node(backlink)
595         _node(save_rbp)
596         _struct_label(fixed_overhead)
597         _struct_label(data_offset)
598        _ends
599       
600
601
602        _structf(symbol,-fulltag_symbol)
603         _node(pname)
604         _node(vcell)
605         _node(fcell)
606         _node(package_predicate)
607         _node(flags)
608         _node(plist)
609         _node(binding_index)
610        _endstructf
611
612        _structf(catch_frame)
613         _node(catch_tag)       /* #<unbound> -> unwind-protect, else catch   */
614         _node(link)            /* backpointer to previous catch frame   */
615         _node(mvflag)          /* 0 if single-valued catch, fixnum 1 otherwise   */
616         _node(rsp)             /* saved lisp sp   */
617         _node(rbp)             /* saved lisp rbp   */
618         _node(foreign_sp)      /* necessary ?    */
619         _node(db_link)         /* head of special-binding chain   */
620         _node(_save3)
621         _node(_save2)
622         _node(_save1)
623         _node(_save0)
624         _node(xframe)          /* exception frame chain   */
625         _node(pc)              /* TRA of catch exit or cleanup form   */
626        _endstructf
627
628
629        _structf(vectorH)
630         _node(logsize)
631         _node(physsize)
632         _node(data_vector)
633         _node(displacement)
634         _node(flags)
635        _endstructf     
636
637        _structf(arrayH)
638         _node(rank)
639         _node(physsize)
640         _node(data_vector)
641         _node(displacement)
642         _node(flags)
643         _struct_label(dim0)       
644        _endstructf     
645               
646       
647
648
649
650               
651        _struct(lisp_frame,0)
652         _node(backlink)
653         _node(savera0)
654        _ends
655
656        _struct(vector,-fulltag_misc)
657         _node(header)
658         _struct_label(data)
659        _ends
660
661        _struct(binding,0)
662         _node(link)
663         _node(sym)
664         _node(val)
665        _ends
666
667
668
669nrs_origin = 0x13020
670nrs_symbol_fulltag = fulltag_symbol       
671lisp_globals_limit = 0x13000
672       
673        include(lisp_globals.s)
674       
675
676define(`def_header',`
677$1 = ($2<<num_subtag_bits)|$3')
678
679        def_header(double_float_header,2,subtag_double_float)
680        def_header(two_digit_bignum_header,2,subtag_bignum)
681        def_header(three_digit_bignum_header,3,subtag_bignum)
682        def_header(four_digit_bignum_header,4,subtag_bignum)
683        def_header(five_digit_bignum_header,5,subtag_bignum)       
684        def_header(symbol_header,symbol.element_count,subtag_symbol)
685        def_header(value_cell_header,1,subtag_value_cell        )
686        def_header(macptr_header,macptr.element_count,subtag_macptr)
687        def_header(vectorH_header,vectorH.element_count,subtag_vectorH)
688
689        include(errors.s)
690
691/* Symbol bits that we care about  */
692       
693sym_vbit_bound = (0+fixnum_shift)
694sym_vbit_bound_mask = (1<<sym_vbit_bound)
695sym_vbit_const = (1+fixnum_shift)
696sym_vbit_const_mask = (1<<sym_vbit_const)
697
698        _struct(area,0)
699         _node(pred) 
700         _node(succ) 
701         _node(low) 
702         _node(high) 
703         _node(active) 
704         _node(softlimit) 
705         _node(hardlimit) 
706         _node(code) 
707         _node(markbits) 
708         _node(ndwords) 
709         _node(older) 
710         _node(younger) 
711         _node(h) 
712         _node(sofprot) 
713         _node(hardprot) 
714         _node(owner) 
715         _node(refbits) 
716         _node(nextref) 
717        _ends
718
719
720
721TCR_BIAS = 0
722               
723/*  Thread context record.  */
724
725        _struct(tcr,TCR_BIAS)
726         _node(prev)            /* in doubly-linked list   */
727         _node(next)            /* in doubly-linked list   */
728         _node(single_float_convert)
729         _node(linear)          /* our linear (non-segment-based) address.   */
730         _node(save_rbp)        /* lisp RBP when in foreign code    */
731         _word(lisp_mxcsr)
732         _word(foreign_mxcsr)   
733         _node(db_link)         /* special binding chain head   */
734         _node(catch_top)       /* top catch frame   */
735         _node(save_vsp)        /* VSP when in foreign code   */
736         _node(save_tsp)        /* TSP when in foreign code   */
737         _node(foreign_sp)      /* Saved foreign SP when in lisp code   */
738         _node(cs_area)         /* cstack area pointer   */
739         _node(vs_area)         /* vstack area pointer   */
740         _node(ts_area)         /* tstack area pointer   */
741         _node(cs_limit)        /* cstack overflow limit   */
742         _word(bytes_consed_low)
743         _word(bytes_consed_high)
744         _node(log2_allocation_quantum)
745         _node(interrupt_pending)
746         _node(xframe)          /* per-thread exception frame list   */
747         _node(errno_loc)       /* per-thread  errno location   */
748         _node(ffi_exception)   /* mxcsr exception bits from ff-call   */
749         _node(osid)            /* OS thread id   */
750         _node(valence)         /* odd when in foreign code       */
751         _node(foreign_exception_status)
752         _node(native_thread_info)
753         _node(native_thread_id)
754         _node(last_allocptr)
755         _node(save_allocptr)
756         _node(save_allocbase)
757         _node(reset_completion)
758         _node(activate)
759         _node(suspend_count)
760         _node(suspend_context)
761         _node(pending_exception_context)
762         _node(suspend)         /* semaphore for suspension notify   */
763         _node(resume)          /* sempahore for resumption notify   */
764         _node(flags)     
765         _node(gc_context)
766         _node(termination_semaphore)
767         _node(unwinding)
768         _node(tlb_limit)
769         _node(tlb_pointer)     /* Consider using tcr+N as tlb_pointer   */
770         _node(shutdown_count)
771         _node(next_tsp)
772         _node(safe_ref_address)
773         _node(pending_io_info)
774         _node(io_datum)
775        _ends
776
777        _struct(win64_context,0)
778         _field(P1Home, 8)
779         _field(P2Home, 8)
780         _field(P3Home, 8)
781         _field(P4Home, 8)
782         _field(P5Home, 8)
783         _field(P6Home, 8)
784         _field(ContextFlags, 4)
785         _field(MxCsr, 4)
786         _field(SegCs, 2)
787         _field(SegDs, 2)
788         _field(SegEs, 2)
789         _field(SegFs, 2)
790         _field(SegGs, 2)
791         _field(SegSs, 2)
792         _field(EFlags, 4)
793         _field(Dr0, 8)
794         _field(Dr1, 8)
795         _field(Dr2, 8)
796         _field(Dr3, 8)
797         _field(Dr6, 8)
798         _field(Dr7, 8)
799         _field(Rax, 8)
800         _field(Rcx, 8)
801         _field(Rdx, 8)
802         _field(Rbx, 8)
803         _field(Rsp, 8)
804         _field(Rbp, 8)
805         _field(Rsi, 8)
806         _field(Rdi, 8)
807         _field(R8, 8)
808         _field(R9, 8)
809         _field(R10, 8)
810         _field(R11, 8)
811         _field(R12, 8)
812         _field(R13, 8)
813         _field(R14, 8)
814         _field(R15, 8)
815         _field(Rip, 8)
816         _struct_label(fpstate)
817         _field(Header, 32)
818         _field(Legacy, 128)
819         _field(Xmm0, 16)
820         _field(Xmm1, 16)       
821         _field(Xmm2, 16)       
822         _field(Xmm3, 16)       
823         _field(Xmm4, 16)       
824         _field(Xmm5, 16)       
825         _field(Xmm6, 16)       
826         _field(Xmm7, 16)       
827         _field(Xmm8, 16)       
828         _field(Xmm9, 16)       
829         _field(Xmm10, 16)       
830         _field(Xmm11, 16)       
831         _field(Xmm12, 16)       
832         _field(Xmm13, 16)       
833         _field(Xmm14, 16)       
834         _field(Xmm15, 16)
835         _field(__pad, 96)
836         _field(VectorRegister, 416)
837         _field(VectorControl, 8)
838         _field(DebugControl, 8)
839         _field(LastBranchToRip, 8)
840         _field(LastBranchFromRip, 8)
841         _field(LastExceptionToRip, 8)
842         _field(LastExceptionFromRip, 8)
843 _ends
844
845       
846target_most_positive_fixnum = 1152921504606846975
847target_most_negative_fixnum = -1152921504606846976
848call_arguments_limit = 0x10000
849
850
851
852INTERRUPT_LEVEL_BINDING_INDEX = fixnumone
853
854c_stack_16_byte_aligned = 1
Note: See TracBrowser for help on using the repository browser.