1412 assert(frame_complete != -1, "Must be set");
1413 assert(stack_slots != -1, "Must be set");
1414 assert(vep_offset != -1, "Must be set");
1415 #endif
1416
1417 __ flush();
1418 nmethod* nm = nmethod::new_native_nmethod(method,
1419 compile_id,
1420 masm->code(),
1421 vep_offset,
1422 frame_complete,
1423 stack_slots,
1424 in_ByteSize(-1),
1425 in_ByteSize(-1),
1426 oop_maps,
1427 exception_offset);
1428 if (nm == nullptr) return nm;
1429 if (method->is_continuation_enter_intrinsic()) {
1430 ContinuationEntry::set_enter_code(nm, interpreted_entry_offset);
1431 } else if (method->is_continuation_yield_intrinsic()) {
1432 _cont_doYield_stub = nm;
1433 } else {
1434 guarantee(false, "Unknown Continuation native intrinsic");
1435 }
1436 return nm;
1437 }
1438
1439 if (method->is_method_handle_intrinsic()) {
1440 vmIntrinsics::ID iid = method->intrinsic_id();
1441 intptr_t start = (intptr_t)__ pc();
1442 int vep_offset = ((intptr_t)__ pc()) - start;
1443
1444 // First instruction must be a nop as it may need to be patched on deoptimisation
1445 __ nop();
1446 gen_special_dispatch(masm,
1447 method,
1448 in_sig_bt,
1449 in_regs);
1450 int frame_complete = ((intptr_t)__ pc()) - start; // not complete, period
1451 __ flush();
1452 int stack_slots = SharedRuntime::out_preserve_stack_slots(); // no out slots at all, actually
|
1412 assert(frame_complete != -1, "Must be set");
1413 assert(stack_slots != -1, "Must be set");
1414 assert(vep_offset != -1, "Must be set");
1415 #endif
1416
1417 __ flush();
1418 nmethod* nm = nmethod::new_native_nmethod(method,
1419 compile_id,
1420 masm->code(),
1421 vep_offset,
1422 frame_complete,
1423 stack_slots,
1424 in_ByteSize(-1),
1425 in_ByteSize(-1),
1426 oop_maps,
1427 exception_offset);
1428 if (nm == nullptr) return nm;
1429 if (method->is_continuation_enter_intrinsic()) {
1430 ContinuationEntry::set_enter_code(nm, interpreted_entry_offset);
1431 } else if (method->is_continuation_yield_intrinsic()) {
1432 ContinuationEntry::set_yield_code(nm);
1433 } else {
1434 guarantee(false, "Unknown Continuation native intrinsic");
1435 }
1436 return nm;
1437 }
1438
1439 if (method->is_method_handle_intrinsic()) {
1440 vmIntrinsics::ID iid = method->intrinsic_id();
1441 intptr_t start = (intptr_t)__ pc();
1442 int vep_offset = ((intptr_t)__ pc()) - start;
1443
1444 // First instruction must be a nop as it may need to be patched on deoptimisation
1445 __ nop();
1446 gen_special_dispatch(masm,
1447 method,
1448 in_sig_bt,
1449 in_regs);
1450 int frame_complete = ((intptr_t)__ pc()) - start; // not complete, period
1451 __ flush();
1452 int stack_slots = SharedRuntime::out_preserve_stack_slots(); // no out slots at all, actually
|