source: release/1.7/source/lisp-kernel/x86-constants.s @ 15267

Last change on this file since 15267 was 14652, checked in by rme, 8 years ago

In SPffcall, don't use popfl to restore the state of DF. Instead,
test the DF bit in the saved flags directly, and set DF with the std
instruction if needed.

This appears to resolve the issue described in ticket:819. On the
other hand, I don't see how the TF bit is gettting set in the saved
flags, so this may simply be masking the symptoms of some underlying bug.

See ticket:819.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.8 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
17       
18/* Indices in %builtin-functions%  */
19       
20_builtin_plus = 0       /* +-2   */
21_builtin_minus = 1      /* --2   */
22_builtin_times = 2      /* *-2   */
23_builtin_div = 3        /* /-2   */
24_builtin_eq = 4         /* =-2   */
25_builtin_ne = 5         /* /-2   */
26_builtin_gt = 6         /* >-2   */
27_builtin_ge = 7         /* >=-2   */
28_builtin_lt = 8         /* <-2   */
29_builtin_le = 9         /* <=-2   */
30_builtin_eql = 10       /* eql   */
31_builtin_length = 11    /* length   */
32_builtin_seqtype = 12   /* sequence-type   */
33_builtin_assq = 13      /* assq   */
34_builtin_memq = 14      /* memq   */
35_builtin_logbitp = 15   /* logbitp   */
36_builtin_logior = 16    /* logior-2   */
37_builtin_logand = 17    /* logand-2   */
38_builtin_ash = 18       /* ash   */
39_builtin_negate = 19    /* %negate   */
40_builtin_logxor = 20    /* logxor-2   */
41_builtin_aref1 = 21     /* %aref1   */
42_builtin_aset1 = 22     /* %aset1   */
43       
44
45ifdef(`X8664',`
46        include(x86-constants64.s)
47',`
48        include(x86-constants32.s)
49')                                             
50
51/* registers, as used in destructuring-bind/macro-bind   */
52ifdef(`X8664',`
53define(`whole_reg',`temp1')
54define(`arg_reg',`temp0')
55define(`keyvect_reg',`arg_x')
56',`
57define(`arg_reg',`temp1')
58define(`arg_reg_b',`temp1_b')
59define(`keyvect_reg',`arg_y')
60')
61
62define(`initopt_bit',`24')
63define(`keyp_bit',`25') /*  note that keyp can be true even when 0 keys.   */
64define(`aok_bit',`26')
65define(`restp_bit',`27')
66define(`seen_aok_bit',`28')       
67       
68num_lisp_globals = 49            /* MUST UPDATE THIS !!!   */
69       
70        _struct(lisp_globals,lisp_globals_limit-(num_lisp_globals*node_size))
71         _node(weakvll)                 /* all populations as of last GC */
72         _node(initial_tcr)             /* initial thread tcr */
73         _node(image_name)              /* --image-name argument */
74         _node(BADfpscr_save_high)      /* high word of FP reg used to save FPSCR */
75         _node(unwind_resume)           /* _Unwind_Resume */
76         _node(batch_flag)              /* -b */
77         _node(host_platform)           /* for runtime platform-specific stuff   */
78         _node(argv)                    /* address of argv`0'   */
79         _node(ref_base)                /* start of oldest pointer-bearing area */
80         _node(tenured_area)            /* the tenured_area   */
81         _node(oldest_ephemeral)        /* dword address of oldest ephemeral object or 0   */
82         _node(lisp_exit_hook)          /* install foreign exception_handling   */
83         _node(lisp_return_hook)        /* install lisp exception_handling   */
84         _node(double_float_one)        /* high half of 1.0d0   */
85         _node(short_float_zero)        /* low half of 1.0d0   */
86         _node(objc2_end_catch)         /* objc_end_catch()  */
87         _node(metering_info)           /* address of lisp_metering global   */
88         _node(in_gc)                   /* non-zero when GC active   */
89         _node(lexpr_return1v)          /* simpler when &lexpr called for single value.   */
90         _node(lexpr_return)            /* magic &lexpr return code.   */
91         _node(all_areas)               /* doubly-linked list of all memory areas   */
92         _node(kernel_path)             /* real executable name */
93         _node(objc2_begin_catch)       /* objc_begin_catch   */
94         _node(stack_size)              /* from the command line */
95         _node(statically_linked)       /* non-zero if -static   */
96         _node(heap_end)                /* end of lisp heap   */
97         _node(heap_start)              /* start of lisp heap   */
98         _node(gcable_pointers)         /* linked-list of weak macptrs.   */
99         _node(gc_num)                  /* fixnum: GC call count.   */
100         _node(fwdnum)                  /* fixnum: GC "forwarder" call count.   */
101         _node(altivec_present)         /* non-zero when AltiVec available   */
102         _node(oldspace_dnode_count)    /* dynamic dnodes older than g0 start   */
103         _node(refbits)                 /* EGC refbits   */
104         _node(gc_inhibit_count)
105         _node(intflag)                 /* sigint pending   */
106         _node(default_allocation_quantum)      /* for per-thread allocation   */
107         _node(deleted_static_pairs)           
108         _node(exception_lock)
109         _node(area_lock)
110         _node(tcr_key)                 /* tsd key for per-thread tcr   */
111         _node(ret1val_addr)            /* address of "dynamic" subprims magic values return addr   */
112         _node(subprims_base)           /* address of dynamic subprims jump table   */
113         _node(saveR13)                 /* probably don't really need this   */
114         _node(saveTOC)                 /* where the 68K emulator stores the  emulated regs   */
115         _node(objc_2_personality)              /* exception "personality routine" address for ObjC 2.0 */
116         _node(kernel_imports)          /* some things we need imported for us   */
117         _node(interrupt_signal)        /* signal used by PROCESS-INTERRUPT   */
118         _node(tcr_count)               /* tcr_id for next tcr   */
119         _node(get_tcr)                 /* address of get_tcr()  */
120        _ends
121       
122       
123               
124define(`TCR_STATE_FOREIGN',1)
125define(`TCR_STATE_LISP',0)
126define(`TCR_STATE_EXCEPTION_WAIT',2)
127define(`TCR_STATE_EXCEPTION_RETURN',4)
128
129tstack_alloc_limit = 0xffff
130       
131mxcsr_ie_bit = 0                /* invalid */
132mxcsr_de_bit = 1                /* denorm */       
133mxcsr_ze_bit = 2
134mxcsr_oe_bit = 3
135mxcsr_ue_bit = 4
136mxcsr_pe_bit = 5
137num_mxcsr_exception_bits = 6
138
139mxcsr_all_exceptions = ((1<<num_mxcsr_exception_bits)-1)
140
141TCR_FLAG_BIT_FOREIGN = fixnum_shift
142TCR_FLAG_BIT_AWAITING_PRESET = (fixnum_shift+1) 
143TCR_FLAG_BIT_ALT_SUSPEND = (fixnumshift+2)
144TCR_FLAG_BIT_PROPAGATE_EXCEPTION = (fixnumshift+3)
145TCR_FLAG_BIT_SUSPEND_ACK_PENDING = (fixnumshift+4)
146TCR_FLAG_BIT_PENDING_EXCEPTION = (fixnumshift+5)
147TCR_FLAG_BIT_FOREIGN_EXCEPTION = (fixnumshift+6)
148TCR_FLAG_BIT_PENDING_SUSPEND = (fixnumshift+7)       
149TCR_FLAG_BIT_FOREIGN_FPE = (fixnumshift+8)       
150
151CF_BIT = 0
152DF_BIT = 10
Note: See TracBrowser for help on using the repository browser.