Print this page


Split Close
Expand all
Collapse all
          --- old/src/cpu/x86/vm/methodHandles_x86.cpp
          +++ new/src/cpu/x86/vm/methodHandles_x86.cpp
↓ open down ↓ 119 lines elided ↑ open up ↑
 120  120  
 121  121    return entry_point;
 122  122  }
 123  123  
 124  124  // Helper to insert argument slots into the stack.
 125  125  // arg_slots must be a multiple of stack_move_unit() and <= 0
 126  126  void MethodHandles::insert_arg_slots(MacroAssembler* _masm,
 127  127                                       RegisterOrConstant arg_slots,
 128  128                                       int arg_mask,
 129  129                                       Register rax_argslot,
 130      -                                     Register rbx_temp, Register rdx_temp) {
      130 +                                     Register rbx_temp, Register rdx_temp, Register temp3_reg) {
      131 +  assert(temp3_reg == noreg, "temp3 not required");
 131  132    assert_different_registers(rax_argslot, rbx_temp, rdx_temp,
 132  133                               (!arg_slots.is_register() ? rsp : arg_slots.as_register()));
 133  134  
 134  135  #ifdef ASSERT
 135  136    verify_argslot(_masm, rax_argslot, "insertion point must fall within current frame");
 136  137    if (arg_slots.is_register()) {
 137  138      Label L_ok, L_bad;
 138  139      __ cmpptr(arg_slots.as_register(), (int32_t) NULL_WORD);
 139  140      __ jccb(Assembler::greater, L_bad);
 140  141      __ testl(arg_slots.as_register(), -stack_move_unit() - 1);
↓ open down ↓ 37 lines elided ↑ open up ↑
 178  179  
 179  180    // Now move the argslot down, to point to the opened-up space.
 180  181    __ lea(rax_argslot, Address(rax_argslot, arg_slots, Address::times_ptr));
 181  182  }
 182  183  
 183  184  // Helper to remove argument slots from the stack.
 184  185  // arg_slots must be a multiple of stack_move_unit() and >= 0
 185  186  void MethodHandles::remove_arg_slots(MacroAssembler* _masm,
 186  187                                      RegisterOrConstant arg_slots,
 187  188                                      Register rax_argslot,
 188      -                                    Register rbx_temp, Register rdx_temp) {
      189 +                                     Register rbx_temp, Register rdx_temp, Register temp3_reg) {
      190 +  assert(temp3_reg == noreg, "temp3 not required");
 189  191    assert_different_registers(rax_argslot, rbx_temp, rdx_temp,
 190  192                               (!arg_slots.is_register() ? rsp : arg_slots.as_register()));
 191  193  
 192  194  #ifdef ASSERT
 193  195    // Verify that [argslot..argslot+size) lies within (rsp, rbp).
 194  196    __ lea(rbx_temp, Address(rax_argslot, arg_slots, Address::times_ptr));
 195  197    verify_argslot(_masm, rbx_temp, "deleted argument(s) must fall within current frame");
 196  198    if (arg_slots.is_register()) {
 197  199      Label L_ok, L_bad;
 198  200      __ cmpptr(arg_slots.as_register(), (int32_t) NULL_WORD);
↓ open down ↓ 910 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX