Mercurial > hg > graal-jvmci-8
comparison src/share/vm/interpreter/templateInterpreter.cpp @ 7066:7d815d842ee0
Merge.
author | Christian Haeubl <haeubl@ssw.jku.at> |
---|---|
date | Fri, 23 Nov 2012 11:50:27 +0100 |
parents | 8c5333c80cfd a3e2f723f2a5 |
children | b8f261ba79c6 |
comparison
equal
deleted
inserted
replaced
7065:cfacf5d5bade | 7066:7d815d842ee0 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
375 method_entry(java_lang_math_log10) | 375 method_entry(java_lang_math_log10) |
376 method_entry(java_lang_math_exp ) | 376 method_entry(java_lang_math_exp ) |
377 method_entry(java_lang_math_pow ) | 377 method_entry(java_lang_math_pow ) |
378 method_entry(java_lang_ref_reference_get) | 378 method_entry(java_lang_ref_reference_get) |
379 | 379 |
380 // method handle entry kinds are generated later in MethodHandlesAdapterGenerator::generate: | 380 initialize_method_handle_entries(); |
381 for (int i = Interpreter::method_handle_invoke_FIRST; i <= Interpreter::method_handle_invoke_LAST; i++) { | |
382 Interpreter::MethodKind kind = (Interpreter::MethodKind) i; | |
383 Interpreter::_entry_table[kind] = Interpreter::_entry_table[Interpreter::abstract]; | |
384 } | |
385 | 381 |
386 // all native method kinds (must be one contiguous block) | 382 // all native method kinds (must be one contiguous block) |
387 Interpreter::_native_entry_begin = Interpreter::code()->code_end(); | 383 Interpreter::_native_entry_begin = Interpreter::code()->code_end(); |
388 method_entry(native) | 384 method_entry(native) |
389 method_entry(native_synchronized) | 385 method_entry(native_synchronized) |
512 if (tos_out == ilgl) tos_out = t->tos_out(); | 508 if (tos_out == ilgl) tos_out = t->tos_out(); |
513 // compute bytecode size | 509 // compute bytecode size |
514 assert(step > 0, "just checkin'"); | 510 assert(step > 0, "just checkin'"); |
515 // setup stuff for dispatching next bytecode | 511 // setup stuff for dispatching next bytecode |
516 if (ProfileInterpreter && VerifyDataPointer | 512 if (ProfileInterpreter && VerifyDataPointer |
517 && methodDataOopDesc::bytecode_has_profile(t->bytecode())) { | 513 && MethodData::bytecode_has_profile(t->bytecode())) { |
518 __ verify_method_data_pointer(); | 514 __ verify_method_data_pointer(); |
519 } | 515 } |
520 __ dispatch_prolog(tos_out, step); | 516 __ dispatch_prolog(tos_out, step); |
521 } | 517 } |
522 // generate template | 518 // generate template |
590 | 586 |
591 //------------------------------------------------------------------------------------------------------------------------ | 587 //------------------------------------------------------------------------------------------------------------------------ |
592 // Deoptimization support | 588 // Deoptimization support |
593 | 589 |
594 // If deoptimization happens, this function returns the point of next bytecode to continue execution | 590 // If deoptimization happens, this function returns the point of next bytecode to continue execution |
595 address TemplateInterpreter::deopt_continue_after_entry(methodOop method, address bcp, int callee_parameters, bool is_top_frame) { | 591 address TemplateInterpreter::deopt_continue_after_entry(Method* method, address bcp, int callee_parameters, bool is_top_frame) { |
596 return AbstractInterpreter::deopt_continue_after_entry(method, bcp, callee_parameters, is_top_frame); | 592 return AbstractInterpreter::deopt_continue_after_entry(method, bcp, callee_parameters, is_top_frame); |
597 } | 593 } |
598 | 594 |
599 // If deoptimization happens, this function returns the point where the interpreter reexecutes | 595 // If deoptimization happens, this function returns the point where the interpreter reexecutes |
600 // the bytecode. | 596 // the bytecode. |
601 // Note: Bytecodes::_athrow (C1 only) and Bytecodes::_return are the special cases | 597 // Note: Bytecodes::_athrow (C1 only) and Bytecodes::_return are the special cases |
602 // that do not return "Interpreter::deopt_entry(vtos, 0)" | 598 // that do not return "Interpreter::deopt_entry(vtos, 0)" |
603 address TemplateInterpreter::deopt_reexecute_entry(methodOop method, address bcp) { | 599 address TemplateInterpreter::deopt_reexecute_entry(Method* method, address bcp) { |
604 assert(method->contains(bcp), "just checkin'"); | 600 assert(method->contains(bcp), "just checkin'"); |
605 Bytecodes::Code code = Bytecodes::java_code_at(method, bcp); | 601 Bytecodes::Code code = Bytecodes::java_code_at(method, bcp); |
606 if (code == Bytecodes::_return) { | 602 if (code == Bytecodes::_return) { |
607 // This is used for deopt during registration of finalizers | 603 // This is used for deopt during registration of finalizers |
608 // during Object.<init>. We simply need to resume execution at | 604 // during Object.<init>. We simply need to resume execution at |