< prev index next >

src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp

Print this page




 508   address entry = __ pc();
 509 
 510   const int referent_offset = java_lang_ref_Reference::referent_offset;
 511   guarantee(referent_offset > 0, "referent offset not initialized");
 512 
 513   Label slow_path;
 514 
 515   // Debugging not possible, so can't use __ skip_if_jvmti_mode(slow_path, GR31_SCRATCH);
 516 
 517   // In the G1 code we don't check if we need to reach a safepoint. We
 518   // continue and the thread will safepoint at the next bytecode dispatch.
 519 
 520   // If the receiver is null then it is OK to jump to the slow path.
 521   __ ld(R3_RET, Interpreter::stackElementSize, R15_esp); // get receiver
 522 
 523   // Check if receiver == NULL and go the slow path.
 524   __ cmpdi(CCR0, R3_RET, 0);
 525   __ beq(CCR0, slow_path);
 526 
 527   // Load the value of the referent field.
 528   BarrierSetAssembler *bs = Universe::heap()->barrier_set()->barrier_set_assembler();
 529   bs->load_at(_masm, IN_HEAP | ON_WEAK_OOP_REF, T_OBJECT,
 530                     R3_RET, referent_offset, R3_RET,
 531                     /* non-volatile temp */ R31, R11_scratch1, true);
 532 
 533   // Generate the G1 pre-barrier code to log the value of
 534   // the referent field in an SATB buffer. Note with
 535   // these parameters the pre-barrier does not generate
 536   // the load of the previous value.
 537 
 538   // Restore caller sp for c2i case.
 539 #ifdef ASSERT
 540   __ ld(R9_ARG7, 0, R1_SP);
 541   __ ld(R10_ARG8, 0, R21_sender_SP);
 542   __ cmpd(CCR0, R9_ARG7, R10_ARG8);
 543   __ asm_assert_eq("backlink", 0x544);
 544 #endif // ASSERT
 545   __ mr(R1_SP, R21_sender_SP); // Cut the stack back to where the caller started.
 546 
 547   __ blr();
 548 




 508   address entry = __ pc();
 509 
 510   const int referent_offset = java_lang_ref_Reference::referent_offset;
 511   guarantee(referent_offset > 0, "referent offset not initialized");
 512 
 513   Label slow_path;
 514 
 515   // Debugging not possible, so can't use __ skip_if_jvmti_mode(slow_path, GR31_SCRATCH);
 516 
 517   // In the G1 code we don't check if we need to reach a safepoint. We
 518   // continue and the thread will safepoint at the next bytecode dispatch.
 519 
 520   // If the receiver is null then it is OK to jump to the slow path.
 521   __ ld(R3_RET, Interpreter::stackElementSize, R15_esp); // get receiver
 522 
 523   // Check if receiver == NULL and go the slow path.
 524   __ cmpdi(CCR0, R3_RET, 0);
 525   __ beq(CCR0, slow_path);
 526 
 527   // Load the value of the referent field.
 528   BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler();
 529   bs->load_at(_masm, IN_HEAP | ON_WEAK_OOP_REF, T_OBJECT,
 530                     R3_RET, referent_offset, R3_RET,
 531                     /* non-volatile temp */ R31, R11_scratch1, true);
 532 
 533   // Generate the G1 pre-barrier code to log the value of
 534   // the referent field in an SATB buffer. Note with
 535   // these parameters the pre-barrier does not generate
 536   // the load of the previous value.
 537 
 538   // Restore caller sp for c2i case.
 539 #ifdef ASSERT
 540   __ ld(R9_ARG7, 0, R1_SP);
 541   __ ld(R10_ARG8, 0, R21_sender_SP);
 542   __ cmpd(CCR0, R9_ARG7, R10_ARG8);
 543   __ asm_assert_eq("backlink", 0x544);
 544 #endif // ASSERT
 545   __ mr(R1_SP, R21_sender_SP); // Cut the stack back to where the caller started.
 546 
 547   __ blr();
 548 


< prev index next >