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) {
|