Mercurial > hg > truffle
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()) { |