6 * This software is part of the SBCL system. See the README file for
9 * This software is derived from the CMU CL system, which was
10 * written at Carnegie Mellon University and released into the
11 * public domain. The software is in the public domain and is
12 * provided with absolutely no warranty. See the COPYING and CREDITS
13 * files for more information.
18 typedef signed long page_index_t;
19 typedef signed char generation_index_t;
21 extern void gc_init(void);
22 extern void gc_initialize_pointers(void);
23 extern void collect_garbage(generation_index_t last_gen);
24 extern void gc_init_tables(void);
29 extern void set_auto_gc_trigger(os_vm_size_t usage);
30 extern void clear_auto_gc_trigger(void);
32 extern int maybe_gc_pending;
36 #if defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)
38 #define set_alloc_pointer(value) \
39 SetSymbolValue(ALLOCATION_POINTER, value, 0)
40 #define get_alloc_pointer() \
41 SymbolValue(ALLOCATION_POINTER, 0)
42 #define get_binding_stack_pointer(thread) \
43 SymbolValue(BINDING_STACK_POINTER, thread)
44 #define get_pseudo_atomic_atomic(thread) \
45 SymbolValue(PSEUDO_ATOMIC_ATOMIC, thread)
46 #define set_pseudo_atomic_atomic(thread) \
47 SetSymbolValue(PSEUDO_ATOMIC_ATOMIC, make_fixnum(1), thread);
48 #define clear_pseudo_atomic_atomic(thread) \
49 SetSymbolValue(PSEUDO_ATOMIC_ATOMIC, make_fixnum(0), thread);
50 #define get_pseudo_atomic_interrupted(thread) \
51 fixnum_value(SymbolValue(PSEUDO_ATOMIC_INTERRUPTED, thread))
52 #define clear_pseudo_atomic_interrupted(thread) \
53 SetSymbolValue(PSEUDO_ATOMIC_INTERRUPTED, make_fixnum(0), thread)
54 #define set_pseudo_atomic_interrupted(thread) \
55 SetSymbolValue(PSEUDO_ATOMIC_INTERRUPTED, make_fixnum(1), thread)
57 #elif defined(LISP_FEATURE_PPC) && defined(LISP_FEATURE_GENCGC)
59 #define set_alloc_pointer(value) \
60 (dynamic_space_free_pointer = \
61 (value) | (((unsigned long)dynamic_space_free_pointer) & LOWTAG_MASK))
63 #define get_alloc_pointer() \
64 ((unsigned long) dynamic_space_free_pointer & ~LOWTAG_MASK)
65 #define get_binding_stack_pointer(thread) \
66 (current_binding_stack_pointer)
67 #define get_pseudo_atomic_atomic(thread) \
68 ((unsigned long)dynamic_space_free_pointer & flag_PseudoAtomic)
69 #define set_pseudo_atomic_atomic(thread) \
70 (dynamic_space_free_pointer \
71 = (lispobj*) ((unsigned long)dynamic_space_free_pointer | flag_PseudoAtomic))
72 #define clear_pseudo_atomic_atomic(thread) \
73 (dynamic_space_free_pointer \
74 = (lispobj*) ((unsigned long) dynamic_space_free_pointer & ~flag_PseudoAtomic))
75 #define get_pseudo_atomic_interrupted(thread) \
76 ((unsigned long) dynamic_space_free_pointer & flag_PseudoAtomicInterrupted)
77 #define clear_pseudo_atomic_interrupted(thread) \
78 (dynamic_space_free_pointer \
79 = (lispobj*) ((unsigned long) dynamic_space_free_pointer & ~flag_PseudoAtomicInterrupted))
80 #define set_pseudo_atomic_interrupted(thread) \
81 (dynamic_space_free_pointer \
82 = (lispobj*) ((unsigned long) dynamic_space_free_pointer | flag_PseudoAtomicInterrupted))