< prev index next >

src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp

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


1337     generate_counter_overflow(continue_after_compile);
1338   }
1339 
1340   return entry_point;
1341 }
1342 
1343 // Abstract method entry
1344 // Attempt to execute abstract method. Throw exception
1345 address TemplateInterpreterGenerator::generate_abstract_entry(void) {
1346 
1347   address entry_point = __ pc();
1348 
1349   // abstract method entry
1350 
1351   //  pop return address, reset last_sp to NULL
1352   __ empty_expression_stack();
1353   __ restore_bcp();      // rsi must be correct for exception handler   (was destroyed)
1354   __ restore_locals();   // make sure locals pointer is correct as well (was destroyed)
1355 
1356   // throw exception
1357   __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_AbstractMethodError));
1358   // the call_VM checks for exception, so we should never return here.
1359   __ should_not_reach_here();
1360 
1361   return entry_point;
1362 }
1363 
1364 //
1365 // Generic interpreted method entry to (asm) interpreter
1366 //
1367 address TemplateInterpreterGenerator::generate_normal_entry(bool synchronized) {
1368   // determine code generation flags
1369   bool inc_counter  = UseCompiler || CountCompiledCalls || LogTouchedMethods;
1370 
1371   // ebx: Method*
1372   // rbcp: sender sp
1373   address entry_point = __ pc();
1374 
1375   const Address constMethod(rbx, Method::const_offset());
1376   const Address access_flags(rbx, Method::access_flags_offset());
1377   const Address size_of_parameters(rdx,




1337     generate_counter_overflow(continue_after_compile);
1338   }
1339 
1340   return entry_point;
1341 }
1342 
1343 // Abstract method entry
1344 // Attempt to execute abstract method. Throw exception
1345 address TemplateInterpreterGenerator::generate_abstract_entry(void) {
1346 
1347   address entry_point = __ pc();
1348 
1349   // abstract method entry
1350 
1351   //  pop return address, reset last_sp to NULL
1352   __ empty_expression_stack();
1353   __ restore_bcp();      // rsi must be correct for exception handler   (was destroyed)
1354   __ restore_locals();   // make sure locals pointer is correct as well (was destroyed)
1355 
1356   // throw exception
1357   __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_AbstractMethodErrorWithMethod), rbx);
1358   // the call_VM checks for exception, so we should never return here.
1359   __ should_not_reach_here();
1360 
1361   return entry_point;
1362 }
1363 
1364 //
1365 // Generic interpreted method entry to (asm) interpreter
1366 //
1367 address TemplateInterpreterGenerator::generate_normal_entry(bool synchronized) {
1368   // determine code generation flags
1369   bool inc_counter  = UseCompiler || CountCompiledCalls || LogTouchedMethods;
1370 
1371   // ebx: Method*
1372   // rbcp: sender sp
1373   address entry_point = __ pc();
1374 
1375   const Address constMethod(rbx, Method::const_offset());
1376   const Address access_flags(rbx, Method::access_flags_offset());
1377   const Address size_of_parameters(rdx,


< prev index next >