comparison src/share/vm/interpreter/bytecodeInterpreter.cpp @ 10233:e60b3fce2b02

8013067: Zero builds are broken after 8010862. Summary: Fixed broken Zero build. Reviewed-by: twisti, coleenp, kvn
author jiangli
date Mon, 06 May 2013 19:57:35 -0400
parents 9fae07c31641
children 603ca7e51354
comparison
equal deleted inserted replaced
10172:e01e02a9fcb6 10233:e60b3fce2b02
30 #include "interpreter/bytecodeInterpreter.inline.hpp" 30 #include "interpreter/bytecodeInterpreter.inline.hpp"
31 #include "interpreter/interpreter.hpp" 31 #include "interpreter/interpreter.hpp"
32 #include "interpreter/interpreterRuntime.hpp" 32 #include "interpreter/interpreterRuntime.hpp"
33 #include "memory/cardTableModRefBS.hpp" 33 #include "memory/cardTableModRefBS.hpp"
34 #include "memory/resourceArea.hpp" 34 #include "memory/resourceArea.hpp"
35 #include "oops/methodCounters.hpp"
35 #include "oops/objArrayKlass.hpp" 36 #include "oops/objArrayKlass.hpp"
36 #include "oops/oop.inline.hpp" 37 #include "oops/oop.inline.hpp"
37 #include "prims/jvmtiExport.hpp" 38 #include "prims/jvmtiExport.hpp"
38 #include "runtime/frame.inline.hpp" 39 #include "runtime/frame.inline.hpp"
39 #include "runtime/handles.inline.hpp" 40 #include "runtime/handles.inline.hpp"
302 istate->set_bcp(pc+opsize); \ 303 istate->set_bcp(pc+opsize); \
303 return; 304 return;
304 305
305 306
306 #define METHOD istate->method() 307 #define METHOD istate->method()
307 #define INVOCATION_COUNT METHOD->invocation_counter() 308 #define GET_METHOD_COUNTERS(res) \
308 #define BACKEDGE_COUNT METHOD->backedge_counter() 309 res = METHOD->method_counters(); \
309 310 if (res == NULL) { \
310 311 CALL_VM(res = InterpreterRuntime::build_method_counters(THREAD, METHOD), handle_exception); \
311 #define INCR_INVOCATION_COUNT INVOCATION_COUNT->increment() 312 }
313
312 #define OSR_REQUEST(res, branch_pc) \ 314 #define OSR_REQUEST(res, branch_pc) \
313 CALL_VM(res=InterpreterRuntime::frequency_counter_overflow(THREAD, branch_pc), handle_exception); 315 CALL_VM(res=InterpreterRuntime::frequency_counter_overflow(THREAD, branch_pc), handle_exception);
314 /* 316 /*
315 * For those opcodes that need to have a GC point on a backwards branch 317 * For those opcodes that need to have a GC point on a backwards branch
316 */ 318 */
323 // skip is delta from current bcp/bci for target, branch_pc is pre-branch bcp 325 // skip is delta from current bcp/bci for target, branch_pc is pre-branch bcp
324 326
325 327
326 #define DO_BACKEDGE_CHECKS(skip, branch_pc) \ 328 #define DO_BACKEDGE_CHECKS(skip, branch_pc) \
327 if ((skip) <= 0) { \ 329 if ((skip) <= 0) { \
330 MethodCounters* mcs; \
331 GET_METHOD_COUNTERS(mcs); \
328 if (UseLoopCounter) { \ 332 if (UseLoopCounter) { \
329 bool do_OSR = UseOnStackReplacement; \ 333 bool do_OSR = UseOnStackReplacement; \
330 BACKEDGE_COUNT->increment(); \ 334 mcs->backedge_counter()->increment(); \
331 if (do_OSR) do_OSR = BACKEDGE_COUNT->reached_InvocationLimit(); \ 335 if (do_OSR) do_OSR = mcs->backedge_counter()->reached_InvocationLimit(); \
332 if (do_OSR) { \ 336 if (do_OSR) { \
333 nmethod* osr_nmethod; \ 337 nmethod* osr_nmethod; \
334 OSR_REQUEST(osr_nmethod, branch_pc); \ 338 OSR_REQUEST(osr_nmethod, branch_pc); \
335 if (osr_nmethod != NULL && osr_nmethod->osr_entry_bci() != InvalidOSREntryBci) { \ 339 if (osr_nmethod != NULL && osr_nmethod->osr_entry_bci() != InvalidOSREntryBci) { \
336 intptr_t* buf = SharedRuntime::OSR_migration_begin(THREAD); \ 340 intptr_t* buf = SharedRuntime::OSR_migration_begin(THREAD); \
339 istate->set_osr_entry(osr_nmethod->osr_entry()); \ 343 istate->set_osr_entry(osr_nmethod->osr_entry()); \
340 return; \ 344 return; \
341 } \ 345 } \
342 } \ 346 } \
343 } /* UseCompiler ... */ \ 347 } /* UseCompiler ... */ \
344 INCR_INVOCATION_COUNT; \ 348 mcs->invocation_counter()->increment(); \
345 SAFEPOINT; \ 349 SAFEPOINT; \
346 } 350 }
347 351
348 /* 352 /*
349 * For those opcodes that need to have a GC point on a backwards branch 353 * For those opcodes that need to have a GC point on a backwards branch
616 case method_entry: { 620 case method_entry: {
617 THREAD->set_do_not_unlock(); 621 THREAD->set_do_not_unlock();
618 // count invocations 622 // count invocations
619 assert(initialized, "Interpreter not initialized"); 623 assert(initialized, "Interpreter not initialized");
620 if (_compiling) { 624 if (_compiling) {
625 MethodCounters* mcs;
626 GET_METHOD_COUNTERS(mcs);
621 if (ProfileInterpreter) { 627 if (ProfileInterpreter) {
622 METHOD->increment_interpreter_invocation_count(); 628 METHOD->increment_interpreter_invocation_count(THREAD);
623 } 629 }
624 INCR_INVOCATION_COUNT; 630 mcs->invocation_counter()->increment();
625 if (INVOCATION_COUNT->reached_InvocationLimit()) { 631 if (mcs->invocation_counter()->reached_InvocationLimit()) {
626 CALL_VM((void)InterpreterRuntime::frequency_counter_overflow(THREAD, NULL), handle_exception); 632 CALL_VM((void)InterpreterRuntime::frequency_counter_overflow(THREAD, NULL), handle_exception);
627 633
628 // We no longer retry on a counter overflow 634 // We no longer retry on a counter overflow
629 635
630 // istate->set_msg(retry_method); 636 // istate->set_msg(retry_method);