Mercurial > hg > graal-jvmci-8
diff 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 |
line wrap: on
line diff
--- a/src/cpu/x86/vm/c1_Runtime1_x86.cpp Wed Oct 26 06:08:56 2011 -0700 +++ b/src/cpu/x86/vm/c1_Runtime1_x86.cpp Thu Oct 27 04:43:37 2011 -0700 @@ -1447,7 +1447,22 @@ oop_maps = new OopMapSet(); oop_maps->add_gc_map(call_offset, map); restore_live_registers(sasm, save_fpu_registers); + } + break; + case deoptimize_id: + { + StubFrame f(sasm, "deoptimize", dont_gc_arguments); + const int num_rt_args = 1; // thread + OopMap* oop_map = save_live_registers(sasm, num_rt_args); + int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, deoptimize)); + oop_maps = new OopMapSet(); + oop_maps->add_gc_map(call_offset, oop_map); + restore_live_registers(sasm); + DeoptimizationBlob* deopt_blob = SharedRuntime::deopt_blob(); + assert(deopt_blob != NULL, "deoptimization blob must have been created"); + __ leave(); + __ jump(RuntimeAddress(deopt_blob->unpack_with_reexecution())); } break;