< prev index next >

src/hotspot/cpu/riscv/macroAssembler_riscv.cpp

Print this page
*** 231,11 ***
    while ((offset() + extra_offset) % modulus != 0) { nop(); }
    return (int)(offset() - before);
  }
  
  void MacroAssembler::call_VM_helper(Register oop_result, address entry_point, int number_of_arguments, bool check_exceptions) {
!   call_VM_base(oop_result, noreg, noreg, entry_point, number_of_arguments, check_exceptions);
  }
  
  // Implementation of call_VM versions
  
  void MacroAssembler::call_VM(Register oop_result,
--- 231,11 ---
    while ((offset() + extra_offset) % modulus != 0) { nop(); }
    return (int)(offset() - before);
  }
  
  void MacroAssembler::call_VM_helper(Register oop_result, address entry_point, int number_of_arguments, bool check_exceptions) {
!   call_VM_base(oop_result, noreg, noreg, nullptr, entry_point, number_of_arguments, check_exceptions);
  }
  
  // Implementation of call_VM versions
  
  void MacroAssembler::call_VM(Register oop_result,

*** 282,11 ***
  void MacroAssembler::call_VM(Register oop_result,
                               Register last_java_sp,
                               address entry_point,
                               int number_of_arguments,
                               bool check_exceptions) {
!   call_VM_base(oop_result, xthread, last_java_sp, entry_point, number_of_arguments, check_exceptions);
  }
  
  void MacroAssembler::call_VM(Register oop_result,
                               Register last_java_sp,
                               address entry_point,
--- 282,11 ---
  void MacroAssembler::call_VM(Register oop_result,
                               Register last_java_sp,
                               address entry_point,
                               int number_of_arguments,
                               bool check_exceptions) {
!   call_VM_base(oop_result, xthread, last_java_sp, nullptr, entry_point, number_of_arguments, check_exceptions);
  }
  
  void MacroAssembler::call_VM(Register oop_result,
                               Register last_java_sp,
                               address entry_point,

*** 407,24 ***
  
    // Always clear the pc because it could have been set by make_walkable()
    sd(zr, Address(xthread, JavaThread::last_Java_pc_offset()));
  }
  
- static bool is_preemptable(address entry_point) {
-   return entry_point == CAST_FROM_FN_PTR(address, InterpreterRuntime::monitorenter);
- }
- 
  void MacroAssembler::call_VM_base(Register oop_result,
                                    Register java_thread,
                                    Register last_java_sp,
                                    address  entry_point,
                                    int      number_of_arguments,
                                    bool     check_exceptions) {
     // determine java_thread register
    if (!java_thread->is_valid()) {
      java_thread = xthread;
    }
    // determine last_java_sp register
    if (!last_java_sp->is_valid()) {
      last_java_sp = esp;
    }
  
--- 407,22 ---
  
    // Always clear the pc because it could have been set by make_walkable()
    sd(zr, Address(xthread, JavaThread::last_Java_pc_offset()));
  }
  
  void MacroAssembler::call_VM_base(Register oop_result,
                                    Register java_thread,
                                    Register last_java_sp,
+                                   Label*   return_pc,
                                    address  entry_point,
                                    int      number_of_arguments,
                                    bool     check_exceptions) {
     // determine java_thread register
    if (!java_thread->is_valid()) {
      java_thread = xthread;
    }
+ 
    // determine last_java_sp register
    if (!last_java_sp->is_valid()) {
      last_java_sp = esp;
    }
  

*** 440,16 ***
  
    // set last Java frame before call
    assert(last_java_sp != fp, "can't use fp");
  
    Label l;
!   if (is_preemptable(entry_point)) {
-     // skip setting last_pc since we already set it to desired value.
-     set_last_Java_frame(last_java_sp, fp, noreg);
-   } else {
-     set_last_Java_frame(last_java_sp, fp, l, t0);
-   }
  
    // do the call, remove parameters
    MacroAssembler::call_VM_leaf_base(entry_point, number_of_arguments, &l);
  
    // reset last Java frame
--- 438,11 ---
  
    // set last Java frame before call
    assert(last_java_sp != fp, "can't use fp");
  
    Label l;
!   set_last_Java_frame(last_java_sp, fp, return_pc != nullptr ? *return_pc : l, t0);
  
    // do the call, remove parameters
    MacroAssembler::call_VM_leaf_base(entry_point, number_of_arguments, &l);
  
    // reset last Java frame
< prev index next >