51 case T_ARRAY : i = 5; break;
52 #else
53 case T_VOID : i = 0; break;
54 case T_BOOLEAN: i = 1; break;
55 case T_CHAR : i = 2; break;
56 case T_BYTE : i = 3; break;
57 case T_SHORT : i = 4; break;
58 case T_INT : i = 5; break;
59 case T_OBJECT : // fall through
60 case T_ARRAY : i = 6; break;
61 case T_LONG : i = 7; break;
62 case T_FLOAT : i = 8; break;
63 case T_DOUBLE : i = 9; break;
64 #endif // AARCH64
65 default : ShouldNotReachHere();
66 }
67 assert(0 <= i && i < AbstractInterpreter::number_of_result_handlers, "index out of bounds");
68 return i;
69 }
70
71 // These should never be compiled since the interpreter will prefer
72 // the compiled version to the intrinsic version.
73 bool AbstractInterpreter::can_be_compiled(methodHandle m) {
74 switch (method_kind(m)) {
75 case Interpreter::java_lang_math_sin : // fall thru
76 case Interpreter::java_lang_math_cos : // fall thru
77 case Interpreter::java_lang_math_tan : // fall thru
78 case Interpreter::java_lang_math_abs : // fall thru
79 case Interpreter::java_lang_math_log : // fall thru
80 case Interpreter::java_lang_math_log10 : // fall thru
81 case Interpreter::java_lang_math_sqrt :
82 return false;
83 default:
84 return true;
85 }
86 }
87
88 // How much stack a method activation needs in words.
89 int AbstractInterpreter::size_top_interpreter_activation(Method* method) {
90 const int stub_code = AARCH64_ONLY(24) NOT_AARCH64(12); // see generate_call_stub
91 // Save space for one monitor to get into the interpreted method in case
92 // the method is synchronized
93 int monitor_size = method->is_synchronized() ?
94 1*frame::interpreter_frame_monitor_size() : 0;
95
96 // total overhead size: monitor_size + (sender SP, thru expr stack bottom).
97 // be sure to change this if you add/subtract anything to/from the overhead area
98 const int overhead_size = monitor_size +
99 (frame::sender_sp_offset - frame::interpreter_frame_initial_sp_offset);
100 const int method_stack = (method->max_locals() + method->max_stack()) *
101 Interpreter::stackElementWords;
102 return overhead_size + method_stack + stub_code;
103 }
104
105 // asm based interpreter deoptimization helpers
106 int AbstractInterpreter::size_activation(int max_stack,
107 int tempcount,
|
51 case T_ARRAY : i = 5; break;
52 #else
53 case T_VOID : i = 0; break;
54 case T_BOOLEAN: i = 1; break;
55 case T_CHAR : i = 2; break;
56 case T_BYTE : i = 3; break;
57 case T_SHORT : i = 4; break;
58 case T_INT : i = 5; break;
59 case T_OBJECT : // fall through
60 case T_ARRAY : i = 6; break;
61 case T_LONG : i = 7; break;
62 case T_FLOAT : i = 8; break;
63 case T_DOUBLE : i = 9; break;
64 #endif // AARCH64
65 default : ShouldNotReachHere();
66 }
67 assert(0 <= i && i < AbstractInterpreter::number_of_result_handlers, "index out of bounds");
68 return i;
69 }
70
71 // How much stack a method activation needs in words.
72 int AbstractInterpreter::size_top_interpreter_activation(Method* method) {
73 const int stub_code = AARCH64_ONLY(24) NOT_AARCH64(12); // see generate_call_stub
74 // Save space for one monitor to get into the interpreted method in case
75 // the method is synchronized
76 int monitor_size = method->is_synchronized() ?
77 1*frame::interpreter_frame_monitor_size() : 0;
78
79 // total overhead size: monitor_size + (sender SP, thru expr stack bottom).
80 // be sure to change this if you add/subtract anything to/from the overhead area
81 const int overhead_size = monitor_size +
82 (frame::sender_sp_offset - frame::interpreter_frame_initial_sp_offset);
83 const int method_stack = (method->max_locals() + method->max_stack()) *
84 Interpreter::stackElementWords;
85 return overhead_size + method_stack + stub_code;
86 }
87
88 // asm based interpreter deoptimization helpers
89 int AbstractInterpreter::size_activation(int max_stack,
90 int tempcount,
|