src/cpu/sparc/vm/c1_Runtime1_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot-comp Sdiff src/cpu/sparc/vm

src/cpu/sparc/vm/c1_Runtime1_sparc.cpp

Print this page




 326   // call the runtime patching routine, returns non-zero if nmethod got deopted.
 327   int call_offset = __ call_RT(noreg, noreg, target);
 328   OopMapSet* oop_maps = new OopMapSet();
 329   oop_maps->add_gc_map(call_offset, oop_map);
 330 
 331   // re-execute the patched instruction or, if the nmethod was deoptmized, return to the
 332   // deoptimization handler entry that will cause re-execution of the current bytecode
 333   DeoptimizationBlob* deopt_blob = SharedRuntime::deopt_blob();
 334   assert(deopt_blob != NULL, "deoptimization blob must have been created");
 335 
 336   Label no_deopt;
 337   __ tst(O0);
 338   __ brx(Assembler::equal, false, Assembler::pt, no_deopt);
 339   __ delayed()->nop();
 340 
 341   // return to the deoptimization handler entry for unpacking and rexecute
 342   // if we simply returned the we'd deopt as if any call we patched had just
 343   // returned.
 344 
 345   restore_live_registers(sasm);
 346   __ restore();
 347   __ br(Assembler::always, false, Assembler::pt, deopt_blob->unpack_with_reexecution(), relocInfo::runtime_call_type);
 348   __ delayed()->nop();
 349 
 350   __ bind(no_deopt);
 351   restore_live_registers(sasm);
 352   __ ret();
 353   __ delayed()->restore();
 354 
 355   return oop_maps;
 356 }
 357 
 358 OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
 359 
 360   OopMapSet* oop_maps = NULL;
 361   // for better readability
 362   const bool must_gc_arguments = true;
 363   const bool dont_gc_arguments = false;
 364 
 365   // stub code & info for the different stubs
 366   switch (id) {
 367     case forward_exception_id:
 368       {




 326   // call the runtime patching routine, returns non-zero if nmethod got deopted.
 327   int call_offset = __ call_RT(noreg, noreg, target);
 328   OopMapSet* oop_maps = new OopMapSet();
 329   oop_maps->add_gc_map(call_offset, oop_map);
 330 
 331   // re-execute the patched instruction or, if the nmethod was deoptmized, return to the
 332   // deoptimization handler entry that will cause re-execution of the current bytecode
 333   DeoptimizationBlob* deopt_blob = SharedRuntime::deopt_blob();
 334   assert(deopt_blob != NULL, "deoptimization blob must have been created");
 335 
 336   Label no_deopt;
 337   __ tst(O0);
 338   __ brx(Assembler::equal, false, Assembler::pt, no_deopt);
 339   __ delayed()->nop();
 340 
 341   // return to the deoptimization handler entry for unpacking and rexecute
 342   // if we simply returned the we'd deopt as if any call we patched had just
 343   // returned.
 344 
 345   restore_live_registers(sasm);
 346   AddressLiteral dest(deopt_blob->unpack_with_reexecution());
 347   __ jump_to(dest, O0);
 348   __ delayed()->restore();
 349 
 350   __ bind(no_deopt);
 351   restore_live_registers(sasm);
 352   __ ret();
 353   __ delayed()->restore();
 354 
 355   return oop_maps;
 356 }
 357 
 358 OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
 359 
 360   OopMapSet* oop_maps = NULL;
 361   // for better readability
 362   const bool must_gc_arguments = true;
 363   const bool dont_gc_arguments = false;
 364 
 365   // stub code & info for the different stubs
 366   switch (id) {
 367     case forward_exception_id:
 368       {


src/cpu/sparc/vm/c1_Runtime1_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File