comparison agent/src/share/classes/sun/jvm/hotspot/runtime/Frame.java @ 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 7588156f5cf9
children da91efe96a93
comparison
equal deleted inserted replaced
6241:aba91a731143 6266:1d7922586cf6
145 } else { 145 } else {
146 return false; 146 return false;
147 } 147 }
148 } 148 }
149 149
150 public boolean isRicochetFrame() {
151 CodeBlob cb = VM.getVM().getCodeCache().findBlob(getPC());
152 RicochetBlob rcb = VM.getVM().ricochetBlob();
153 return (cb == rcb && rcb != null && rcb.returnsToBounceAddr(getPC()));
154 }
155
156 public boolean isCompiledFrame() { 150 public boolean isCompiledFrame() {
157 if (Assert.ASSERTS_ENABLED) { 151 if (Assert.ASSERTS_ENABLED) {
158 Assert.that(!VM.getVM().isCore(), "noncore builds only"); 152 Assert.that(!VM.getVM().isCore(), "noncore builds only");
159 } 153 }
160 CodeBlob cb = VM.getVM().getCodeCache().findBlob(getPC()); 154 CodeBlob cb = VM.getVM().getCodeCache().findBlob(getPC());
214 208
215 /** returns the sender, but skips conversion frames */ 209 /** returns the sender, but skips conversion frames */
216 public Frame realSender(RegisterMap map) { 210 public Frame realSender(RegisterMap map) {
217 if (!VM.getVM().isCore()) { 211 if (!VM.getVM().isCore()) {
218 Frame result = sender(map); 212 Frame result = sender(map);
219 while (result.isRuntimeFrame() || 213 while (result.isRuntimeFrame()) {
220 result.isRicochetFrame()) {
221 result = result.sender(map); 214 result = result.sender(map);
222 } 215 }
223 return result; 216 return result;
224 } else { 217 } else {
225 return sender(map); 218 return sender(map);
629 private void oopsCodeBlobDo (AddressVisitor oopVisitor, RegisterMap regMap) { 622 private void oopsCodeBlobDo (AddressVisitor oopVisitor, RegisterMap regMap) {
630 CodeBlob cb = VM.getVM().getCodeCache().findBlob(getPC()); 623 CodeBlob cb = VM.getVM().getCodeCache().findBlob(getPC());
631 if (Assert.ASSERTS_ENABLED) { 624 if (Assert.ASSERTS_ENABLED) {
632 Assert.that(cb != null, "sanity check"); 625 Assert.that(cb != null, "sanity check");
633 } 626 }
634 if (cb == VM.getVM().ricochetBlob()) {
635 oopsRicochetDo(oopVisitor, regMap);
636 }
637 if (cb.getOopMaps() != null) { 627 if (cb.getOopMaps() != null) {
638 OopMapSet.oopsDo(this, cb, regMap, oopVisitor, VM.getVM().isDebugging()); 628 OopMapSet.oopsDo(this, cb, regMap, oopVisitor, VM.getVM().isDebugging());
639 629
640 // FIXME: add in traversal of argument oops (skipping this for 630 // FIXME: add in traversal of argument oops (skipping this for
641 // now until we have the other stuff tested) 631 // now until we have the other stuff tested)
646 636
647 // If we see an activation belonging to a non_entrant nmethod, we mark it. 637 // If we see an activation belonging to a non_entrant nmethod, we mark it.
648 // if (cb->is_nmethod() && ((nmethod *)cb)->is_not_entrant()) { 638 // if (cb->is_nmethod() && ((nmethod *)cb)->is_not_entrant()) {
649 // ((nmethod*)cb)->mark_as_seen_on_stack(); 639 // ((nmethod*)cb)->mark_as_seen_on_stack();
650 // } 640 // }
651 }
652
653 private void oopsRicochetDo (AddressVisitor oopVisitor, RegisterMap regMap) {
654 // XXX Empty for now
655 } 641 }
656 642
657 // FIXME: implement the above routines, plus add 643 // FIXME: implement the above routines, plus add
658 // oops_interpreted_arguments_do and oops_compiled_arguments_do 644 // oops_interpreted_arguments_do and oops_compiled_arguments_do
659 } 645 }