< prev index next >

src/hotspot/cpu/sparc/templateInterpreterGenerator_sparc.cpp

Print this page
rev 49103 : 8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors.
Reviewed-by: coleenp, dholmes, mdoerr, njian


 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;


< prev index next >