174 // if the compilation did not complete (either went background or bailed out).
175 __ set((int)false, O2);
176 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::frequency_counter_overflow), O2, O2, true);
177 // returns verified_entry_point or NULL
178 // we ignore it in any case
179 __ ba_short(Lcontinue);
180 }
181
182
183 // End of helpers
184
185 // Various method entries
186
187 // Abstract method entry
188 // Attempt to execute abstract method. Throw exception
189 //
190 address TemplateInterpreterGenerator::generate_abstract_entry(void) {
191 address entry = __ pc();
192 // abstract method entry
193 // throw exception
194 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_AbstractMethodError));
195 // the call_VM checks for exception, so we should never return here.
196 __ should_not_reach_here();
197 return entry;
198 }
199
200 void TemplateInterpreterGenerator::save_native_result(void) {
201 // result potentially in O0/O1: save it across calls
202 const Address& l_tmp = InterpreterMacroAssembler::l_tmp;
203
204 // result potentially in F0/F1: save it across calls
205 const Address& d_tmp = InterpreterMacroAssembler::d_tmp;
206
207 // save and restore any potential method result value around the unlocking operation
208 __ stf(FloatRegisterImpl::D, F0, d_tmp);
209 __ stx(O0, l_tmp);
210 }
211
212 void TemplateInterpreterGenerator::restore_native_result(void) {
213 const Address& l_tmp = InterpreterMacroAssembler::l_tmp;
214 const Address& d_tmp = InterpreterMacroAssembler::d_tmp;
|
174 // if the compilation did not complete (either went background or bailed out).
175 __ set((int)false, O2);
176 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::frequency_counter_overflow), O2, O2, true);
177 // returns verified_entry_point or NULL
178 // we ignore it in any case
179 __ ba_short(Lcontinue);
180 }
181
182
183 // End of helpers
184
185 // Various method entries
186
187 // Abstract method entry
188 // Attempt to execute abstract method. Throw exception
189 //
190 address TemplateInterpreterGenerator::generate_abstract_entry(void) {
191 address entry = __ pc();
192 // abstract method entry
193 // throw exception
194 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_AbstractMethodErrorWithMethod), G5_method);
195 // the call_VM checks for exception, so we should never return here.
196 __ should_not_reach_here();
197 return entry;
198 }
199
200 void TemplateInterpreterGenerator::save_native_result(void) {
201 // result potentially in O0/O1: save it across calls
202 const Address& l_tmp = InterpreterMacroAssembler::l_tmp;
203
204 // result potentially in F0/F1: save it across calls
205 const Address& d_tmp = InterpreterMacroAssembler::d_tmp;
206
207 // save and restore any potential method result value around the unlocking operation
208 __ stf(FloatRegisterImpl::D, F0, d_tmp);
209 __ stx(O0, l_tmp);
210 }
211
212 void TemplateInterpreterGenerator::restore_native_result(void) {
213 const Address& l_tmp = InterpreterMacroAssembler::l_tmp;
214 const Address& d_tmp = InterpreterMacroAssembler::d_tmp;
|