< prev index next >

src/hotspot/cpu/ppc/c1_Runtime1_ppc.cpp

Print this page

592       { // Support for uint StubRoutine::partial_subtype_check( Klass sub, Klass super );
593         const Register sub_klass = R5,
594                        super_klass = R4,
595                        temp1_reg = R6,
596                        temp2_reg = R0;
597         __ check_klass_subtype_slow_path(sub_klass, super_klass, temp1_reg, temp2_reg); // returns with CR0.eq if successful
598         __ crandc(CCR0, Assembler::equal, CCR0, Assembler::equal); // failed: CR0.ne
599         __ blr();
600       }
601       break;
602 
603     case monitorenter_nofpu_id:
604     case monitorenter_id:
605       {
606         __ set_info("monitorenter", dont_gc_arguments);
607 
608         int save_fpu_registers = (id == monitorenter_id);
609         // Make a frame and preserve the caller's caller-save registers.
610         OopMap* oop_map = save_live_registers(sasm, save_fpu_registers);
611 
612         int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, monitorenter), R4_ARG2, R5_ARG3);
613 
614         oop_maps = new OopMapSet();
615         oop_maps->add_gc_map(call_offset, oop_map);
616 
617         restore_live_registers(sasm, noreg, noreg, save_fpu_registers);
618         __ blr();
619       }
620       break;
621 
622     case monitorexit_nofpu_id:
623     case monitorexit_id:
624       {
625         // note: Really a leaf routine but must setup last java sp
626         //       => use call_RT for now (speed can be improved by
627         //       doing last java sp setup manually).
628         __ set_info("monitorexit", dont_gc_arguments);
629 
630         int save_fpu_registers = (id == monitorexit_id);
631         // Make a frame and preserve the caller's caller-save registers.
632         OopMap* oop_map = save_live_registers(sasm, save_fpu_registers);

592       { // Support for uint StubRoutine::partial_subtype_check( Klass sub, Klass super );
593         const Register sub_klass = R5,
594                        super_klass = R4,
595                        temp1_reg = R6,
596                        temp2_reg = R0;
597         __ check_klass_subtype_slow_path(sub_klass, super_klass, temp1_reg, temp2_reg); // returns with CR0.eq if successful
598         __ crandc(CCR0, Assembler::equal, CCR0, Assembler::equal); // failed: CR0.ne
599         __ blr();
600       }
601       break;
602 
603     case monitorenter_nofpu_id:
604     case monitorenter_id:
605       {
606         __ set_info("monitorenter", dont_gc_arguments);
607 
608         int save_fpu_registers = (id == monitorenter_id);
609         // Make a frame and preserve the caller's caller-save registers.
610         OopMap* oop_map = save_live_registers(sasm, save_fpu_registers);
611 
612         int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, monitorenter), R4_ARG2);
613 
614         oop_maps = new OopMapSet();
615         oop_maps->add_gc_map(call_offset, oop_map);
616 
617         restore_live_registers(sasm, noreg, noreg, save_fpu_registers);
618         __ blr();
619       }
620       break;
621 
622     case monitorexit_nofpu_id:
623     case monitorexit_id:
624       {
625         // note: Really a leaf routine but must setup last java sp
626         //       => use call_RT for now (speed can be improved by
627         //       doing last java sp setup manually).
628         __ set_info("monitorexit", dont_gc_arguments);
629 
630         int save_fpu_registers = (id == monitorexit_id);
631         // Make a frame and preserve the caller's caller-save registers.
632         OopMap* oop_map = save_live_registers(sasm, save_fpu_registers);
< prev index next >