< prev index next >

src/hotspot/cpu/aarch64/c1_Runtime1_aarch64.cpp

Print this page
*** 271,12 ***
      }
    }
    return oop_map;
  }
  
! static OopMap* save_live_registers(StubAssembler* sasm,
!                                    bool save_fpu_registers = true) {
    __ block_comment("save_live_registers");
  
    __ push(RegSet::range(r0, r29), sp);         // integer registers except lr & sp
  
    if (save_fpu_registers) {
--- 271,12 ---
      }
    }
    return oop_map;
  }
  
! static void save_live_registers_no_oop_map(StubAssembler* sasm,
!                                               bool save_fpu_registers = true) {
    __ block_comment("save_live_registers");
  
    __ push(RegSet::range(r0, r29), sp);         // integer registers except lr & sp
  
    if (save_fpu_registers) {

*** 286,11 ***
--- 286,15 ---
            as_FloatRegister(i), __ T1D, Address(sp));
      }
    } else {
      __ add(sp, sp, -32 * wordSize);
    }
+ }
  
+ static OopMap* save_live_registers(StubAssembler* sasm,
+                                    bool save_fpu_registers = true) {
+   save_live_registers_no_oop_map(sasm, save_fpu_registers);
    return generate_oop_map(sasm, save_fpu_registers);
  }
  
  static void restore_live_registers(StubAssembler* sasm, bool restore_fpu_registers = true) {
    if (restore_fpu_registers) {

*** 713,10 ***
--- 717,20 ---
          // r0,: new instance
        }
  
        break;
  
+     case load_klass_id:
+       {
+         StubFrame f(sasm, "load_klass", dont_gc_arguments);
+         save_live_registers_no_oop_map(sasm, true);
+         f.load_argument(0, r0); // obj
+         __ call_VM_leaf(CAST_FROM_FN_PTR(address, oopDesc::load_klass_runtime), r0);
+         restore_live_registers_except_r0(sasm, true);
+       }
+       break;
+ 
      case counter_overflow_id:
        {
          Register bci = r0, method = r1;
          __ enter();
          OopMap* map = save_live_registers(sasm);
< prev index next >