comparison src/cpu/x86/vm/c1_Runtime1_x86.cpp @ 4048:cec1757a0134

7102657: JSR 292: C1 deoptimizes unlinked invokedynamic call sites infinitely Reviewed-by: never, bdelsart
author twisti
date Thu, 27 Oct 2011 04:43:37 -0700
parents c124e2e7463e
children 04b9a2566eec 52b5d32fbfaf 069ab3f976d3
comparison
equal deleted inserted replaced
4047:d8cb48376797 4048:cec1757a0134
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);