126 oop* mask_chunked_array_oop(oop obj) {
127 assert(!is_oop_masked((oop*) obj), "invariant");
128 oop* ret = (oop*) (cast_from_oop<uintptr_t>(obj) | PS_CHUNKED_ARRAY_OOP_MASK);
129 assert(is_oop_masked(ret), "invariant");
130 return ret;
131 }
132
133 oop unmask_chunked_array_oop(StarTask p) {
134 assert(is_oop_masked(p), "invariant");
135 assert(!p.is_narrow(), "chunked array oops cannot be narrow");
136 oop *chunk = (oop*)p; // cast p to oop (uses conversion operator)
137 oop ret = oop((oop*)((uintptr_t)chunk & ~PS_CHUNKED_ARRAY_OOP_MASK));
138 assert(!is_oop_masked((oop*) ret), "invariant");
139 return ret;
140 }
141
142 template <class T> void process_array_chunk_work(oop obj,
143 int start, int end);
144 void process_array_chunk(oop old);
145
146 template <class T> void push_depth(T* p) {
147 claimed_stack_depth()->push(p);
148 }
149
150 inline void promotion_trace_event(oop new_obj, oop old_obj, size_t obj_size,
151 uint age, bool tenured,
152 const PSPromotionLAB* lab);
153
154 protected:
155 static OopStarTaskQueueSet* stack_array_depth() { return _stack_array_depth; }
156 public:
157 // Static
158 static void initialize();
159
160 static void pre_scavenge();
161 static bool post_scavenge(YoungGCTracer& gc_tracer);
162
163 static PSPromotionManager* gc_thread_promotion_manager(int index);
164 static PSPromotionManager* vm_thread_promotion_manager();
165
166 static bool steal_depth(int queue_num, int* seed, StarTask& t) {
167 return stack_array_depth()->steal(queue_num, seed, t);
168 }
|
126 oop* mask_chunked_array_oop(oop obj) {
127 assert(!is_oop_masked((oop*) obj), "invariant");
128 oop* ret = (oop*) (cast_from_oop<uintptr_t>(obj) | PS_CHUNKED_ARRAY_OOP_MASK);
129 assert(is_oop_masked(ret), "invariant");
130 return ret;
131 }
132
133 oop unmask_chunked_array_oop(StarTask p) {
134 assert(is_oop_masked(p), "invariant");
135 assert(!p.is_narrow(), "chunked array oops cannot be narrow");
136 oop *chunk = (oop*)p; // cast p to oop (uses conversion operator)
137 oop ret = oop((oop*)((uintptr_t)chunk & ~PS_CHUNKED_ARRAY_OOP_MASK));
138 assert(!is_oop_masked((oop*) ret), "invariant");
139 return ret;
140 }
141
142 template <class T> void process_array_chunk_work(oop obj,
143 int start, int end);
144 void process_array_chunk(oop old);
145
146 template <class T> void push_depth(T* p);
147
148 inline void promotion_trace_event(oop new_obj, oop old_obj, size_t obj_size,
149 uint age, bool tenured,
150 const PSPromotionLAB* lab);
151
152 protected:
153 static OopStarTaskQueueSet* stack_array_depth() { return _stack_array_depth; }
154 public:
155 // Static
156 static void initialize();
157
158 static void pre_scavenge();
159 static bool post_scavenge(YoungGCTracer& gc_tracer);
160
161 static PSPromotionManager* gc_thread_promotion_manager(int index);
162 static PSPromotionManager* vm_thread_promotion_manager();
163
164 static bool steal_depth(int queue_num, int* seed, StarTask& t) {
165 return stack_array_depth()->steal(queue_num, seed, t);
166 }
|