Mercurial > hg > graal-jvmci-8
comparison src/share/vm/runtime/stubRoutines.cpp @ 1245:6484c4ee11cb
6904516: More object array barrier fixes, following up on 6906727
Summary: Fixed missing pre-barrier calls for G1, modified C1 to call pre- and correct post-barrier interfaces, deleted obsolete interface, (temporarily) disabled redundant deferred barrier in BacktraceBuilder.
Reviewed-by: coleenp, jmasa, kvn, never
author | ysr |
---|---|
date | Mon, 01 Feb 2010 17:29:01 -0800 |
parents | ddb7834449d0 |
children | f03d0a26bf83 |
comparison
equal
deleted
inserted
replaced
1244:745c853ee57f | 1245:6484c4ee11cb |
---|---|
194 | 194 |
195 // | 195 // |
196 // Default versions of arraycopy functions | 196 // Default versions of arraycopy functions |
197 // | 197 // |
198 | 198 |
199 static void gen_arraycopy_barrier_pre(oop* dest, size_t count) { | |
200 assert(count != 0, "count should be non-zero"); | |
201 assert(count <= (size_t)max_intx, "count too large"); | |
202 BarrierSet* bs = Universe::heap()->barrier_set(); | |
203 assert(bs->has_write_ref_array_pre_opt(), "Must have pre-barrier opt"); | |
204 bs->write_ref_array_pre(dest, (int)count); | |
205 } | |
206 | |
199 static void gen_arraycopy_barrier(oop* dest, size_t count) { | 207 static void gen_arraycopy_barrier(oop* dest, size_t count) { |
200 assert(count != 0, "count should be non-zero"); | 208 assert(count != 0, "count should be non-zero"); |
201 BarrierSet* bs = Universe::heap()->barrier_set(); | 209 BarrierSet* bs = Universe::heap()->barrier_set(); |
202 assert(bs->has_write_ref_array_opt(), "Barrier set must have ref array opt"); | 210 assert(bs->has_write_ref_array_opt(), "Barrier set must have ref array opt"); |
203 bs->write_ref_array(MemRegion((HeapWord*)dest, (HeapWord*)(dest + count))); | 211 bs->write_ref_array((HeapWord*)dest, count); |
204 } | 212 } |
205 | 213 |
206 JRT_LEAF(void, StubRoutines::jbyte_copy(jbyte* src, jbyte* dest, size_t count)) | 214 JRT_LEAF(void, StubRoutines::jbyte_copy(jbyte* src, jbyte* dest, size_t count)) |
207 #ifndef PRODUCT | 215 #ifndef PRODUCT |
208 SharedRuntime::_jbyte_array_copy_ctr++; // Slow-path byte array copy | 216 SharedRuntime::_jbyte_array_copy_ctr++; // Slow-path byte array copy |
238 JRT_LEAF(void, StubRoutines::oop_copy(oop* src, oop* dest, size_t count)) | 246 JRT_LEAF(void, StubRoutines::oop_copy(oop* src, oop* dest, size_t count)) |
239 #ifndef PRODUCT | 247 #ifndef PRODUCT |
240 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy | 248 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy |
241 #endif // !PRODUCT | 249 #endif // !PRODUCT |
242 assert(count != 0, "count should be non-zero"); | 250 assert(count != 0, "count should be non-zero"); |
251 gen_arraycopy_barrier_pre(dest, count); | |
243 Copy::conjoint_oops_atomic(src, dest, count); | 252 Copy::conjoint_oops_atomic(src, dest, count); |
244 gen_arraycopy_barrier(dest, count); | 253 gen_arraycopy_barrier(dest, count); |
245 JRT_END | 254 JRT_END |
246 | 255 |
247 JRT_LEAF(void, StubRoutines::arrayof_jbyte_copy(HeapWord* src, HeapWord* dest, size_t count)) | 256 JRT_LEAF(void, StubRoutines::arrayof_jbyte_copy(HeapWord* src, HeapWord* dest, size_t count)) |
279 JRT_LEAF(void, StubRoutines::arrayof_oop_copy(HeapWord* src, HeapWord* dest, size_t count)) | 288 JRT_LEAF(void, StubRoutines::arrayof_oop_copy(HeapWord* src, HeapWord* dest, size_t count)) |
280 #ifndef PRODUCT | 289 #ifndef PRODUCT |
281 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy | 290 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy |
282 #endif // !PRODUCT | 291 #endif // !PRODUCT |
283 assert(count != 0, "count should be non-zero"); | 292 assert(count != 0, "count should be non-zero"); |
293 gen_arraycopy_barrier_pre((oop *) dest, count); | |
284 Copy::arrayof_conjoint_oops(src, dest, count); | 294 Copy::arrayof_conjoint_oops(src, dest, count); |
285 gen_arraycopy_barrier((oop *) dest, count); | 295 gen_arraycopy_barrier((oop *) dest, count); |
286 JRT_END | 296 JRT_END |