0.9.9.36:
[sbcl.git] / src / runtime / gc.h
1 /*
2  * garbage collection
3  */
4
5 /*
6  * This software is part of the SBCL system. See the README file for
7  * more information.
8  *
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.
14  */
15
16 #ifndef _GC_H_
17 #define _GC_H_
18 typedef signed long page_index_t;
19 typedef signed char generation_index_t;
20
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);
25
26
27 #include "os.h"
28
29 extern void set_auto_gc_trigger(os_vm_size_t usage);
30 extern void clear_auto_gc_trigger(void);
31
32 extern int maybe_gc_pending;
33
34 #include "fixnump.h"
35
36 #if defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)
37
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)
56
57 #elif defined(LISP_FEATURE_PPC) && defined(LISP_FEATURE_GENCGC)
58
59 #define set_alloc_pointer(value) \
60     (dynamic_space_free_pointer =                                       \
61      (value) | (((unsigned long)dynamic_space_free_pointer) & LOWTAG_MASK))
62
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))
83
84 #endif
85
86 #endif /* _GC_H_ */