1501 // determine code generation flags
1502 bool synchronized = false;
1503 address entry_point = NULL;
1504
1505 switch (kind) {
1506 case Interpreter::zerolocals : break;
1507 case Interpreter::zerolocals_synchronized: synchronized = true; break;
1508 case Interpreter::native : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(false); break;
1509 case Interpreter::native_synchronized : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(true); break;
1510 case Interpreter::empty : entry_point = ((InterpreterGenerator*)this)->generate_empty_entry(); break;
1511 case Interpreter::accessor : entry_point = ((InterpreterGenerator*)this)->generate_accessor_entry(); break;
1512 case Interpreter::abstract : entry_point = ((InterpreterGenerator*)this)->generate_abstract_entry(); break;
1513 case Interpreter::method_handle : entry_point = ((InterpreterGenerator*)this)->generate_method_handle_entry(); break;
1514
1515 case Interpreter::java_lang_math_sin : // fall thru
1516 case Interpreter::java_lang_math_cos : // fall thru
1517 case Interpreter::java_lang_math_tan : // fall thru
1518 case Interpreter::java_lang_math_abs : // fall thru
1519 case Interpreter::java_lang_math_log : // fall thru
1520 case Interpreter::java_lang_math_log10 : // fall thru
1521 case Interpreter::java_lang_math_sqrt : entry_point = ((InterpreterGenerator*)this)->generate_math_entry(kind); break;
1522 case Interpreter::java_lang_ref_reference_get
1523 : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break;
1524 default : ShouldNotReachHere(); break;
1525 }
1526
1527 if (entry_point) return entry_point;
1528
1529 return ((InterpreterGenerator*)this)->generate_normal_entry(synchronized);
1530
1531 }
1532
1533 // These should never be compiled since the interpreter will prefer
1534 // the compiled version to the intrinsic version.
1535 bool AbstractInterpreter::can_be_compiled(methodHandle m) {
1536 switch (method_kind(m)) {
1537 case Interpreter::java_lang_math_sin : // fall thru
1538 case Interpreter::java_lang_math_cos : // fall thru
1539 case Interpreter::java_lang_math_tan : // fall thru
1540 case Interpreter::java_lang_math_abs : // fall thru
1541 case Interpreter::java_lang_math_log : // fall thru
1542 case Interpreter::java_lang_math_log10 : // fall thru
1543 case Interpreter::java_lang_math_sqrt :
1544 return false;
1545 default:
1546 return true;
1547 }
1548 }
1549
1550 // How much stack a method activation needs in words.
1551 int AbstractInterpreter::size_top_interpreter_activation(methodOop method) {
1552
1553 const int stub_code = 4; // see generate_call_stub
1554 // Save space for one monitor to get into the interpreted method in case
1555 // the method is synchronized
1556 int monitor_size = method->is_synchronized() ?
1557 1*frame::interpreter_frame_monitor_size() : 0;
1558
1559 // total overhead size: entry_size + (saved rbp, thru expr stack bottom).
1560 // be sure to change this if you add/subtract anything to/from the overhead area
1561 const int overhead_size = -frame::interpreter_frame_initial_sp_offset;
1562
1563 const int extra_stack = methodOopDesc::extra_stack_entries();
|
1501 // determine code generation flags
1502 bool synchronized = false;
1503 address entry_point = NULL;
1504
1505 switch (kind) {
1506 case Interpreter::zerolocals : break;
1507 case Interpreter::zerolocals_synchronized: synchronized = true; break;
1508 case Interpreter::native : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(false); break;
1509 case Interpreter::native_synchronized : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(true); break;
1510 case Interpreter::empty : entry_point = ((InterpreterGenerator*)this)->generate_empty_entry(); break;
1511 case Interpreter::accessor : entry_point = ((InterpreterGenerator*)this)->generate_accessor_entry(); break;
1512 case Interpreter::abstract : entry_point = ((InterpreterGenerator*)this)->generate_abstract_entry(); break;
1513 case Interpreter::method_handle : entry_point = ((InterpreterGenerator*)this)->generate_method_handle_entry(); break;
1514
1515 case Interpreter::java_lang_math_sin : // fall thru
1516 case Interpreter::java_lang_math_cos : // fall thru
1517 case Interpreter::java_lang_math_tan : // fall thru
1518 case Interpreter::java_lang_math_abs : // fall thru
1519 case Interpreter::java_lang_math_log : // fall thru
1520 case Interpreter::java_lang_math_log10 : // fall thru
1521 case Interpreter::java_lang_math_sqrt : // fall thru
1522 case Interpreter::java_lang_math_pow : // fall thru
1523 case Interpreter::java_lang_math_exp : entry_point = ((InterpreterGenerator*)this)->generate_math_entry(kind); break;
1524 case Interpreter::java_lang_ref_reference_get
1525 : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break;
1526 default : ShouldNotReachHere(); break;
1527 }
1528
1529 if (entry_point) return entry_point;
1530
1531 return ((InterpreterGenerator*)this)->generate_normal_entry(synchronized);
1532
1533 }
1534
1535 // These should never be compiled since the interpreter will prefer
1536 // the compiled version to the intrinsic version.
1537 bool AbstractInterpreter::can_be_compiled(methodHandle m) {
1538 switch (method_kind(m)) {
1539 case Interpreter::java_lang_math_sin : // fall thru
1540 case Interpreter::java_lang_math_cos : // fall thru
1541 case Interpreter::java_lang_math_tan : // fall thru
1542 case Interpreter::java_lang_math_abs : // fall thru
1543 case Interpreter::java_lang_math_log : // fall thru
1544 case Interpreter::java_lang_math_log10 : // fall thru
1545 case Interpreter::java_lang_math_sqrt : // fall thru
1546 case Interpreter::java_lang_math_pow : // fall thru
1547 case Interpreter::java_lang_math_exp :
1548 return false;
1549 default:
1550 return true;
1551 }
1552 }
1553
1554 // How much stack a method activation needs in words.
1555 int AbstractInterpreter::size_top_interpreter_activation(methodOop method) {
1556
1557 const int stub_code = 4; // see generate_call_stub
1558 // Save space for one monitor to get into the interpreted method in case
1559 // the method is synchronized
1560 int monitor_size = method->is_synchronized() ?
1561 1*frame::interpreter_frame_monitor_size() : 0;
1562
1563 // total overhead size: entry_size + (saved rbp, thru expr stack bottom).
1564 // be sure to change this if you add/subtract anything to/from the overhead area
1565 const int overhead_size = -frame::interpreter_frame_initial_sp_offset;
1566
1567 const int extra_stack = methodOopDesc::extra_stack_entries();
|