1292 assert(frame_complete != -1, "Must be set");
1293 assert(stack_slots != -1, "Must be set");
1294 assert(vep_offset != -1, "Must be set");
1295 #endif
1296
1297 __ flush();
1298 nmethod* nm = nmethod::new_native_nmethod(method,
1299 compile_id,
1300 masm->code(),
1301 vep_offset,
1302 frame_complete,
1303 stack_slots,
1304 in_ByteSize(-1),
1305 in_ByteSize(-1),
1306 oop_maps,
1307 exception_offset);
1308 if (nm == nullptr) return nm;
1309 if (method->is_continuation_enter_intrinsic()) {
1310 ContinuationEntry::set_enter_code(nm, interpreted_entry_offset);
1311 } else if (method->is_continuation_yield_intrinsic()) {
1312 _cont_doYield_stub = nm;
1313 } else {
1314 guarantee(false, "Unknown Continuation native intrinsic");
1315 }
1316 return nm;
1317 }
1318
1319 if (method->is_method_handle_intrinsic()) {
1320 vmIntrinsics::ID iid = method->intrinsic_id();
1321 intptr_t start = (intptr_t)__ pc();
1322 int vep_offset = ((intptr_t)__ pc()) - start;
1323
1324 // First instruction must be a nop as it may need to be patched on deoptimisation
1325 {
1326 Assembler::IncompressibleRegion ir(masm); // keep the nop as 4 bytes for patching.
1327 MacroAssembler::assert_alignment(__ pc());
1328 __ nop(); // 4 bytes
1329 }
1330 gen_special_dispatch(masm,
1331 method,
1332 in_sig_bt,
|
1292 assert(frame_complete != -1, "Must be set");
1293 assert(stack_slots != -1, "Must be set");
1294 assert(vep_offset != -1, "Must be set");
1295 #endif
1296
1297 __ flush();
1298 nmethod* nm = nmethod::new_native_nmethod(method,
1299 compile_id,
1300 masm->code(),
1301 vep_offset,
1302 frame_complete,
1303 stack_slots,
1304 in_ByteSize(-1),
1305 in_ByteSize(-1),
1306 oop_maps,
1307 exception_offset);
1308 if (nm == nullptr) return nm;
1309 if (method->is_continuation_enter_intrinsic()) {
1310 ContinuationEntry::set_enter_code(nm, interpreted_entry_offset);
1311 } else if (method->is_continuation_yield_intrinsic()) {
1312 ContinuationEntry::set_yield_code(nm);
1313 } else {
1314 guarantee(false, "Unknown Continuation native intrinsic");
1315 }
1316 return nm;
1317 }
1318
1319 if (method->is_method_handle_intrinsic()) {
1320 vmIntrinsics::ID iid = method->intrinsic_id();
1321 intptr_t start = (intptr_t)__ pc();
1322 int vep_offset = ((intptr_t)__ pc()) - start;
1323
1324 // First instruction must be a nop as it may need to be patched on deoptimisation
1325 {
1326 Assembler::IncompressibleRegion ir(masm); // keep the nop as 4 bytes for patching.
1327 MacroAssembler::assert_alignment(__ pc());
1328 __ nop(); // 4 bytes
1329 }
1330 gen_special_dispatch(masm,
1331 method,
1332 in_sig_bt,
|