source: trunk/source/lisp-kernel/ppc-spjump.s @ 10731

Last change on this file since 10731 was 10731, checked in by gz, 12 years ago

Implemented "nearly-lock-free" hash tables. They are created by
calling MAKE-HASH-TABLE with :LOCK-FREE t, or by setting
CCL::*LOCK-FREE-HASH-TABLE-DEFAULT* to T. There is some documentation
in a big comment in l0-hash.lisp, but basically the idea is to try to
avoid any locking in GETHASH, getting the performance equivalent to
readonly tables, at the cost of rehashing becoming more
expensive. PUTHASH should be roughly equivalent (it avoids getting a
lock, but does sync memory a few times).

So far, I've only tested them on linuxx8664, by building ccl multiple
times with *lock-free-hash-table-default* = T on, so no real
multi-threaded testing. I will now switch to the mac and try to
build and use the IDE that way.

Other changes: moved some slots from the hash table to the hash table
vector so they can all be swapped in/out all at once. Made nhash.find
return -1 when not found, also to avoid some synchronization issues.
%needs-rehashing-p now takes a hash table vector, not the hash table.
Got rid of a bunch of unused slots and constants in hash tables.

Incremented fasl version in case there are any fasdumped hash tables out there.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.5 KB
Line 
1/*   Copyright (C) 1994-2001 Digitool, Inc */
2/*   This file is part of OpenMCL.   */
3
4/*   OpenMCL is licensed under the terms of the Lisp Lesser GNU Public */
5/*   License , known as the LLGPL and distributed with OpenMCL as the */
6/*   file "LICENSE".  The LLGPL consists of a preamble and the LGPL, */
7/*   which is distributed with OpenMCL as the file "LGPL".  Where these */
8/*   conflict, the preamble takes precedence.   */
9
10/*   OpenMCL 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        include(lisp.s)
16        _beginfile
17       
18define([_spjump],[
19        .align 2
20        .globl _SP$1
21_exportfn(j_SP$1)
22          __(b _SP$1)
23_endfn
24])
25         .org 0x5000-0x2000
26        /*      .align 12 */
27        __ifdef([DARWIN])
28         __ifdef([PPC64])
29         .globl C(spjump_start)
30C(spjump_start):
31         __endif
32       __endif
33        _spjump(jmpsym)
34        _spjump(jmpnfn)
35        _spjump(funcall)
36        _spjump(mkcatch1v)
37        _spjump(mkunwind)
38        _spjump(mkcatchmv)
39        _spjump(throw)
40        _spjump(nthrowvalues)
41        _spjump(nthrow1value)
42        _spjump(bind)
43        _spjump(bind_self)
44        _spjump(bind_nil)
45        _spjump(bind_self_boundp_check)
46        _spjump(rplaca)
47        _spjump(rplacd)
48        _spjump(conslist)
49        _spjump(conslist_star)
50        _spjump(stkconslist)
51        _spjump(stkconslist_star)
52        _spjump(mkstackv)
53        _spjump(subtag_misc_ref)
54        _spjump(setqsym)
55        _spjump(progvsave)
56        _spjump(stack_misc_alloc)
57        _spjump(gvector)
58        _spjump(nvalret)
59        _spjump(mvpass)
60        _spjump(fitvals)
61        _spjump(nthvalue)
62        _spjump(values)
63        _spjump(default_optional_args)
64        _spjump(opt_supplied_p)
65        _spjump(heap_rest_arg)
66        _spjump(req_heap_rest_arg)
67        _spjump(heap_cons_rest_arg)
68        _spjump(simple_keywords)
69        _spjump(keyword_args)
70        _spjump(keyword_bind)
71        _spjump(poweropen_ffcall)
72        _spjump(aref2)
73        _spjump(ksignalerr)
74        _spjump(stack_rest_arg)
75        _spjump(req_stack_rest_arg)
76        _spjump(stack_cons_rest_arg)
77        _spjump(poweropen_callbackX)       
78        _spjump(call_closure)       
79        _spjump(getxlong)
80        _spjump(spreadargz)
81        _spjump(tfuncallgen)
82        _spjump(tfuncallslide)
83        _spjump(tfuncallvsp)
84        _spjump(tcallsymgen)
85        _spjump(tcallsymslide)
86        _spjump(tcallsymvsp)
87        _spjump(tcallnfngen)
88        _spjump(tcallnfnslide)
89        _spjump(tcallnfnvsp)
90        _spjump(misc_ref)
91        _spjump(misc_set)
92        _spjump(stkconsyz)
93        _spjump(stkvcell0)
94        _spjump(stkvcellvsp)     
95        _spjump(makestackblock)
96        _spjump(makestackblock0)
97        _spjump(makestacklist)
98        _spjump(stkgvector)
99        _spjump(misc_alloc)
100        _spjump(poweropen_ffcallX)
101        _spjump(gvset)
102        _spjump(macro_bind)
103        _spjump(destructuring_bind)
104        _spjump(destructuring_bind_inner)
105        _spjump(recover_values)
106        _spjump(vpopargregs)
107        _spjump(integer_sign)
108        _spjump(subtag_misc_set)
109        _spjump(spread_lexprz)
110        _spjump(store_node_conditional)
111        _spjump(reset)
112        _spjump(mvslide)
113        _spjump(save_values)
114        _spjump(add_values)
115        _spjump(poweropen_callback)
116        _spjump(misc_alloc_init)
117        _spjump(stack_misc_alloc_init)
118        _spjump(set_hash_key)
119        _spjump(aset2)
120        _spjump(callbuiltin)
121        _spjump(callbuiltin0)
122        _spjump(callbuiltin1)
123        _spjump(callbuiltin2)
124        _spjump(callbuiltin3)
125        _spjump(popj)
126        _spjump(restorefullcontext)
127        _spjump(savecontextvsp)
128        _spjump(savecontext0)
129        _spjump(restorecontext)
130        _spjump(lexpr_entry)
131        _spjump(poweropen_syscall)
132        _spjump(builtin_plus)
133        _spjump(builtin_minus)
134        _spjump(builtin_times)
135        _spjump(builtin_div)
136        _spjump(builtin_eq)
137        _spjump(builtin_ne)
138        _spjump(builtin_gt)
139        _spjump(builtin_ge)
140        _spjump(builtin_lt)
141        _spjump(builtin_le)
142        _spjump(builtin_eql)
143        _spjump(builtin_length)
144        _spjump(builtin_seqtype)
145        _spjump(builtin_assq)
146        _spjump(builtin_memq)
147        _spjump(builtin_logbitp)
148        _spjump(builtin_logior)
149        _spjump(builtin_logand)
150        _spjump(builtin_ash)
151        _spjump(builtin_negate)
152        _spjump(builtin_logxor)
153        _spjump(builtin_aref1)
154        _spjump(builtin_aset1)
155        _spjump(breakpoint)
156        _spjump(eabi_ff_call)
157        _spjump(eabi_callback)
158        _spjump(eabi_syscall)
159        _spjump(getu64)
160        _spjump(gets64)
161        _spjump(makeu64)
162        _spjump(makes64)
163        _spjump(specref)
164        _spjump(specset)
165        _spjump(specrefcheck)
166        _spjump(restoreintlevel)
167        _spjump(makes32)
168        _spjump(makeu32)
169        _spjump(gets32)
170        _spjump(getu32)
171        _spjump(fix_overflow)
172        _spjump(mvpasssym)
173        _spjump(aref3)
174        _spjump(aset3)
175        _spjump(poweropen_ffcall_return_registers)
176        _spjump(nmkunwind)
177        _spjump(set_hash_key_conditional)
178        _spjump(unbind_interrupt_level)
179        _spjump(unbind)
180        _spjump(unbind_n)
181        _spjump(unbind_to)
182        _spjump(bind_interrupt_level_m1)
183        _spjump(bind_interrupt_level)
184        _spjump(bind_interrupt_level_0)
185        _spjump(progvrestore)
186        __ifdef([DARWIN])
187         __ifdef([PPC64])
188          .globl C(spjump_end)
189C(spjump_end):
190         .org 0x5000-0x1000
191         __endif
192        __endif
193        _endfile
194       
Note: See TracBrowser for help on using the repository browser.