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 */ |