Mercurial > hg > truffle
comparison src/share/vm/interpreter/templateInterpreter.cpp @ 1059:389049f3f393
6858164: invokedynamic code needs some cleanup (post-6655638)
Summary: Fix several crashers, remove needless paths for boxed-style bootstrap method call, refactor & simplify APIs for rewriter constantPoolOop, remove sun.dyn.CallSiteImpl
Reviewed-by: kvn
author | jrose |
---|---|
date | Fri, 30 Oct 2009 16:22:59 -0700 |
parents | 9987d9d5eb0e |
children | b18963243361 |
comparison
equal
deleted
inserted
replaced
1058:73a726751507 | 1059:389049f3f393 |
---|---|
176 #ifndef PRODUCT | 176 #ifndef PRODUCT |
177 EntryPoint TemplateInterpreter::_trace_code; | 177 EntryPoint TemplateInterpreter::_trace_code; |
178 #endif // !PRODUCT | 178 #endif // !PRODUCT |
179 EntryPoint TemplateInterpreter::_return_entry[TemplateInterpreter::number_of_return_entries]; | 179 EntryPoint TemplateInterpreter::_return_entry[TemplateInterpreter::number_of_return_entries]; |
180 EntryPoint TemplateInterpreter::_earlyret_entry; | 180 EntryPoint TemplateInterpreter::_earlyret_entry; |
181 EntryPoint TemplateInterpreter::_return_unbox_entry; | |
182 EntryPoint TemplateInterpreter::_deopt_entry [TemplateInterpreter::number_of_deopt_entries ]; | 181 EntryPoint TemplateInterpreter::_deopt_entry [TemplateInterpreter::number_of_deopt_entries ]; |
183 EntryPoint TemplateInterpreter::_continuation_entry; | 182 EntryPoint TemplateInterpreter::_continuation_entry; |
184 EntryPoint TemplateInterpreter::_safept_entry; | 183 EntryPoint TemplateInterpreter::_safept_entry; |
185 | 184 |
186 address TemplateInterpreter::_return_3_addrs_by_index[TemplateInterpreter::number_of_return_addrs]; | 185 address TemplateInterpreter::_return_3_addrs_by_index[TemplateInterpreter::number_of_return_addrs]; |
187 address TemplateInterpreter::_return_5_addrs_by_index[TemplateInterpreter::number_of_return_addrs]; | 186 address TemplateInterpreter::_return_5_addrs_by_index[TemplateInterpreter::number_of_return_addrs]; |
188 address TemplateInterpreter::_return_5_unbox_addrs_by_index[TemplateInterpreter::number_of_return_addrs]; | |
189 | 187 |
190 DispatchTable TemplateInterpreter::_active_table; | 188 DispatchTable TemplateInterpreter::_active_table; |
191 DispatchTable TemplateInterpreter::_normal_table; | 189 DispatchTable TemplateInterpreter::_normal_table; |
192 DispatchTable TemplateInterpreter::_safept_table; | 190 DispatchTable TemplateInterpreter::_safept_table; |
193 address TemplateInterpreter::_wentry_point[DispatchTable::length]; | 191 address TemplateInterpreter::_wentry_point[DispatchTable::length]; |
251 generate_return_entry_for(vtos, i) | 249 generate_return_entry_for(vtos, i) |
252 ); | 250 ); |
253 } | 251 } |
254 } | 252 } |
255 | 253 |
256 if (EnableInvokeDynamic) { | |
257 CodeletMark cm(_masm, "unboxing return entry points"); | |
258 Interpreter::_return_unbox_entry = | |
259 EntryPoint( | |
260 generate_return_unbox_entry_for(btos, 5), | |
261 generate_return_unbox_entry_for(ctos, 5), | |
262 generate_return_unbox_entry_for(stos, 5), | |
263 generate_return_unbox_entry_for(atos, 5), // cast conversion | |
264 generate_return_unbox_entry_for(itos, 5), | |
265 generate_return_unbox_entry_for(ltos, 5), | |
266 generate_return_unbox_entry_for(ftos, 5), | |
267 generate_return_unbox_entry_for(dtos, 5), | |
268 Interpreter::_return_entry[5].entry(vtos) // no unboxing for void | |
269 ); | |
270 } | |
271 | |
272 { CodeletMark cm(_masm, "earlyret entry points"); | 254 { CodeletMark cm(_masm, "earlyret entry points"); |
273 Interpreter::_earlyret_entry = | 255 Interpreter::_earlyret_entry = |
274 EntryPoint( | 256 EntryPoint( |
275 generate_earlyret_entry_for(btos), | 257 generate_earlyret_entry_for(btos), |
276 generate_earlyret_entry_for(ctos), | 258 generate_earlyret_entry_for(ctos), |
317 for (int j = 0; j < number_of_states; j++) { | 299 for (int j = 0; j < number_of_states; j++) { |
318 const TosState states[] = {btos, ctos, stos, itos, ltos, ftos, dtos, atos, vtos}; | 300 const TosState states[] = {btos, ctos, stos, itos, ltos, ftos, dtos, atos, vtos}; |
319 int index = Interpreter::TosState_as_index(states[j]); | 301 int index = Interpreter::TosState_as_index(states[j]); |
320 Interpreter::_return_3_addrs_by_index[index] = Interpreter::return_entry(states[j], 3); | 302 Interpreter::_return_3_addrs_by_index[index] = Interpreter::return_entry(states[j], 3); |
321 Interpreter::_return_5_addrs_by_index[index] = Interpreter::return_entry(states[j], 5); | 303 Interpreter::_return_5_addrs_by_index[index] = Interpreter::return_entry(states[j], 5); |
322 if (EnableInvokeDynamic) | |
323 Interpreter::_return_5_unbox_addrs_by_index[index] = Interpreter::return_unbox_entry(states[j], 5); | |
324 } | 304 } |
325 | 305 |
326 { CodeletMark cm(_masm, "continuation entry points"); | 306 { CodeletMark cm(_masm, "continuation entry points"); |
327 Interpreter::_continuation_entry = | 307 Interpreter::_continuation_entry = |
328 EntryPoint( | 308 EntryPoint( |
545 guarantee(0 <= length && length < Interpreter::number_of_return_entries, "illegal length"); | 525 guarantee(0 <= length && length < Interpreter::number_of_return_entries, "illegal length"); |
546 return _return_entry[length].entry(state); | 526 return _return_entry[length].entry(state); |
547 } | 527 } |
548 | 528 |
549 | 529 |
550 address TemplateInterpreter::return_unbox_entry(TosState state, int length) { | |
551 assert(EnableInvokeDynamic, ""); | |
552 if (state == vtos) { | |
553 // no unboxing to do, actually | |
554 return return_entry(state, length); | |
555 } else { | |
556 assert(length == 5, "unboxing entries generated for invokedynamic only"); | |
557 return _return_unbox_entry.entry(state); | |
558 } | |
559 } | |
560 | |
561 | |
562 address TemplateInterpreter::deopt_entry(TosState state, int length) { | 530 address TemplateInterpreter::deopt_entry(TosState state, int length) { |
563 guarantee(0 <= length && length < Interpreter::number_of_deopt_entries, "illegal length"); | 531 guarantee(0 <= length && length < Interpreter::number_of_deopt_entries, "illegal length"); |
564 return _deopt_entry[length].entry(state); | 532 return _deopt_entry[length].entry(state); |
565 } | 533 } |
566 | 534 |