equal
deleted
inserted
replaced
1275 // entry: c2i |
1275 // entry: c2i |
1276 |
1276 |
1277 c2i_entry = __ pc(); |
1277 c2i_entry = __ pc(); |
1278 |
1278 |
1279 // Class initialization barrier for static methods |
1279 // Class initialization barrier for static methods |
|
1280 address c2i_no_clinit_check_entry = NULL; |
1280 if (VM_Version::supports_fast_class_init_checks()) { |
1281 if (VM_Version::supports_fast_class_init_checks()) { |
1281 Label L_skip_barrier; |
1282 Label L_skip_barrier; |
1282 |
1283 |
1283 { // Bypass the barrier for non-static methods |
1284 { // Bypass the barrier for non-static methods |
1284 __ lwz(R0, in_bytes(Method::access_flags_offset()), R19_method); |
1285 __ lwz(R0, in_bytes(Method::access_flags_offset()), R19_method); |
1293 __ load_const_optimized(klass, SharedRuntime::get_handle_wrong_method_stub(), R0); |
1294 __ load_const_optimized(klass, SharedRuntime::get_handle_wrong_method_stub(), R0); |
1294 __ mtctr(klass); |
1295 __ mtctr(klass); |
1295 __ bctr(); |
1296 __ bctr(); |
1296 |
1297 |
1297 __ bind(L_skip_barrier); |
1298 __ bind(L_skip_barrier); |
|
1299 c2i_no_clinit_check_entry = __ pc(); |
1298 } |
1300 } |
1299 |
1301 |
1300 gen_c2i_adapter(masm, total_args_passed, comp_args_on_stack, sig_bt, regs, call_interpreter, ientry); |
1302 gen_c2i_adapter(masm, total_args_passed, comp_args_on_stack, sig_bt, regs, call_interpreter, ientry); |
1301 |
1303 |
1302 return AdapterHandlerLibrary::new_entry(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry); |
1304 return AdapterHandlerLibrary::new_entry(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry, c2i_no_clinit_check_entry); |
1303 } |
1305 } |
1304 |
1306 |
1305 #ifdef COMPILER2 |
1307 #ifdef COMPILER2 |
1306 // An oop arg. Must pass a handle not the oop itself. |
1308 // An oop arg. Must pass a handle not the oop itself. |
1307 static void object_move(MacroAssembler* masm, |
1309 static void object_move(MacroAssembler* masm, |