102 protected:
103
104 static address _throw_ArrayIndexOutOfBoundsException_entry;
105 static address _throw_ArrayStoreException_entry;
106 static address _throw_ArithmeticException_entry;
107 static address _throw_ClassCastException_entry;
108 static address _throw_NullPointerException_entry;
109 static address _throw_exception_entry;
110
111 static address _throw_StackOverflowError_entry;
112
113 static address _remove_activation_entry; // continuation address if an exception is not handled by current frame
114 #ifdef HOTSWAP
115 static address _remove_activation_preserving_args_entry; // continuation address when current frame is being popped
116 #endif // HOTSWAP
117
118 #ifndef PRODUCT
119 static EntryPoint _trace_code;
120 #endif // !PRODUCT
121 static EntryPoint _return_entry[number_of_return_entries]; // entry points to return to from a call
122 static EntryPoint _earlyret_entry; // entry point to return early from a call
123 static EntryPoint _deopt_entry[number_of_deopt_entries]; // entry points to return to from a deoptimization
124 static address _deopt_reexecute_return_entry;
125 static EntryPoint _safept_entry;
126
127 static address _invoke_return_entry[number_of_return_addrs]; // for invokestatic, invokespecial, invokevirtual return entries
128 static address _invokeinterface_return_entry[number_of_return_addrs]; // for invokeinterface return entries
129 static address _invokedynamic_return_entry[number_of_return_addrs]; // for invokedynamic return entries
130
131 static DispatchTable _active_table; // the active dispatch table (used by the interpreter for dispatch)
132 static DispatchTable _normal_table; // the normal dispatch table (used to set the active table in normal mode)
133 static DispatchTable _safept_table; // the safepoint dispatch table (used to set the active table for safepoints)
134 static address _wentry_point[DispatchTable::length]; // wide instructions only (vtos tosca always)
135
136
137 public:
138 // Initialization/debugging
139 static void initialize();
140 // this only returns whether a pc is within generated code for the interpreter.
141 static bool contains(address pc) { return _code != NULL && _code->contains(pc); }
142 // Debugging/printing
143 static InterpreterCodelet* codelet_containing(address pc);
144
145
146 public:
147
161 static address trace_code (TosState state) { return _trace_code.entry(state); }
162 #endif // !PRODUCT
163 static address* dispatch_table(TosState state) { return _active_table.table_for(state); }
164 static address* dispatch_table() { return _active_table.table_for(); }
165 static int distance_from_dispatch_table(TosState state){ return _active_table.distance_from(state); }
166 static address* normal_table(TosState state) { return _normal_table.table_for(state); }
167 static address* normal_table() { return _normal_table.table_for(); }
168 static address* safept_table(TosState state) { return _safept_table.table_for(state); }
169
170 // Support for invokes
171 static address* invoke_return_entry_table() { return _invoke_return_entry; }
172 static address* invokeinterface_return_entry_table() { return _invokeinterface_return_entry; }
173 static address* invokedynamic_return_entry_table() { return _invokedynamic_return_entry; }
174 static int TosState_as_index(TosState state);
175
176 static address* invoke_return_entry_table_for(Bytecodes::Code code);
177
178 static address deopt_entry(TosState state, int length);
179 static address deopt_reexecute_return_entry() { return _deopt_reexecute_return_entry; }
180 static address return_entry(TosState state, int length, Bytecodes::Code code);
181
182 // Safepoint support
183 static void notice_safepoints(); // stops the thread when reaching a safepoint
184 static void ignore_safepoints(); // ignores safepoints
185
186 // Deoptimization support
187 // Compute the entry address for continuation after
188 static address deopt_continue_after_entry(Method* method,
189 address bcp,
190 int callee_parameters,
191 bool is_top_frame);
192 // Deoptimization should reexecute this bytecode
193 static bool bytecode_should_reexecute(Bytecodes::Code code);
194 // Compute the address for reexecution
195 static address deopt_reexecute_entry(Method* method, address bcp);
196
197 // Size of interpreter code. Max size with JVMTI
198 static int InterpreterCodeSize;
199 };
200
|
102 protected:
103
104 static address _throw_ArrayIndexOutOfBoundsException_entry;
105 static address _throw_ArrayStoreException_entry;
106 static address _throw_ArithmeticException_entry;
107 static address _throw_ClassCastException_entry;
108 static address _throw_NullPointerException_entry;
109 static address _throw_exception_entry;
110
111 static address _throw_StackOverflowError_entry;
112
113 static address _remove_activation_entry; // continuation address if an exception is not handled by current frame
114 #ifdef HOTSWAP
115 static address _remove_activation_preserving_args_entry; // continuation address when current frame is being popped
116 #endif // HOTSWAP
117
118 #ifndef PRODUCT
119 static EntryPoint _trace_code;
120 #endif // !PRODUCT
121 static EntryPoint _return_entry[number_of_return_entries]; // entry points to return to from a call
122 static EntryPoint _return_entryX[number_of_return_entries]; // entry points to return to from a call
123 static EntryPoint _earlyret_entry; // entry point to return early from a call
124 static EntryPoint _deopt_entry[number_of_deopt_entries]; // entry points to return to from a deoptimization
125 static address _deopt_reexecute_return_entry;
126 static EntryPoint _safept_entry;
127
128 static address _invoke_return_entry[number_of_return_addrs]; // for invokestatic, invokespecial, invokevirtual return entries
129 static address _invoke_return_entryX[number_of_return_addrs]; // for invokestatic, invokespecial, invokevirtual return entries
130 static address _invokeinterface_return_entry[number_of_return_addrs]; // for invokeinterface return entries
131 static address _invokedynamic_return_entry[number_of_return_addrs]; // for invokedynamic return entries
132
133 static DispatchTable _active_table; // the active dispatch table (used by the interpreter for dispatch)
134 static DispatchTable _normal_table; // the normal dispatch table (used to set the active table in normal mode)
135 static DispatchTable _safept_table; // the safepoint dispatch table (used to set the active table for safepoints)
136 static address _wentry_point[DispatchTable::length]; // wide instructions only (vtos tosca always)
137
138
139 public:
140 // Initialization/debugging
141 static void initialize();
142 // this only returns whether a pc is within generated code for the interpreter.
143 static bool contains(address pc) { return _code != NULL && _code->contains(pc); }
144 // Debugging/printing
145 static InterpreterCodelet* codelet_containing(address pc);
146
147
148 public:
149
163 static address trace_code (TosState state) { return _trace_code.entry(state); }
164 #endif // !PRODUCT
165 static address* dispatch_table(TosState state) { return _active_table.table_for(state); }
166 static address* dispatch_table() { return _active_table.table_for(); }
167 static int distance_from_dispatch_table(TosState state){ return _active_table.distance_from(state); }
168 static address* normal_table(TosState state) { return _normal_table.table_for(state); }
169 static address* normal_table() { return _normal_table.table_for(); }
170 static address* safept_table(TosState state) { return _safept_table.table_for(state); }
171
172 // Support for invokes
173 static address* invoke_return_entry_table() { return _invoke_return_entry; }
174 static address* invokeinterface_return_entry_table() { return _invokeinterface_return_entry; }
175 static address* invokedynamic_return_entry_table() { return _invokedynamic_return_entry; }
176 static int TosState_as_index(TosState state);
177
178 static address* invoke_return_entry_table_for(Bytecodes::Code code);
179
180 static address deopt_entry(TosState state, int length);
181 static address deopt_reexecute_return_entry() { return _deopt_reexecute_return_entry; }
182 static address return_entry(TosState state, int length, Bytecodes::Code code);
183 static address return_entry(TosState state, int length, Bytecodes::Code code, bool X);
184
185 // Safepoint support
186 static void notice_safepoints(); // stops the thread when reaching a safepoint
187 static void ignore_safepoints(); // ignores safepoints
188
189 // Deoptimization support
190 // Compute the entry address for continuation after
191 static address deopt_continue_after_entry(Method* method,
192 address bcp,
193 int callee_parameters,
194 bool is_top_frame);
195 // Deoptimization should reexecute this bytecode
196 static bool bytecode_should_reexecute(Bytecodes::Code code);
197 // Compute the address for reexecution
198 static address deopt_reexecute_entry(Method* method, address bcp);
199
200 // Size of interpreter code. Max size with JVMTI
201 static int InterpreterCodeSize;
202 };
203
|