comparison src/share/vm/code/nmethod.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 760213a60e8b
children 2d26b0046e0d
comparison
equal deleted inserted replaced
1428:695451afc619 1429:abc670a709dc
794 _trap_offset = 0; 794 _trap_offset = 0;
795 #endif // def HAVE_DTRACE_H 795 #endif // def HAVE_DTRACE_H
796 _stub_offset = instructions_offset() + code_buffer->total_offset_of(code_buffer->stubs()->start()); 796 _stub_offset = instructions_offset() + code_buffer->total_offset_of(code_buffer->stubs()->start());
797 797
798 // Exception handler and deopt handler are in the stub section 798 // Exception handler and deopt handler are in the stub section
799 _exception_offset = _stub_offset + offsets->value(CodeOffsets::Exceptions); 799 if (UseC1X) {
800 _deoptimize_offset = _stub_offset + offsets->value(CodeOffsets::Deopt); 800 // c1x produces no stub section
801 _deoptimize_mh_offset = _stub_offset + offsets->value(CodeOffsets::DeoptMH); 801 _exception_offset = instructions_offset() + offsets->value(CodeOffsets::Exceptions);
802 _deoptimize_offset = instructions_offset() + offsets->value(CodeOffsets::Deopt);
803 _deoptimize_mh_offset = instructions_offset() + offsets->value(CodeOffsets::DeoptMH);
804 } else {
805 _exception_offset = _stub_offset + offsets->value(CodeOffsets::Exceptions);
806 _deoptimize_offset = _stub_offset + offsets->value(CodeOffsets::Deopt);
807 _deoptimize_mh_offset = _stub_offset + offsets->value(CodeOffsets::DeoptMH);
808 }
802 if (offsets->value(CodeOffsets::UnwindHandler) != -1) { 809 if (offsets->value(CodeOffsets::UnwindHandler) != -1) {
803 _unwind_handler_offset = instructions_offset() + offsets->value(CodeOffsets::UnwindHandler); 810 _unwind_handler_offset = instructions_offset() + offsets->value(CodeOffsets::UnwindHandler);
804 } else { 811 } else {
805 _unwind_handler_offset = -1; 812 _unwind_handler_offset = -1;
806 } 813 }
2440 2447
2441 void nmethod::print_nmethod_labels(outputStream* stream, address block_begin) { 2448 void nmethod::print_nmethod_labels(outputStream* stream, address block_begin) {
2442 if (block_begin == entry_point()) stream->print_cr("[Entry Point]"); 2449 if (block_begin == entry_point()) stream->print_cr("[Entry Point]");
2443 if (block_begin == verified_entry_point()) stream->print_cr("[Verified Entry Point]"); 2450 if (block_begin == verified_entry_point()) stream->print_cr("[Verified Entry Point]");
2444 if (block_begin == exception_begin()) stream->print_cr("[Exception Handler]"); 2451 if (block_begin == exception_begin()) stream->print_cr("[Exception Handler]");
2452 if (block_begin == unwind_handler_begin()) stream->print_cr("[Unwind Handler]");
2445 if (block_begin == stub_begin()) stream->print_cr("[Stub Code]"); 2453 if (block_begin == stub_begin()) stream->print_cr("[Stub Code]");
2446 if (block_begin == deopt_handler_begin()) stream->print_cr("[Deopt Handler Code]"); 2454 if (block_begin == deopt_handler_begin()) stream->print_cr("[Deopt Handler Code]");
2447 if (block_begin == deopt_mh_handler_begin()) stream->print_cr("[Deopt MH Handler Code]"); 2455 if (block_begin == deopt_mh_handler_begin()) stream->print_cr("[Deopt MH Handler Code]");
2448 if (block_begin == consts_begin()) stream->print_cr("[Constants]"); 2456 if (block_begin == consts_begin()) stream->print_cr("[Constants]");
2449 if (block_begin == entry_point()) { 2457 if (block_begin == entry_point()) {