hotspot/src/cpu/x86/vm/assembler_x86.cpp
changeset 10546 e79347eebbc5
parent 10286 74b0f625d56a
child 11194 ee1235a09fc3
equal deleted inserted replaced
10545:fec876499aae 10546:e79347eebbc5
  8002 // method handle's MethodType.  This macro hides the distinction.
  8002 // method handle's MethodType.  This macro hides the distinction.
  8003 void MacroAssembler::load_method_handle_vmslots(Register vmslots_reg, Register mh_reg,
  8003 void MacroAssembler::load_method_handle_vmslots(Register vmslots_reg, Register mh_reg,
  8004                                                 Register temp_reg) {
  8004                                                 Register temp_reg) {
  8005   assert_different_registers(vmslots_reg, mh_reg, temp_reg);
  8005   assert_different_registers(vmslots_reg, mh_reg, temp_reg);
  8006   // load mh.type.form.vmslots
  8006   // load mh.type.form.vmslots
  8007   if (java_lang_invoke_MethodHandle::vmslots_offset_in_bytes() != 0) {
  8007   Register temp2_reg = vmslots_reg;
  8008     // hoist vmslots into every mh to avoid dependent load chain
  8008   load_heap_oop(temp2_reg, Address(mh_reg,    delayed_value(java_lang_invoke_MethodHandle::type_offset_in_bytes, temp_reg)));
  8009     movl(vmslots_reg, Address(mh_reg, delayed_value(java_lang_invoke_MethodHandle::vmslots_offset_in_bytes, temp_reg)));
  8009   load_heap_oop(temp2_reg, Address(temp2_reg, delayed_value(java_lang_invoke_MethodType::form_offset_in_bytes, temp_reg)));
  8010   } else {
  8010   movl(vmslots_reg, Address(temp2_reg, delayed_value(java_lang_invoke_MethodTypeForm::vmslots_offset_in_bytes, temp_reg)));
  8011     Register temp2_reg = vmslots_reg;
       
  8012     load_heap_oop(temp2_reg, Address(mh_reg,    delayed_value(java_lang_invoke_MethodHandle::type_offset_in_bytes, temp_reg)));
       
  8013     load_heap_oop(temp2_reg, Address(temp2_reg, delayed_value(java_lang_invoke_MethodType::form_offset_in_bytes, temp_reg)));
       
  8014     movl(vmslots_reg, Address(temp2_reg, delayed_value(java_lang_invoke_MethodTypeForm::vmslots_offset_in_bytes, temp_reg)));
       
  8015   }
       
  8016 }
  8011 }
  8017 
  8012 
  8018 
  8013 
  8019 // registers on entry:
  8014 // registers on entry:
  8020 //  - rcx: method handle
  8015 //  - rcx: method handle