comparison src/share/vm/runtime/sharedRuntime.cpp @ 1429:abc670a709dc

* -XX:TraceC1X=0...5 controls the native c1x tracing * -Dc1x.debug=true turns on the logging proxies and lots of log output on the java side * provide more information about types to the compiler (type hierarchy, etc) * provide exception handler tables to the compiler * add exception handlers to the nmethod * correct implementation of ExceptionObject * exception handling/unwinding entry points * modified versions of handle/unwind exception stubs using standard calling conventions * exception throwing * implicit null pointer exception, implicit div by 0 exception * arraystore/classcast/arrayindex exceptions * checkcast implementation * newarray, anewarray, multinewarray implementation * correct new instance initialization * access to java class mirrors (for ldc) * unresolved methods * class resolving - class patching (asssembly prototype copying)
author Lukas Stadler <lukas.stadler@oracle.com>
date Tue, 31 Aug 2010 22:13:30 -0700
parents 9f5b60a14736
children 72cfb36c6bb2
comparison
equal deleted inserted replaced
1428:695451afc619 1429:abc670a709dc
609 } 609 }
610 610
611 #ifndef PRODUCT 611 #ifndef PRODUCT
612 _implicit_null_throws++; 612 _implicit_null_throws++;
613 #endif 613 #endif
614 target_pc = nm->continuation_for_implicit_exception(pc); 614 if (UseC1X) {
615 target_pc = Runtime1::entry_for(Runtime1::c1x_global_implicit_null_id);
616 } else {
617 target_pc = nm->continuation_for_implicit_exception(pc);
618 }
615 // If there's an unexpected fault, target_pc might be NULL, 619 // If there's an unexpected fault, target_pc might be NULL,
616 // in which case we want to fall through into the normal 620 // in which case we want to fall through into the normal
617 // error handling code. 621 // error handling code.
618 } 622 }
619 623
625 nmethod* nm = CodeCache::find_nmethod(pc); 629 nmethod* nm = CodeCache::find_nmethod(pc);
626 guarantee(nm != NULL, "must have containing nmethod for implicit division-by-zero exceptions"); 630 guarantee(nm != NULL, "must have containing nmethod for implicit division-by-zero exceptions");
627 #ifndef PRODUCT 631 #ifndef PRODUCT
628 _implicit_div0_throws++; 632 _implicit_div0_throws++;
629 #endif 633 #endif
630 target_pc = nm->continuation_for_implicit_exception(pc); 634 if (UseC1X) {
635 target_pc = Runtime1::entry_for(Runtime1::c1x_throw_div0_exception_id);
636 } else {
637 target_pc = nm->continuation_for_implicit_exception(pc);
638 }
631 // If there's an unexpected fault, target_pc might be NULL, 639 // If there's an unexpected fault, target_pc might be NULL,
632 // in which case we want to fall through into the normal 640 // in which case we want to fall through into the normal
633 // error handling code. 641 // error handling code.
634 break; // fall through 642 break; // fall through
635 } 643 }