1517 // determine code generation flags
1518 bool synchronized = false;
1519 address entry_point = NULL;
1520
1521 switch (kind) {
1522 case Interpreter::zerolocals : break;
1523 case Interpreter::zerolocals_synchronized: synchronized = true; break;
1524 case Interpreter::native : entry_point = ((InterpreterGenerator*) this)->generate_native_entry(false); break;
1525 case Interpreter::native_synchronized : entry_point = ((InterpreterGenerator*) this)->generate_native_entry(true); break;
1526 case Interpreter::empty : entry_point = ((InterpreterGenerator*) this)->generate_empty_entry(); break;
1527 case Interpreter::accessor : entry_point = ((InterpreterGenerator*) this)->generate_accessor_entry(); break;
1528 case Interpreter::abstract : entry_point = ((InterpreterGenerator*) this)->generate_abstract_entry(); break;
1529 case Interpreter::method_handle : entry_point = ((InterpreterGenerator*) this)->generate_method_handle_entry();break;
1530
1531 case Interpreter::java_lang_math_sin : // fall thru
1532 case Interpreter::java_lang_math_cos : // fall thru
1533 case Interpreter::java_lang_math_tan : // fall thru
1534 case Interpreter::java_lang_math_abs : // fall thru
1535 case Interpreter::java_lang_math_log : // fall thru
1536 case Interpreter::java_lang_math_log10 : // fall thru
1537 case Interpreter::java_lang_math_sqrt : entry_point = ((InterpreterGenerator*) this)->generate_math_entry(kind); break;
1538 case Interpreter::java_lang_ref_reference_get
1539 : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break;
1540 default : ShouldNotReachHere(); break;
1541 }
1542
1543 if (entry_point) {
1544 return entry_point;
1545 }
1546
1547 return ((InterpreterGenerator*) this)->
1548 generate_normal_entry(synchronized);
1549 }
1550
1551 // These should never be compiled since the interpreter will prefer
1552 // the compiled version to the intrinsic version.
1553 bool AbstractInterpreter::can_be_compiled(methodHandle m) {
1554 switch (method_kind(m)) {
1555 case Interpreter::java_lang_math_sin : // fall thru
1556 case Interpreter::java_lang_math_cos : // fall thru
1557 case Interpreter::java_lang_math_tan : // fall thru
1558 case Interpreter::java_lang_math_abs : // fall thru
1559 case Interpreter::java_lang_math_log : // fall thru
1560 case Interpreter::java_lang_math_log10 : // fall thru
1561 case Interpreter::java_lang_math_sqrt :
1562 return false;
1563 default:
1564 return true;
1565 }
1566 }
1567
1568 // How much stack a method activation needs in words.
1569 int AbstractInterpreter::size_top_interpreter_activation(methodOop method) {
1570 const int entry_size = frame::interpreter_frame_monitor_size();
1571
1572 // total overhead size: entry_size + (saved rbp thru expr stack
1573 // bottom). be sure to change this if you add/subtract anything
1574 // to/from the overhead area
1575 const int overhead_size =
1576 -(frame::interpreter_frame_initial_sp_offset) + entry_size;
1577
1578 const int stub_code = frame::entry_frame_after_call_words;
1579 const int extra_stack = methodOopDesc::extra_stack_entries();
1580 const int method_stack = (method->max_locals() + method->max_stack() + extra_stack) *
1581 Interpreter::stackElementWords;
|
1517 // determine code generation flags
1518 bool synchronized = false;
1519 address entry_point = NULL;
1520
1521 switch (kind) {
1522 case Interpreter::zerolocals : break;
1523 case Interpreter::zerolocals_synchronized: synchronized = true; break;
1524 case Interpreter::native : entry_point = ((InterpreterGenerator*) this)->generate_native_entry(false); break;
1525 case Interpreter::native_synchronized : entry_point = ((InterpreterGenerator*) this)->generate_native_entry(true); break;
1526 case Interpreter::empty : entry_point = ((InterpreterGenerator*) this)->generate_empty_entry(); break;
1527 case Interpreter::accessor : entry_point = ((InterpreterGenerator*) this)->generate_accessor_entry(); break;
1528 case Interpreter::abstract : entry_point = ((InterpreterGenerator*) this)->generate_abstract_entry(); break;
1529 case Interpreter::method_handle : entry_point = ((InterpreterGenerator*) this)->generate_method_handle_entry();break;
1530
1531 case Interpreter::java_lang_math_sin : // fall thru
1532 case Interpreter::java_lang_math_cos : // fall thru
1533 case Interpreter::java_lang_math_tan : // fall thru
1534 case Interpreter::java_lang_math_abs : // fall thru
1535 case Interpreter::java_lang_math_log : // fall thru
1536 case Interpreter::java_lang_math_log10 : // fall thru
1537 case Interpreter::java_lang_math_sqrt : // fall thru
1538 case Interpreter::java_lang_math_pow : // fall thru
1539 case Interpreter::java_lang_math_exp : entry_point = ((InterpreterGenerator*) this)->generate_math_entry(kind); break;
1540 case Interpreter::java_lang_ref_reference_get
1541 : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break;
1542 default : ShouldNotReachHere(); break;
1543 }
1544
1545 if (entry_point) {
1546 return entry_point;
1547 }
1548
1549 return ((InterpreterGenerator*) this)->
1550 generate_normal_entry(synchronized);
1551 }
1552
1553 // These should never be compiled since the interpreter will prefer
1554 // the compiled version to the intrinsic version.
1555 bool AbstractInterpreter::can_be_compiled(methodHandle m) {
1556 switch (method_kind(m)) {
1557 case Interpreter::java_lang_math_sin : // fall thru
1558 case Interpreter::java_lang_math_cos : // fall thru
1559 case Interpreter::java_lang_math_tan : // fall thru
1560 case Interpreter::java_lang_math_abs : // fall thru
1561 case Interpreter::java_lang_math_log : // fall thru
1562 case Interpreter::java_lang_math_log10 : // fall thru
1563 case Interpreter::java_lang_math_sqrt : // fall thru
1564 case Interpreter::java_lang_math_pow : // fall thru
1565 case Interpreter::java_lang_math_exp :
1566 return false;
1567 default:
1568 return true;
1569 }
1570 }
1571
1572 // How much stack a method activation needs in words.
1573 int AbstractInterpreter::size_top_interpreter_activation(methodOop method) {
1574 const int entry_size = frame::interpreter_frame_monitor_size();
1575
1576 // total overhead size: entry_size + (saved rbp thru expr stack
1577 // bottom). be sure to change this if you add/subtract anything
1578 // to/from the overhead area
1579 const int overhead_size =
1580 -(frame::interpreter_frame_initial_sp_offset) + entry_size;
1581
1582 const int stub_code = frame::entry_frame_after_call_words;
1583 const int extra_stack = methodOopDesc::extra_stack_entries();
1584 const int method_stack = (method->max_locals() + method->max_stack() + extra_stack) *
1585 Interpreter::stackElementWords;
|