Mercurial > hg > graal-jvmci-8
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"); |