< prev index next >

src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp

Print this page




 917   //
 918   // rmethod: Method*
 919   // r13: senderSP must preserve for slow path, set SP to it on fast path
 920 
 921   address entry = __ pc();
 922 
 923   const int referent_offset = java_lang_ref_Reference::referent_offset;
 924   guarantee(referent_offset > 0, "referent offset not initialized");
 925 
 926   Label slow_path;
 927   const Register local_0 = c_rarg0;
 928   // Check if local 0 != NULL
 929   // If the receiver is null then it is OK to jump to the slow path.
 930   __ ldr(local_0, Address(esp, 0));
 931   __ cbz(local_0, slow_path);
 932 
 933   __ mov(r19, r13);   // Move senderSP to a callee-saved register
 934 
 935   // Load the value of the referent field.
 936   const Address field_address(local_0, referent_offset);
 937   BarrierSetAssembler *bs = Universe::heap()->barrier_set()->barrier_set_assembler();
 938   bs->load_at(_masm, IN_HEAP | ON_WEAK_OOP_REF, T_OBJECT, local_0, field_address, /*tmp1*/ rscratch2, /*tmp2*/ rscratch1);
 939 
 940   // areturn
 941   __ andr(sp, r19, -16);  // done with stack
 942   __ ret(lr);
 943 
 944   // generate a vanilla interpreter entry as the slow path
 945   __ bind(slow_path);
 946   __ jump_to_entry(Interpreter::entry_for_kind(Interpreter::zerolocals));
 947   return entry;
 948 
 949 }
 950 
 951 /**
 952  * Method entry for static native methods:
 953  *   int java.util.zip.CRC32.update(int crc, int b)
 954  */
 955 address TemplateInterpreterGenerator::generate_CRC32_update_entry() {
 956   if (UseCRC32Intrinsics) {
 957     address entry = __ pc();




 917   //
 918   // rmethod: Method*
 919   // r13: senderSP must preserve for slow path, set SP to it on fast path
 920 
 921   address entry = __ pc();
 922 
 923   const int referent_offset = java_lang_ref_Reference::referent_offset;
 924   guarantee(referent_offset > 0, "referent offset not initialized");
 925 
 926   Label slow_path;
 927   const Register local_0 = c_rarg0;
 928   // Check if local 0 != NULL
 929   // If the receiver is null then it is OK to jump to the slow path.
 930   __ ldr(local_0, Address(esp, 0));
 931   __ cbz(local_0, slow_path);
 932 
 933   __ mov(r19, r13);   // Move senderSP to a callee-saved register
 934 
 935   // Load the value of the referent field.
 936   const Address field_address(local_0, referent_offset);
 937   BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler();
 938   bs->load_at(_masm, IN_HEAP | ON_WEAK_OOP_REF, T_OBJECT, local_0, field_address, /*tmp1*/ rscratch2, /*tmp2*/ rscratch1);
 939 
 940   // areturn
 941   __ andr(sp, r19, -16);  // done with stack
 942   __ ret(lr);
 943 
 944   // generate a vanilla interpreter entry as the slow path
 945   __ bind(slow_path);
 946   __ jump_to_entry(Interpreter::entry_for_kind(Interpreter::zerolocals));
 947   return entry;
 948 
 949 }
 950 
 951 /**
 952  * Method entry for static native methods:
 953  *   int java.util.zip.CRC32.update(int crc, int b)
 954  */
 955 address TemplateInterpreterGenerator::generate_CRC32_update_entry() {
 956   if (UseCRC32Intrinsics) {
 957     address entry = __ pc();


< prev index next >