1081
1082 // Argument registers for _raise_exception:
1083 const Register O0_code = O0;
1084 const Register O1_actual = O1;
1085 const Register O2_required = O2;
1086
1087 guarantee(java_lang_invoke_MethodHandle::vmentry_offset_in_bytes() != 0, "must have offsets");
1088
1089 // Some handy addresses:
1090 Address G3_mh_vmtarget( G3_method_handle, java_lang_invoke_MethodHandle::vmtarget_offset_in_bytes());
1091
1092 Address G3_dmh_vmindex( G3_method_handle, java_lang_invoke_DirectMethodHandle::vmindex_offset_in_bytes());
1093
1094 Address G3_bmh_vmargslot( G3_method_handle, java_lang_invoke_BoundMethodHandle::vmargslot_offset_in_bytes());
1095 Address G3_bmh_argument( G3_method_handle, java_lang_invoke_BoundMethodHandle::argument_offset_in_bytes());
1096
1097 Address G3_amh_vmargslot( G3_method_handle, java_lang_invoke_AdapterMethodHandle::vmargslot_offset_in_bytes());
1098 Address G3_amh_argument ( G3_method_handle, java_lang_invoke_AdapterMethodHandle::argument_offset_in_bytes());
1099 Address G3_amh_conversion(G3_method_handle, java_lang_invoke_AdapterMethodHandle::conversion_offset_in_bytes());
1100
1101 const int java_mirror_offset = klassOopDesc::klass_part_offset_in_bytes() + Klass::java_mirror_offset_in_bytes();
1102
1103 if (have_entry(ek)) {
1104 __ nop(); // empty stubs make SG sick
1105 return;
1106 }
1107
1108 address interp_entry = __ pc();
1109
1110 trace_method_handle(_masm, entry_name(ek));
1111
1112 BLOCK_COMMENT(err_msg("Entry %s {", entry_name(ek)));
1113
1114 switch ((int) ek) {
1115 case _raise_exception:
1116 {
1117 // Not a real MH entry, but rather shared code for raising an
1118 // exception. For sharing purposes the arguments are passed into registers
1119 // and then placed in the intepreter calling convention here.
1120 assert(raise_exception_method(), "must be set");
1121 assert(raise_exception_method()->from_compiled_entry(), "method must be linked");
|
1081
1082 // Argument registers for _raise_exception:
1083 const Register O0_code = O0;
1084 const Register O1_actual = O1;
1085 const Register O2_required = O2;
1086
1087 guarantee(java_lang_invoke_MethodHandle::vmentry_offset_in_bytes() != 0, "must have offsets");
1088
1089 // Some handy addresses:
1090 Address G3_mh_vmtarget( G3_method_handle, java_lang_invoke_MethodHandle::vmtarget_offset_in_bytes());
1091
1092 Address G3_dmh_vmindex( G3_method_handle, java_lang_invoke_DirectMethodHandle::vmindex_offset_in_bytes());
1093
1094 Address G3_bmh_vmargslot( G3_method_handle, java_lang_invoke_BoundMethodHandle::vmargslot_offset_in_bytes());
1095 Address G3_bmh_argument( G3_method_handle, java_lang_invoke_BoundMethodHandle::argument_offset_in_bytes());
1096
1097 Address G3_amh_vmargslot( G3_method_handle, java_lang_invoke_AdapterMethodHandle::vmargslot_offset_in_bytes());
1098 Address G3_amh_argument ( G3_method_handle, java_lang_invoke_AdapterMethodHandle::argument_offset_in_bytes());
1099 Address G3_amh_conversion(G3_method_handle, java_lang_invoke_AdapterMethodHandle::conversion_offset_in_bytes());
1100
1101 const int java_mirror_offset = in_bytes(Klass::java_mirror_offset());
1102
1103 if (have_entry(ek)) {
1104 __ nop(); // empty stubs make SG sick
1105 return;
1106 }
1107
1108 address interp_entry = __ pc();
1109
1110 trace_method_handle(_masm, entry_name(ek));
1111
1112 BLOCK_COMMENT(err_msg("Entry %s {", entry_name(ek)));
1113
1114 switch ((int) ek) {
1115 case _raise_exception:
1116 {
1117 // Not a real MH entry, but rather shared code for raising an
1118 // exception. For sharing purposes the arguments are passed into registers
1119 // and then placed in the intepreter calling convention here.
1120 assert(raise_exception_method(), "must be set");
1121 assert(raise_exception_method()->from_compiled_entry(), "method must be linked");
|