1379 assert(frame_complete != -1, "Must be set");
1380 assert(stack_slots != -1, "Must be set");
1381 assert(vep_offset != -1, "Must be set");
1382 #endif
1383
1384 __ flush();
1385 nmethod* nm = nmethod::new_native_nmethod(method,
1386 compile_id,
1387 masm->code(),
1388 vep_offset,
1389 frame_complete,
1390 stack_slots,
1391 in_ByteSize(-1),
1392 in_ByteSize(-1),
1393 oop_maps,
1394 exception_offset);
1395 if (nm == nullptr) return nm;
1396 if (method->is_continuation_enter_intrinsic()) {
1397 ContinuationEntry::set_enter_code(nm, interpreted_entry_offset);
1398 } else if (method->is_continuation_yield_intrinsic()) {
1399 _cont_doYield_stub = nm;
1400 } else {
1401 guarantee(false, "Unknown Continuation native intrinsic");
1402 }
1403 return nm;
1404 }
1405
1406 if (method->is_method_handle_intrinsic()) {
1407 vmIntrinsics::ID iid = method->intrinsic_id();
1408 intptr_t start = (intptr_t)__ pc();
1409 int vep_offset = ((intptr_t)__ pc()) - start;
1410
1411 // First instruction must be a nop as it may need to be patched on deoptimisation
1412 __ nop();
1413 gen_special_dispatch(masm,
1414 method,
1415 in_sig_bt,
1416 in_regs);
1417 int frame_complete = ((intptr_t)__ pc()) - start; // not complete, period
1418 __ flush();
1419 int stack_slots = SharedRuntime::out_preserve_stack_slots(); // no out slots at all, actually
|
1379 assert(frame_complete != -1, "Must be set");
1380 assert(stack_slots != -1, "Must be set");
1381 assert(vep_offset != -1, "Must be set");
1382 #endif
1383
1384 __ flush();
1385 nmethod* nm = nmethod::new_native_nmethod(method,
1386 compile_id,
1387 masm->code(),
1388 vep_offset,
1389 frame_complete,
1390 stack_slots,
1391 in_ByteSize(-1),
1392 in_ByteSize(-1),
1393 oop_maps,
1394 exception_offset);
1395 if (nm == nullptr) return nm;
1396 if (method->is_continuation_enter_intrinsic()) {
1397 ContinuationEntry::set_enter_code(nm, interpreted_entry_offset);
1398 } else if (method->is_continuation_yield_intrinsic()) {
1399 ContinuationEntry::set_yield_code(nm);
1400 } else {
1401 guarantee(false, "Unknown Continuation native intrinsic");
1402 }
1403 return nm;
1404 }
1405
1406 if (method->is_method_handle_intrinsic()) {
1407 vmIntrinsics::ID iid = method->intrinsic_id();
1408 intptr_t start = (intptr_t)__ pc();
1409 int vep_offset = ((intptr_t)__ pc()) - start;
1410
1411 // First instruction must be a nop as it may need to be patched on deoptimisation
1412 __ nop();
1413 gen_special_dispatch(masm,
1414 method,
1415 in_sig_bt,
1416 in_regs);
1417 int frame_complete = ((intptr_t)__ pc()) - start; // not complete, period
1418 __ flush();
1419 int stack_slots = SharedRuntime::out_preserve_stack_slots(); // no out slots at all, actually
|