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

src/cpu/sparc/vm/c1_Runtime1_sparc.cpp

Print this page




 595       }
 596       break;
 597 
 598     case new_multi_array_id:
 599       { // O0: klass
 600         // O1: rank
 601         // O2: address of 1st dimension
 602         __ set_info("new_multi_array", dont_gc_arguments);
 603         oop_maps = generate_stub_call(sasm, I0, CAST_FROM_FN_PTR(address, new_multi_array), I0, I1, I2);
 604         // I0 -> O0: new multi array
 605       }
 606       break;
 607 
 608     case register_finalizer_id:
 609       {
 610         __ set_info("register_finalizer", dont_gc_arguments);
 611 
 612         // load the klass and check the has finalizer flag
 613         Label register_finalizer;
 614         Register t = O1;
 615         __ ld_ptr(O0, oopDesc::klass_offset_in_bytes(), t);
 616         __ ld(t, Klass::access_flags_offset_in_bytes() + sizeof(oopDesc), t);
 617         __ set(JVM_ACC_HAS_FINALIZER, G3);
 618         __ andcc(G3, t, G0);
 619         __ br(Assembler::notZero, false, Assembler::pt, register_finalizer);
 620         __ delayed()->nop();
 621 
 622         // do a leaf return
 623         __ retl();
 624         __ delayed()->nop();
 625 
 626         __ bind(register_finalizer);
 627         OopMap* oop_map = save_live_registers(sasm);
 628         int call_offset = __ call_RT(noreg, noreg,
 629                                      CAST_FROM_FN_PTR(address, SharedRuntime::register_finalizer), I0);
 630         oop_maps = new OopMapSet();
 631         oop_maps->add_gc_map(call_offset, oop_map);
 632 
 633         // Now restore all the live registers
 634         restore_live_registers(sasm);
 635 




 595       }
 596       break;
 597 
 598     case new_multi_array_id:
 599       { // O0: klass
 600         // O1: rank
 601         // O2: address of 1st dimension
 602         __ set_info("new_multi_array", dont_gc_arguments);
 603         oop_maps = generate_stub_call(sasm, I0, CAST_FROM_FN_PTR(address, new_multi_array), I0, I1, I2);
 604         // I0 -> O0: new multi array
 605       }
 606       break;
 607 
 608     case register_finalizer_id:
 609       {
 610         __ set_info("register_finalizer", dont_gc_arguments);
 611 
 612         // load the klass and check the has finalizer flag
 613         Label register_finalizer;
 614         Register t = O1;
 615         __ load_klass(O0, t);
 616         __ ld(t, Klass::access_flags_offset_in_bytes() + sizeof(oopDesc), t);
 617         __ set(JVM_ACC_HAS_FINALIZER, G3);
 618         __ andcc(G3, t, G0);
 619         __ br(Assembler::notZero, false, Assembler::pt, register_finalizer);
 620         __ delayed()->nop();
 621 
 622         // do a leaf return
 623         __ retl();
 624         __ delayed()->nop();
 625 
 626         __ bind(register_finalizer);
 627         OopMap* oop_map = save_live_registers(sasm);
 628         int call_offset = __ call_RT(noreg, noreg,
 629                                      CAST_FROM_FN_PTR(address, SharedRuntime::register_finalizer), I0);
 630         oop_maps = new OopMapSet();
 631         oop_maps->add_gc_map(call_offset, oop_map);
 632 
 633         // Now restore all the live registers
 634         restore_live_registers(sasm);
 635 


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