972 __ bind(missed); |
972 __ bind(missed); |
973 __ jump(RuntimeAddress(SharedRuntime::get_ic_miss_stub())); |
973 __ jump(RuntimeAddress(SharedRuntime::get_ic_miss_stub())); |
974 } |
974 } |
975 |
975 |
976 address c2i_entry = __ pc(); |
976 address c2i_entry = __ pc(); |
|
977 |
|
978 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); |
|
979 bs->c2i_entry_barrier(masm); |
977 |
980 |
978 gen_c2i_adapter(masm, total_args_passed, comp_args_on_stack, sig_bt, regs, skip_fixup); |
981 gen_c2i_adapter(masm, total_args_passed, comp_args_on_stack, sig_bt, regs, skip_fixup); |
979 |
982 |
980 __ flush(); |
983 __ flush(); |
981 return AdapterHandlerLibrary::new_entry(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry); |
984 return AdapterHandlerLibrary::new_entry(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry); |
1884 // Generate a new frame for the wrapper. |
1887 // Generate a new frame for the wrapper. |
1885 __ enter(); |
1888 __ enter(); |
1886 // -2 because return address is already present and so is saved rbp |
1889 // -2 because return address is already present and so is saved rbp |
1887 __ subptr(rsp, stack_size - 2*wordSize); |
1890 __ subptr(rsp, stack_size - 2*wordSize); |
1888 |
1891 |
|
1892 |
|
1893 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); |
|
1894 bs->nmethod_entry_barrier(masm); |
|
1895 |
1889 // Frame is now completed as far as size and linkage. |
1896 // Frame is now completed as far as size and linkage. |
1890 int frame_complete = ((intptr_t)__ pc()) - start; |
1897 int frame_complete = ((intptr_t)__ pc()) - start; |
1891 |
1898 |
1892 if (UseRTMLocking) { |
1899 if (UseRTMLocking) { |
1893 // Abort RTM transaction before calling JNI |
1900 // Abort RTM transaction before calling JNI |
1919 |
1926 |
1920 // We use rdi as a thread pointer because it is callee save and |
1927 // We use rdi as a thread pointer because it is callee save and |
1921 // if we load it once it is usable thru the entire wrapper |
1928 // if we load it once it is usable thru the entire wrapper |
1922 const Register thread = rdi; |
1929 const Register thread = rdi; |
1923 |
1930 |
1924 // We use rsi as the oop handle for the receiver/klass |
1931 // We use rsi as the oop handle for the receiver/klass |
1925 // It is callee save so it survives the call to native |
1932 // It is callee save so it survives the call to native |
1926 |
1933 |
1927 const Register oop_handle_reg = rsi; |
1934 const Register oop_handle_reg = rsi; |
1928 |
1935 |
1929 __ get_thread(thread); |
1936 __ get_thread(thread); |
1930 |
1937 |
1931 if (is_critical_native && !Universe::heap()->supports_object_pinning()) { |
1938 if (is_critical_native && !Universe::heap()->supports_object_pinning()) { |
1932 check_needs_gc_for_critical_native(masm, thread, stack_slots, total_c_args, total_in_args, |
1939 check_needs_gc_for_critical_native(masm, thread, stack_slots, total_c_args, total_in_args, |
1933 oop_handle_offset, oop_maps, in_regs, in_sig_bt); |
1940 oop_handle_offset, oop_maps, in_regs, in_sig_bt); |
1934 } |
1941 } |