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,
|