168 // Special intrinsic method?
169 // Note: This test must come _after_ the test for native methods,
170 // otherwise we will run into problems with JDK 1.2, see also
171 // TemplateInterpreterGenerator::generate_method_entry() for
172 // for details.
173 switch (m->intrinsic_id()) {
174 case vmIntrinsics::_dsin : return java_lang_math_sin ;
175 case vmIntrinsics::_dcos : return java_lang_math_cos ;
176 case vmIntrinsics::_dtan : return java_lang_math_tan ;
177 case vmIntrinsics::_dabs : return java_lang_math_abs ;
178 case vmIntrinsics::_dsqrt : return java_lang_math_sqrt ;
179 case vmIntrinsics::_dlog : return java_lang_math_log ;
180 case vmIntrinsics::_dlog10: return java_lang_math_log10;
181 case vmIntrinsics::_dpow : return java_lang_math_pow ;
182 case vmIntrinsics::_dexp : return java_lang_math_exp ;
183 case vmIntrinsics::_fmaD : return java_lang_math_fmaD ;
184 case vmIntrinsics::_fmaF : return java_lang_math_fmaF ;
185
186 case vmIntrinsics::_Reference_get
187 : return java_lang_ref_reference_get;
188 default : break;
189 }
190
191 // Accessor method?
192 if (m->is_getter()) {
193 // TODO: We should have used ::is_accessor above, but fast accessors in Zero expect only getters.
194 // See CppInterpreter::accessor_entry in cppInterpreter_zero.cpp. This should be fixed in Zero,
195 // then the call above updated to ::is_accessor
196 assert(m->size_of_parameters() == 1, "fast code for accessors assumes parameter size = 1");
197 return accessor;
198 }
199
200 // Note: for now: zero locals for all non-empty methods
201 return zerolocals;
202 }
203
204 #if INCLUDE_CDS
205
206 address AbstractInterpreter::get_trampoline_code_buffer(AbstractInterpreter::MethodKind kind) {
207 const size_t trampoline_size = SharedRuntime::trampoline_size();
208 address addr = MetaspaceShared::cds_i2i_entry_code_buffers((size_t)(AbstractInterpreter::number_of_method_entries) * trampoline_size);
209 addr += (size_t)(kind) * trampoline_size;
210
211 return addr;
212 }
213
214 void AbstractInterpreter::update_cds_entry_table(AbstractInterpreter::MethodKind kind) {
215 if (DumpSharedSpaces || UseSharedSpaces) {
216 address trampoline = get_trampoline_code_buffer(kind);
217 _cds_entry_table[kind] = trampoline;
218
219 CodeBuffer buffer(trampoline, (int)(SharedRuntime::trampoline_size()));
|
168 // Special intrinsic method?
169 // Note: This test must come _after_ the test for native methods,
170 // otherwise we will run into problems with JDK 1.2, see also
171 // TemplateInterpreterGenerator::generate_method_entry() for
172 // for details.
173 switch (m->intrinsic_id()) {
174 case vmIntrinsics::_dsin : return java_lang_math_sin ;
175 case vmIntrinsics::_dcos : return java_lang_math_cos ;
176 case vmIntrinsics::_dtan : return java_lang_math_tan ;
177 case vmIntrinsics::_dabs : return java_lang_math_abs ;
178 case vmIntrinsics::_dsqrt : return java_lang_math_sqrt ;
179 case vmIntrinsics::_dlog : return java_lang_math_log ;
180 case vmIntrinsics::_dlog10: return java_lang_math_log10;
181 case vmIntrinsics::_dpow : return java_lang_math_pow ;
182 case vmIntrinsics::_dexp : return java_lang_math_exp ;
183 case vmIntrinsics::_fmaD : return java_lang_math_fmaD ;
184 case vmIntrinsics::_fmaF : return java_lang_math_fmaF ;
185
186 case vmIntrinsics::_Reference_get
187 : return java_lang_ref_reference_get;
188 case vmIntrinsics::_Continuation_getSP
189 : return java_lang_continuation_getSP;
190 case vmIntrinsics::_Continuation_getFP
191 : return java_lang_continuation_getFP;
192 case vmIntrinsics::_Continuation_getPC
193 : return java_lang_continuation_getPC;
194 case vmIntrinsics::_Continuation_doContinue
195 : return java_lang_continuation_doContinue;
196 case vmIntrinsics::_Continuation_doYield
197 : return java_lang_continuation_doYield;
198 case vmIntrinsics::_Continuation_runLevel
199 : return java_lang_continuation_runLevel;
200 default : break;
201 }
202
203 // Accessor method?
204 if (m->is_getter()) {
205 // TODO: We should have used ::is_accessor above, but fast accessors in Zero expect only getters.
206 // See CppInterpreter::accessor_entry in cppInterpreter_zero.cpp. This should be fixed in Zero,
207 // then the call above updated to ::is_accessor
208 assert(m->size_of_parameters() == 1, "fast code for accessors assumes parameter size = 1");
209 return accessor;
210 }
211
212 // Symbol* kname = m->klass_name();
213 // Symbol* name = m->name();
214 // if (kname == vmSymbols::java_lang_Continuation()) {
215 // if (name == vmSymbols::enter_name()) {
216 // return java_lang_continuation_enter;
217 // }
218 // }
219
220 // Note: for now: zero locals for all non-empty methods
221 return zerolocals;
222 }
223
224 #if INCLUDE_CDS
225
226 address AbstractInterpreter::get_trampoline_code_buffer(AbstractInterpreter::MethodKind kind) {
227 const size_t trampoline_size = SharedRuntime::trampoline_size();
228 address addr = MetaspaceShared::cds_i2i_entry_code_buffers((size_t)(AbstractInterpreter::number_of_method_entries) * trampoline_size);
229 addr += (size_t)(kind) * trampoline_size;
230
231 return addr;
232 }
233
234 void AbstractInterpreter::update_cds_entry_table(AbstractInterpreter::MethodKind kind) {
235 if (DumpSharedSpaces || UseSharedSpaces) {
236 address trampoline = get_trampoline_code_buffer(kind);
237 _cds_entry_table[kind] = trampoline;
238
239 CodeBuffer buffer(trampoline, (int)(SharedRuntime::trampoline_size()));
|