14 * accompanied this code).
15 *
16 * You should have received a copy of the GNU General Public License version
17 * 2 along with this work; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 *
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 * or visit www.oracle.com if you need additional information or have any
22 * questions.
23 *
24 */
25
26 #include "precompiled.hpp"
27 #include "interpreter/interpreter.hpp"
28 #include "oops/constMethod.hpp"
29 #include "oops/method.hpp"
30 #include "runtime/frame.inline.hpp"
31 #include "utilities/debug.hpp"
32 #include "utilities/macros.hpp"
33
34
35 int AbstractInterpreter::BasicType_as_index(BasicType type) {
36 int i = 0;
37 switch (type) {
38 case T_BOOLEAN: i = 0; break;
39 case T_CHAR : i = 1; break;
40 case T_BYTE : i = 2; break;
41 case T_SHORT : i = 3; break;
42 case T_INT : i = 4; break;
43 case T_LONG : i = 5; break;
44 case T_VOID : i = 6; break;
45 case T_FLOAT : i = 7; break;
46 case T_DOUBLE : i = 8; break;
47 case T_OBJECT : i = 9; break;
48 case T_ARRAY : i = 9; break;
49 default : ShouldNotReachHere();
50 }
51 assert(0 <= i && i < AbstractInterpreter::number_of_result_handlers, "index out of bounds");
52 return i;
53 }
62 // We must calc this exactly like in generate_fixed_frame.
63 // Note: This returns the conservative size assuming maximum alignment.
64 int AbstractInterpreter::size_top_interpreter_activation(Method* method) {
65 const int max_alignment_size = 2;
66 const int abi_scratch = frame::abi_reg_args_size;
67 return method->max_locals() + method->max_stack() +
68 frame::interpreter_frame_monitor_size() + max_alignment_size + abi_scratch;
69 }
70
71 // Returns number of stackElementWords needed for the interpreter frame with the
72 // given sections.
73 // This overestimates the stack by one slot in case of alignments.
74 int AbstractInterpreter::size_activation(int max_stack,
75 int temps,
76 int extra_args,
77 int monitors,
78 int callee_params,
79 int callee_locals,
80 bool is_top_frame) {
81 // Note: This calculation must exactly parallel the frame setup
82 // in InterpreterGenerator::generate_fixed_frame.
83 assert(Interpreter::stackElementWords == 1, "sanity");
84 const int max_alignment_space = StackAlignmentInBytes / Interpreter::stackElementSize;
85 const int abi_scratch = is_top_frame ? (frame::abi_reg_args_size / Interpreter::stackElementSize) :
86 (frame::abi_minframe_size / Interpreter::stackElementSize);
87 const int size =
88 max_stack +
89 (callee_locals - callee_params) +
90 monitors * frame::interpreter_frame_monitor_size() +
91 max_alignment_space +
92 abi_scratch +
93 frame::ijava_state_size / Interpreter::stackElementSize;
94
95 // Fixed size of an interpreter frame, align to 16-byte.
96 return (size & -2);
97 }
98
99 // Fills a sceletal interpreter frame generated during deoptimizations.
100 //
101 // Parameters:
102 //
|
14 * accompanied this code).
15 *
16 * You should have received a copy of the GNU General Public License version
17 * 2 along with this work; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 *
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 * or visit www.oracle.com if you need additional information or have any
22 * questions.
23 *
24 */
25
26 #include "precompiled.hpp"
27 #include "interpreter/interpreter.hpp"
28 #include "oops/constMethod.hpp"
29 #include "oops/method.hpp"
30 #include "runtime/frame.inline.hpp"
31 #include "utilities/debug.hpp"
32 #include "utilities/macros.hpp"
33
34 // Size of interpreter code. Increase if too small. Interpreter will
35 // fail with a guarantee ("not enough space for interpreter generation");
36 // if too small.
37 // Run with +PrintInterpreter to get the VM to print out the size.
38 // Max size with JVMTI
39 int TemplateInterpreter::InterpreterCodeSize = 230*K;
40
41 int AbstractInterpreter::BasicType_as_index(BasicType type) {
42 int i = 0;
43 switch (type) {
44 case T_BOOLEAN: i = 0; break;
45 case T_CHAR : i = 1; break;
46 case T_BYTE : i = 2; break;
47 case T_SHORT : i = 3; break;
48 case T_INT : i = 4; break;
49 case T_LONG : i = 5; break;
50 case T_VOID : i = 6; break;
51 case T_FLOAT : i = 7; break;
52 case T_DOUBLE : i = 8; break;
53 case T_OBJECT : i = 9; break;
54 case T_ARRAY : i = 9; break;
55 default : ShouldNotReachHere();
56 }
57 assert(0 <= i && i < AbstractInterpreter::number_of_result_handlers, "index out of bounds");
58 return i;
59 }
68 // We must calc this exactly like in generate_fixed_frame.
69 // Note: This returns the conservative size assuming maximum alignment.
70 int AbstractInterpreter::size_top_interpreter_activation(Method* method) {
71 const int max_alignment_size = 2;
72 const int abi_scratch = frame::abi_reg_args_size;
73 return method->max_locals() + method->max_stack() +
74 frame::interpreter_frame_monitor_size() + max_alignment_size + abi_scratch;
75 }
76
77 // Returns number of stackElementWords needed for the interpreter frame with the
78 // given sections.
79 // This overestimates the stack by one slot in case of alignments.
80 int AbstractInterpreter::size_activation(int max_stack,
81 int temps,
82 int extra_args,
83 int monitors,
84 int callee_params,
85 int callee_locals,
86 bool is_top_frame) {
87 // Note: This calculation must exactly parallel the frame setup
88 // in TemplateInterpreterGenerator::generate_fixed_frame.
89 assert(Interpreter::stackElementWords == 1, "sanity");
90 const int max_alignment_space = StackAlignmentInBytes / Interpreter::stackElementSize;
91 const int abi_scratch = is_top_frame ? (frame::abi_reg_args_size / Interpreter::stackElementSize) :
92 (frame::abi_minframe_size / Interpreter::stackElementSize);
93 const int size =
94 max_stack +
95 (callee_locals - callee_params) +
96 monitors * frame::interpreter_frame_monitor_size() +
97 max_alignment_space +
98 abi_scratch +
99 frame::ijava_state_size / Interpreter::stackElementSize;
100
101 // Fixed size of an interpreter frame, align to 16-byte.
102 return (size & -2);
103 }
104
105 // Fills a sceletal interpreter frame generated during deoptimizations.
106 //
107 // Parameters:
108 //
|