< prev index next >

src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp

Print this page




 912   guarantee(referent_offset > 0, "referent offset not initialized");
 913 
 914   if (UseG1GC || UseShenandoahGC) {
 915     Label slow_path;
 916     const Register local_0 = c_rarg0;
 917     // Check if local 0 != NULL
 918     // If the receiver is null then it is OK to jump to the slow path.
 919     __ ldr(local_0, Address(esp, 0));
 920     __ cbz(local_0, slow_path);
 921 
 922     oopDesc::bs()->interpreter_read_barrier_not_null(_masm, local_0);
 923 
 924     // Load the value of the referent field.
 925     const Address field_address(local_0, referent_offset);
 926     __ load_heap_oop(local_0, field_address);
 927 
 928     __ mov(r19, r13);   // Move senderSP to a callee-saved register
 929 
 930     // Generate the G1 pre-barrier code to log the value of
 931     // the referent field in an SATB buffer.

 932     __ keep_alive_barrier(local_0 /* pre_val */,
 933                           rthread /* thread */,
 934                           rscratch2 /* tmp */);

 935     // areturn
 936     __ andr(sp, r19, -16);  // done with stack
 937     __ ret(lr);
 938 
 939     // generate a vanilla interpreter entry as the slow path
 940     __ bind(slow_path);
 941     __ jump_to_entry(Interpreter::entry_for_kind(Interpreter::zerolocals));
 942     return entry;
 943   }
 944 #endif // INCLUDE_ALL_GCS
 945 
 946   // If G1 is not enabled then attempt to go through the accessor entry point
 947   // Reference.get is an accessor
 948   return NULL;
 949 }
 950 
 951 /**
 952  * Method entry for static native methods:
 953  *   int java.util.zip.CRC32.update(int crc, int b)
 954  */




 912   guarantee(referent_offset > 0, "referent offset not initialized");
 913 
 914   if (UseG1GC || UseShenandoahGC) {
 915     Label slow_path;
 916     const Register local_0 = c_rarg0;
 917     // Check if local 0 != NULL
 918     // If the receiver is null then it is OK to jump to the slow path.
 919     __ ldr(local_0, Address(esp, 0));
 920     __ cbz(local_0, slow_path);
 921 
 922     oopDesc::bs()->interpreter_read_barrier_not_null(_masm, local_0);
 923 
 924     // Load the value of the referent field.
 925     const Address field_address(local_0, referent_offset);
 926     __ load_heap_oop(local_0, field_address);
 927 
 928     __ mov(r19, r13);   // Move senderSP to a callee-saved register
 929 
 930     // Generate the G1 pre-barrier code to log the value of
 931     // the referent field in an SATB buffer.
 932     __ enter(); // g1_write may call runtime
 933     __ keep_alive_barrier(local_0 /* pre_val */,
 934                           rthread /* thread */,
 935                           rscratch2 /* tmp */);
 936     __ leave();
 937     // areturn
 938     __ andr(sp, r19, -16);  // done with stack
 939     __ ret(lr);
 940 
 941     // generate a vanilla interpreter entry as the slow path
 942     __ bind(slow_path);
 943     __ jump_to_entry(Interpreter::entry_for_kind(Interpreter::zerolocals));
 944     return entry;
 945   }
 946 #endif // INCLUDE_ALL_GCS
 947 
 948   // If G1 is not enabled then attempt to go through the accessor entry point
 949   // Reference.get is an accessor
 950   return NULL;
 951 }
 952 
 953 /**
 954  * Method entry for static native methods:
 955  *   int java.util.zip.CRC32.update(int crc, int b)
 956  */


< prev index next >