< prev index next >

src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp

Print this page

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,
< prev index next >