318 // these parameters the pre-barrier does not generate
319 // the load of the previous value
320 // We only reach here if value is not null.
321 g1_write_barrier_pre(masm, decorators | OOP_NOT_NULL, noreg /* obj */, (intptr_t)0, dst /* pre_val */,
322 tmp1, tmp2, needs_frame);
323 }
324 __ bind(done);
325 }
326
327 void G1BarrierSetAssembler::resolve_jobject(MacroAssembler* masm, Register value, Register tmp1, Register tmp2, bool needs_frame) {
328 Label done, not_weak;
329 __ cmpdi(CCR0, value, 0);
330 __ beq(CCR0, done); // Use NULL as-is.
331
332 __ clrrdi(tmp1, value, JNIHandles::weak_tag_size);
333 __ andi_(tmp2, value, JNIHandles::weak_tag_mask);
334 __ ld(value, 0, tmp1); // Resolve (untagged) jobject.
335
336 __ beq(CCR0, not_weak); // Test for jweak tag.
337 __ verify_oop(value);
338 g1_write_barrier_pre(masm, IN_ROOT | ON_PHANTOM_OOP_REF,
339 noreg, noreg, value,
340 tmp1, tmp2, needs_frame);
341 __ bind(not_weak);
342 __ verify_oop(value);
343 __ bind(done);
344 }
345
346 #ifdef COMPILER1
347
348 #undef __
349 #define __ ce->masm()->
350
351 void G1BarrierSetAssembler::gen_pre_barrier_stub(LIR_Assembler* ce, G1PreBarrierStub* stub) {
352 G1BarrierSetC1* bs = (G1BarrierSetC1*)BarrierSet::barrier_set()->barrier_set_c1();
353 // At this point we know that marking is in progress.
354 // If do_load() is true then we have to emit the
355 // load of the previous value; otherwise it has already
356 // been loaded into _pre_val.
357
358 __ bind(*stub->entry());
|
318 // these parameters the pre-barrier does not generate
319 // the load of the previous value
320 // We only reach here if value is not null.
321 g1_write_barrier_pre(masm, decorators | OOP_NOT_NULL, noreg /* obj */, (intptr_t)0, dst /* pre_val */,
322 tmp1, tmp2, needs_frame);
323 }
324 __ bind(done);
325 }
326
327 void G1BarrierSetAssembler::resolve_jobject(MacroAssembler* masm, Register value, Register tmp1, Register tmp2, bool needs_frame) {
328 Label done, not_weak;
329 __ cmpdi(CCR0, value, 0);
330 __ beq(CCR0, done); // Use NULL as-is.
331
332 __ clrrdi(tmp1, value, JNIHandles::weak_tag_size);
333 __ andi_(tmp2, value, JNIHandles::weak_tag_mask);
334 __ ld(value, 0, tmp1); // Resolve (untagged) jobject.
335
336 __ beq(CCR0, not_weak); // Test for jweak tag.
337 __ verify_oop(value);
338 g1_write_barrier_pre(masm, IN_NATIVE | ON_PHANTOM_OOP_REF,
339 noreg, noreg, value,
340 tmp1, tmp2, needs_frame);
341 __ bind(not_weak);
342 __ verify_oop(value);
343 __ bind(done);
344 }
345
346 #ifdef COMPILER1
347
348 #undef __
349 #define __ ce->masm()->
350
351 void G1BarrierSetAssembler::gen_pre_barrier_stub(LIR_Assembler* ce, G1PreBarrierStub* stub) {
352 G1BarrierSetC1* bs = (G1BarrierSetC1*)BarrierSet::barrier_set()->barrier_set_c1();
353 // At this point we know that marking is in progress.
354 // If do_load() is true then we have to emit the
355 // load of the previous value; otherwise it has already
356 // been loaded into _pre_val.
357
358 __ bind(*stub->entry());
|