comparison src/cpu/x86/vm/frame_x86.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 5f17b16b3219
children 957c266d8bc5 da91efe96a93
comparison
equal deleted inserted replaced
6241:aba91a731143 6266:1d7922586cf6
437 437
438 //------------------------------------------------------------------------------ 438 //------------------------------------------------------------------------------
439 // frame::sender_for_compiled_frame 439 // frame::sender_for_compiled_frame
440 frame frame::sender_for_compiled_frame(RegisterMap* map) const { 440 frame frame::sender_for_compiled_frame(RegisterMap* map) const {
441 assert(map != NULL, "map must be set"); 441 assert(map != NULL, "map must be set");
442 assert(!is_ricochet_frame(), "caller must handle this");
443 442
444 // frame owned by optimizing compiler 443 // frame owned by optimizing compiler
445 assert(_cb->frame_size() >= 0, "must have non-zero frame size"); 444 assert(_cb->frame_size() >= 0, "must have non-zero frame size");
446 intptr_t* sender_sp = unextended_sp() + _cb->frame_size(); 445 intptr_t* sender_sp = unextended_sp() + _cb->frame_size();
447 intptr_t* unextended_sp = sender_sp; 446 intptr_t* unextended_sp = sender_sp;
481 map->set_include_argument_oops(false); 480 map->set_include_argument_oops(false);
482 481
483 if (is_entry_frame()) return sender_for_entry_frame(map); 482 if (is_entry_frame()) return sender_for_entry_frame(map);
484 if (is_interpreted_frame()) return sender_for_interpreter_frame(map); 483 if (is_interpreted_frame()) return sender_for_interpreter_frame(map);
485 assert(_cb == CodeCache::find_blob(pc()),"Must be the same"); 484 assert(_cb == CodeCache::find_blob(pc()),"Must be the same");
486 if (is_ricochet_frame()) return sender_for_ricochet_frame(map);
487 485
488 if (_cb != NULL) { 486 if (_cb != NULL) {
489 return sender_for_compiled_frame(map); 487 return sender_for_compiled_frame(map);
490 } 488 }
491 // Must be native-compiled frame, i.e. the marshaling code for native 489 // Must be native-compiled frame, i.e. the marshaling code for native
656 654
657 #define DESCRIBE_FP_OFFSET(name) \ 655 #define DESCRIBE_FP_OFFSET(name) \
658 values.describe(frame_no, fp() + frame::name##_offset, #name) 656 values.describe(frame_no, fp() + frame::name##_offset, #name)
659 657
660 void frame::describe_pd(FrameValues& values, int frame_no) { 658 void frame::describe_pd(FrameValues& values, int frame_no) {
661 if (is_ricochet_frame()) { 659 if (is_interpreted_frame()) {
662 MethodHandles::RicochetFrame::describe(this, values, frame_no);
663 } else if (is_interpreted_frame()) {
664 DESCRIBE_FP_OFFSET(interpreter_frame_sender_sp); 660 DESCRIBE_FP_OFFSET(interpreter_frame_sender_sp);
665 DESCRIBE_FP_OFFSET(interpreter_frame_last_sp); 661 DESCRIBE_FP_OFFSET(interpreter_frame_last_sp);
666 DESCRIBE_FP_OFFSET(interpreter_frame_method); 662 DESCRIBE_FP_OFFSET(interpreter_frame_method);
667 DESCRIBE_FP_OFFSET(interpreter_frame_mdx); 663 DESCRIBE_FP_OFFSET(interpreter_frame_mdx);
668 DESCRIBE_FP_OFFSET(interpreter_frame_cache); 664 DESCRIBE_FP_OFFSET(interpreter_frame_cache);
680 676
681 intptr_t* frame::real_fp() const { 677 intptr_t* frame::real_fp() const {
682 if (_cb != NULL) { 678 if (_cb != NULL) {
683 // use the frame size if valid 679 // use the frame size if valid
684 int size = _cb->frame_size(); 680 int size = _cb->frame_size();
685 if ((size > 0) && 681 if (size > 0) {
686 (! is_ricochet_frame())) {
687 // Work-around: ricochet explicitly excluded because frame size is not
688 // constant for the ricochet blob but its frame_size could not, for
689 // some reasons, be declared as <= 0. This potentially confusing
690 // size declaration should be fixed as another CR.
691 return unextended_sp() + size; 682 return unextended_sp() + size;
692 } 683 }
693 } 684 }
694 // else rely on fp() 685 // else rely on fp()
695 assert(! is_compiled_frame(), "unknown compiled frame size"); 686 assert(! is_compiled_frame(), "unknown compiled frame size");