@@ -68,10 +68,6 @@ void TemplateInterpreterGenerator::generate_all() {
68
68
CodeletMark cm (_masm, " bytecode tracing support" );
69
69
Interpreter::_trace_code =
70
70
EntryPoint (
71
- generate_trace_code (btos),
72
- generate_trace_code (ztos),
73
- generate_trace_code (ctos),
74
- generate_trace_code (stos),
75
71
generate_trace_code (atos),
76
72
generate_trace_code (itos),
77
73
generate_trace_code (ltos),
@@ -83,50 +79,54 @@ void TemplateInterpreterGenerator::generate_all() {
83
79
#endif // !PRODUCT
84
80
85
81
{ CodeletMark cm (_masm, " return entry points" );
86
- const int index_size = sizeof (u2);
87
82
Interpreter::_return_entry[0 ] = EntryPoint ();
88
83
for (int i = 1 ; i < Interpreter::number_of_return_entries; i++) {
89
- address return_itos = generate_return_entry_for (itos, i, index_size);
90
84
Interpreter::_return_entry[i] =
91
85
EntryPoint (
92
- return_itos,
93
- return_itos,
94
- return_itos,
95
- return_itos,
96
- generate_return_entry_for (atos, i, index_size),
97
- return_itos,
98
- generate_return_entry_for (ltos, i, index_size),
99
- generate_return_entry_for (ftos, i, index_size),
100
- generate_return_entry_for (dtos, i, index_size),
101
- generate_return_entry_for (vtos, i, index_size)
86
+ generate_return_entry_for (atos, i, sizeof (u2)),
87
+ generate_return_entry_for (itos, i, sizeof (u2)),
88
+ generate_return_entry_for (ltos, i, sizeof (u2)),
89
+ generate_return_entry_for (ftos, i, sizeof (u2)),
90
+ generate_return_entry_for (dtos, i, sizeof (u2)),
91
+ generate_return_entry_for (vtos, i, sizeof (u2))
102
92
);
103
93
}
104
94
}
105
95
106
96
{ CodeletMark cm (_masm, " invoke return entry points" );
107
- // These states are in order specified in TosState, except btos/ztos/ctos/stos are
108
- // really the same as itos since there is no top of stack optimization for these types
109
- const TosState states[] = {itos, itos, itos, itos , itos, ltos, ftos, dtos, atos, vtos, ilgl};
97
+ // These states are in order specified in TosState, except btos/ztos/ctos/stos which
98
+ // are the same as itos since there is no top of stack optimization for these types
99
+ const TosState states[] = {ilgl, ilgl, ilgl, ilgl , itos, ltos, ftos, dtos, atos, vtos, ilgl};
110
100
const int invoke_length = Bytecodes::length_for (Bytecodes::_invokestatic);
111
101
const int invokeinterface_length = Bytecodes::length_for (Bytecodes::_invokeinterface);
112
102
const int invokedynamic_length = Bytecodes::length_for (Bytecodes::_invokedynamic);
113
103
114
- for (int i = 0 ; i < Interpreter::number_of_return_addrs; i++) {
104
+ assert (invoke_length >= 0 && invoke_length < Interpreter::number_of_return_entries, " invariant" );
105
+ assert (invokeinterface_length >= 0 && invokeinterface_length < Interpreter::number_of_return_entries, " invariant" );
106
+
107
+ for (int i = itos; i < Interpreter::number_of_return_addrs; i++) {
115
108
TosState state = states[i];
116
109
assert (state != ilgl, " states array is wrong above" );
117
- Interpreter::_invoke_return_entry[i] = generate_return_entry_for (state, invoke_length, sizeof (u2));
118
- Interpreter::_invokeinterface_return_entry[i] = generate_return_entry_for (state, invokeinterface_length, sizeof (u2));
119
- Interpreter::_invokedynamic_return_entry[i] = generate_return_entry_for (state, invokedynamic_length, sizeof (u4));
110
+
111
+ // Reuse generated entry points
112
+ Interpreter::_invoke_return_entry[i] = Interpreter::_return_entry[invoke_length].entry (state);
113
+ Interpreter::_invokeinterface_return_entry[i] = Interpreter::_return_entry[invokeinterface_length].entry (state);
114
+
115
+ Interpreter::_invokedynamic_return_entry[i] = generate_return_entry_for (state, invokedynamic_length, sizeof (u4));
116
+ }
117
+
118
+ // set itos entry points for btos/ztos/ctos/stos
119
+ for (int i = 0 ; i < itos; i++) {
120
+ Interpreter::_invoke_return_entry[i] = Interpreter::_invoke_return_entry[itos];
121
+ Interpreter::_invokeinterface_return_entry[i] = Interpreter::_invokeinterface_return_entry[itos];
122
+ Interpreter::_invokedynamic_return_entry[i] = Interpreter::_invokedynamic_return_entry[itos];
120
123
}
121
124
}
122
125
123
126
{ CodeletMark cm (_masm, " earlyret entry points" );
127
+ address earlyret_entry_itos = generate_earlyret_entry_for (itos);
124
128
Interpreter::_earlyret_entry =
125
129
EntryPoint (
126
- generate_earlyret_entry_for (btos),
127
- generate_earlyret_entry_for (ztos),
128
- generate_earlyret_entry_for (ctos),
129
- generate_earlyret_entry_for (stos),
130
130
generate_earlyret_entry_for (atos),
131
131
generate_earlyret_entry_for (itos),
132
132
generate_earlyret_entry_for (ltos),
@@ -153,10 +153,6 @@ void TemplateInterpreterGenerator::generate_all() {
153
153
{ CodeletMark cm (_masm, " safepoint entry points" );
154
154
Interpreter::_safept_entry =
155
155
EntryPoint (
156
- generate_safept_entry_for (btos, CAST_FROM_FN_PTR (address, InterpreterRuntime::at_safepoint)),
157
- generate_safept_entry_for (ztos, CAST_FROM_FN_PTR (address, InterpreterRuntime::at_safepoint)),
158
- generate_safept_entry_for (ctos, CAST_FROM_FN_PTR (address, InterpreterRuntime::at_safepoint)),
159
- generate_safept_entry_for (stos, CAST_FROM_FN_PTR (address, InterpreterRuntime::at_safepoint)),
160
156
generate_safept_entry_for (atos, CAST_FROM_FN_PTR (address, InterpreterRuntime::at_safepoint)),
161
157
generate_safept_entry_for (itos, CAST_FROM_FN_PTR (address, InterpreterRuntime::at_safepoint)),
162
158
generate_safept_entry_for (ltos, CAST_FROM_FN_PTR (address, InterpreterRuntime::at_safepoint)),
@@ -242,12 +238,8 @@ void TemplateInterpreterGenerator::generate_all() {
242
238
address deopt_itos = generate_deopt_entry_for (itos, i);
243
239
Interpreter::_deopt_entry[i] =
244
240
EntryPoint (
245
- deopt_itos, /* btos */
246
- deopt_itos, /* ztos */
247
- deopt_itos, /* ctos */
248
- deopt_itos, /* stos */
249
241
generate_deopt_entry_for (atos, i),
250
- deopt_itos, /* itos */
242
+ generate_deopt_entry_for (itos, i),
251
243
generate_deopt_entry_for (ltos, i),
252
244
generate_deopt_entry_for (ftos, i),
253
245
generate_deopt_entry_for (dtos, i),
0 commit comments