3 * Simple always promote nursery.
5 * Copyright 2001-2003 Ximian, Inc
6 * Copyright 2003-2010 Novell, Inc.
7 * Copyright 2011 Xamarin Inc (http://www.xamarin.com)
8 * Copyright (C) 2012 Xamarin Inc
10 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
18 #include "mono/sgen/sgen-gc.h"
19 #include "mono/sgen/sgen-protocol.h"
20 #include "mono/sgen/sgen-layout-stats.h"
21 #include "mono/sgen/sgen-client.h"
22 #include "mono/utils/mono-memory-model.h"
24 static inline GCObject*
25 alloc_for_promotion (GCVTable vtable, GCObject *obj, size_t objsize, gboolean has_references)
27 total_promoted_size += objsize;
28 return major_collector.alloc_object (vtable, objsize, has_references);
32 build_fragments_get_exclude_head (void)
38 build_fragments_release_exclude_head (void)
43 build_fragments_finish (SgenFragmentAllocator *allocator)
48 prepare_to_space (char *to_space_bitmap, size_t space_bitmap_size)
53 clear_fragments (void)
58 init_nursery (SgenFragmentAllocator *allocator, char *start, char *end)
60 char *nursery_limit = sgen_nursery_start + sgen_nursery_size;
62 if (start < nursery_limit && end > nursery_limit) {
63 sgen_fragment_allocator_add (allocator, start, nursery_limit);
64 sgen_fragment_allocator_add (allocator, nursery_limit, end);
66 sgen_fragment_allocator_add (allocator, start, end);
71 /******************************************Copy/Scan functins ************************************************/
73 #define collector_pin_object(obj, queue) sgen_pin_object (obj, queue);
74 #define COLLECTOR_SERIAL_ALLOC_FOR_PROMOTION alloc_for_promotion
76 #define COPY_OR_MARK_PARALLEL
77 #include "sgen-copy-object.h"
79 #define SGEN_SIMPLE_NURSERY
81 #include "sgen-minor-copy-object.h"
82 #include "sgen-minor-scan-object.h"
85 fill_serial_ops (SgenObjectOperations *ops)
87 ops->copy_or_mark_object = SERIAL_COPY_OBJECT;
88 FILL_MINOR_COLLECTOR_SCAN_OBJECT (ops);
91 #define SGEN_SIMPLE_PAR_NURSERY
93 #include "sgen-minor-copy-object.h"
94 #include "sgen-minor-scan-object.h"
97 fill_parallel_ops (SgenObjectOperations *ops)
99 ops->copy_or_mark_object = SERIAL_COPY_OBJECT;
100 FILL_MINOR_COLLECTOR_SCAN_OBJECT (ops);
103 #undef SGEN_SIMPLE_PAR_NURSERY
104 #define SGEN_CONCURRENT_MAJOR
106 #include "sgen-minor-copy-object.h"
107 #include "sgen-minor-scan-object.h"
110 fill_serial_with_concurrent_major_ops (SgenObjectOperations *ops)
112 ops->copy_or_mark_object = SERIAL_COPY_OBJECT;
113 FILL_MINOR_COLLECTOR_SCAN_OBJECT (ops);
117 sgen_simple_nursery_init (SgenMinorCollector *collector, gboolean parallel)
119 collector->is_split = FALSE;
120 collector->is_parallel = parallel;
122 collector->alloc_for_promotion = alloc_for_promotion;
124 collector->prepare_to_space = prepare_to_space;
125 collector->clear_fragments = clear_fragments;
126 collector->build_fragments_get_exclude_head = build_fragments_get_exclude_head;
127 collector->build_fragments_release_exclude_head = build_fragments_release_exclude_head;
128 collector->build_fragments_finish = build_fragments_finish;
129 collector->init_nursery = init_nursery;
131 fill_serial_ops (&collector->serial_ops);
132 fill_serial_with_concurrent_major_ops (&collector->serial_ops_with_concurrent_major);
133 fill_parallel_ops (&collector->parallel_ops);