Mercurial > hg > truffle
comparison src/share/vm/runtime/os.cpp @ 6266:1d7922586cf6
7023639: JSR 292 method handle invocation needs a fast path for compiled code
6984705: JSR 292 method handle creation should not go through JNI
Summary: remove assembly code for JDK 7 chained method handles
Reviewed-by: jrose, twisti, kvn, mhaupt
Contributed-by: John Rose <john.r.rose@oracle.com>, Christian Thalinger <christian.thalinger@oracle.com>, Michael Haupt <michael.haupt@oracle.com>
author | twisti |
---|---|
date | Tue, 24 Jul 2012 10:51:00 -0700 |
parents | d2a62e0f25eb |
children | 957c266d8bc5 da91efe96a93 |
comparison
equal
deleted
inserted
replaced
6241:aba91a731143 | 6266:1d7922586cf6 |
---|---|
820 if (b != NULL) { | 820 if (b != NULL) { |
821 if (b->is_buffer_blob()) { | 821 if (b->is_buffer_blob()) { |
822 // the interpreter is generated into a buffer blob | 822 // the interpreter is generated into a buffer blob |
823 InterpreterCodelet* i = Interpreter::codelet_containing(addr); | 823 InterpreterCodelet* i = Interpreter::codelet_containing(addr); |
824 if (i != NULL) { | 824 if (i != NULL) { |
825 st->print_cr(INTPTR_FORMAT " is an Interpreter codelet", addr); | 825 st->print_cr(INTPTR_FORMAT " is at code_begin+%d in an Interpreter codelet", addr, (int)(addr - i->code_begin())); |
826 i->print_on(st); | 826 i->print_on(st); |
827 return; | 827 return; |
828 } | 828 } |
829 if (Interpreter::contains(addr)) { | 829 if (Interpreter::contains(addr)) { |
830 st->print_cr(INTPTR_FORMAT " is pointing into interpreter code" | 830 st->print_cr(INTPTR_FORMAT " is pointing into interpreter code" |
831 " (not bytecode specific)", addr); | 831 " (not bytecode specific)", addr); |
832 return; | 832 return; |
833 } | 833 } |
834 // | 834 // |
835 if (AdapterHandlerLibrary::contains(b)) { | 835 if (AdapterHandlerLibrary::contains(b)) { |
836 st->print_cr(INTPTR_FORMAT " is an AdapterHandler", addr); | 836 st->print_cr(INTPTR_FORMAT " is at code_begin+%d in an AdapterHandler", addr, (int)(addr - b->code_begin())); |
837 AdapterHandlerLibrary::print_handler_on(st, b); | 837 AdapterHandlerLibrary::print_handler_on(st, b); |
838 } | 838 } |
839 // the stubroutines are generated into a buffer blob | 839 // the stubroutines are generated into a buffer blob |
840 StubCodeDesc* d = StubCodeDesc::desc_for(addr); | 840 StubCodeDesc* d = StubCodeDesc::desc_for(addr); |
841 if (d != NULL) { | 841 if (d != NULL) { |
842 st->print_cr(INTPTR_FORMAT " is at begin+%d in a stub", addr, (int)(addr - d->begin())); | |
842 d->print_on(st); | 843 d->print_on(st); |
843 if (verbose) st->cr(); | 844 st->cr(); |
844 return; | 845 return; |
845 } | 846 } |
846 if (StubRoutines::contains(addr)) { | 847 if (StubRoutines::contains(addr)) { |
847 st->print_cr(INTPTR_FORMAT " is pointing to an (unnamed) " | 848 st->print_cr(INTPTR_FORMAT " is pointing to an (unnamed) " |
848 "stub routine", addr); | 849 "stub routine", addr); |
853 st->print_cr(INTPTR_FORMAT " is pointing into InlineCacheBuffer", addr); | 854 st->print_cr(INTPTR_FORMAT " is pointing into InlineCacheBuffer", addr); |
854 return; | 855 return; |
855 } | 856 } |
856 VtableStub* v = VtableStubs::stub_containing(addr); | 857 VtableStub* v = VtableStubs::stub_containing(addr); |
857 if (v != NULL) { | 858 if (v != NULL) { |
859 st->print_cr(INTPTR_FORMAT " is at entry_point+%d in a vtable stub", addr, (int)(addr - v->entry_point())); | |
858 v->print_on(st); | 860 v->print_on(st); |
861 st->cr(); | |
859 return; | 862 return; |
860 } | 863 } |
861 } | 864 } |
862 if (verbose && b->is_nmethod()) { | 865 nmethod* nm = b->as_nmethod_or_null(); |
866 if (nm != NULL) { | |
863 ResourceMark rm; | 867 ResourceMark rm; |
864 st->print("%#p: Compiled ", addr); | 868 st->print(INTPTR_FORMAT " is at entry_point+%d in (nmethod*)" INTPTR_FORMAT, |
865 ((nmethod*)b)->method()->print_value_on(st); | 869 addr, (int)(addr - nm->entry_point()), nm); |
866 st->print(" = (CodeBlob*)" INTPTR_FORMAT, b); | 870 if (verbose) { |
867 st->cr(); | 871 st->print(" for "); |
872 nm->method()->print_value_on(st); | |
873 } | |
874 nm->print_nmethod(verbose); | |
868 return; | 875 return; |
869 } | 876 } |
870 st->print(INTPTR_FORMAT " ", b); | 877 st->print_cr(INTPTR_FORMAT " is at code_begin+%d in ", addr, (int)(addr - b->code_begin())); |
871 if ( b->is_nmethod()) { | |
872 if (b->is_zombie()) { | |
873 st->print_cr("is zombie nmethod"); | |
874 } else if (b->is_not_entrant()) { | |
875 st->print_cr("is non-entrant nmethod"); | |
876 } | |
877 } | |
878 b->print_on(st); | 878 b->print_on(st); |
879 return; | 879 return; |
880 } | 880 } |
881 | 881 |
882 if (Universe::heap()->is_in(addr)) { | 882 if (Universe::heap()->is_in(addr)) { |