1445 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, monitorexit), rax); |
1445 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, monitorexit), rax); |
1446 |
1446 |
1447 oop_maps = new OopMapSet(); |
1447 oop_maps = new OopMapSet(); |
1448 oop_maps->add_gc_map(call_offset, map); |
1448 oop_maps->add_gc_map(call_offset, map); |
1449 restore_live_registers(sasm, save_fpu_registers); |
1449 restore_live_registers(sasm, save_fpu_registers); |
1450 |
1450 } |
|
1451 break; |
|
1452 |
|
1453 case deoptimize_id: |
|
1454 { |
|
1455 StubFrame f(sasm, "deoptimize", dont_gc_arguments); |
|
1456 const int num_rt_args = 1; // thread |
|
1457 OopMap* oop_map = save_live_registers(sasm, num_rt_args); |
|
1458 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, deoptimize)); |
|
1459 oop_maps = new OopMapSet(); |
|
1460 oop_maps->add_gc_map(call_offset, oop_map); |
|
1461 restore_live_registers(sasm); |
|
1462 DeoptimizationBlob* deopt_blob = SharedRuntime::deopt_blob(); |
|
1463 assert(deopt_blob != NULL, "deoptimization blob must have been created"); |
|
1464 __ leave(); |
|
1465 __ jump(RuntimeAddress(deopt_blob->unpack_with_reexecution())); |
1451 } |
1466 } |
1452 break; |
1467 break; |
1453 |
1468 |
1454 case access_field_patching_id: |
1469 case access_field_patching_id: |
1455 { StubFrame f(sasm, "access_field_patching", dont_gc_arguments); |
1470 { StubFrame f(sasm, "access_field_patching", dont_gc_arguments); |