src/cpu/x86/vm/methodHandles_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 7118863 Sdiff src/cpu/x86/vm

src/cpu/x86/vm/methodHandles_x86.cpp

Print this page




1143   // 32-bit: Pass first two oop/int args in registers ECX and EDX.
1144   const Register rarg0_code     = LP64_ONLY(j_rarg0) NOT_LP64(rcx);
1145   const Register rarg1_actual   = LP64_ONLY(j_rarg1) NOT_LP64(rdx);
1146   const Register rarg2_required = LP64_ONLY(j_rarg2) NOT_LP64(rdi);
1147   assert_different_registers(rarg0_code, rarg1_actual, rarg2_required, saved_last_sp);
1148 
1149   guarantee(java_lang_invoke_MethodHandle::vmentry_offset_in_bytes() != 0, "must have offsets");
1150 
1151   // some handy addresses
1152   Address rcx_mh_vmtarget(    rcx_recv, java_lang_invoke_MethodHandle::vmtarget_offset_in_bytes() );
1153   Address rcx_dmh_vmindex(    rcx_recv, java_lang_invoke_DirectMethodHandle::vmindex_offset_in_bytes() );
1154 
1155   Address rcx_bmh_vmargslot(  rcx_recv, java_lang_invoke_BoundMethodHandle::vmargslot_offset_in_bytes() );
1156   Address rcx_bmh_argument(   rcx_recv, java_lang_invoke_BoundMethodHandle::argument_offset_in_bytes() );
1157 
1158   Address rcx_amh_vmargslot(  rcx_recv, java_lang_invoke_AdapterMethodHandle::vmargslot_offset_in_bytes() );
1159   Address rcx_amh_argument(   rcx_recv, java_lang_invoke_AdapterMethodHandle::argument_offset_in_bytes() );
1160   Address rcx_amh_conversion( rcx_recv, java_lang_invoke_AdapterMethodHandle::conversion_offset_in_bytes() );
1161   Address vmarg;                // __ argument_address(vmargslot)
1162 
1163   const int java_mirror_offset = klassOopDesc::klass_part_offset_in_bytes() + Klass::java_mirror_offset_in_bytes();
1164 
1165   if (have_entry(ek)) {
1166     __ nop();                   // empty stubs make SG sick
1167     return;
1168   }
1169 
1170 #ifdef ASSERT
1171   __ push((int32_t) 0xEEEEEEEE);
1172   __ push((int32_t) (intptr_t) entry_name(ek));
1173   LP64_ONLY(__ push((int32_t) high((intptr_t) entry_name(ek))));
1174   __ push((int32_t) 0x33333333);
1175 #endif //ASSERT
1176 
1177   address interp_entry = __ pc();
1178 
1179   trace_method_handle(_masm, entry_name(ek));
1180 
1181   BLOCK_COMMENT(err_msg("Entry %s {", entry_name(ek)));
1182 
1183   switch ((int) ek) {




1143   // 32-bit: Pass first two oop/int args in registers ECX and EDX.
1144   const Register rarg0_code     = LP64_ONLY(j_rarg0) NOT_LP64(rcx);
1145   const Register rarg1_actual   = LP64_ONLY(j_rarg1) NOT_LP64(rdx);
1146   const Register rarg2_required = LP64_ONLY(j_rarg2) NOT_LP64(rdi);
1147   assert_different_registers(rarg0_code, rarg1_actual, rarg2_required, saved_last_sp);
1148 
1149   guarantee(java_lang_invoke_MethodHandle::vmentry_offset_in_bytes() != 0, "must have offsets");
1150 
1151   // some handy addresses
1152   Address rcx_mh_vmtarget(    rcx_recv, java_lang_invoke_MethodHandle::vmtarget_offset_in_bytes() );
1153   Address rcx_dmh_vmindex(    rcx_recv, java_lang_invoke_DirectMethodHandle::vmindex_offset_in_bytes() );
1154 
1155   Address rcx_bmh_vmargslot(  rcx_recv, java_lang_invoke_BoundMethodHandle::vmargslot_offset_in_bytes() );
1156   Address rcx_bmh_argument(   rcx_recv, java_lang_invoke_BoundMethodHandle::argument_offset_in_bytes() );
1157 
1158   Address rcx_amh_vmargslot(  rcx_recv, java_lang_invoke_AdapterMethodHandle::vmargslot_offset_in_bytes() );
1159   Address rcx_amh_argument(   rcx_recv, java_lang_invoke_AdapterMethodHandle::argument_offset_in_bytes() );
1160   Address rcx_amh_conversion( rcx_recv, java_lang_invoke_AdapterMethodHandle::conversion_offset_in_bytes() );
1161   Address vmarg;                // __ argument_address(vmargslot)
1162 
1163   const int java_mirror_offset = in_bytes(Klass::java_mirror_offset());
1164 
1165   if (have_entry(ek)) {
1166     __ nop();                   // empty stubs make SG sick
1167     return;
1168   }
1169 
1170 #ifdef ASSERT
1171   __ push((int32_t) 0xEEEEEEEE);
1172   __ push((int32_t) (intptr_t) entry_name(ek));
1173   LP64_ONLY(__ push((int32_t) high((intptr_t) entry_name(ek))));
1174   __ push((int32_t) 0x33333333);
1175 #endif //ASSERT
1176 
1177   address interp_entry = __ pc();
1178 
1179   trace_method_handle(_masm, entry_name(ek));
1180 
1181   BLOCK_COMMENT(err_msg("Entry %s {", entry_name(ek)));
1182 
1183   switch ((int) ek) {


src/cpu/x86/vm/methodHandles_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File