625
626
627 intptr_t* frame::interpreter_frame_tos_at(jint offset) const {
628 int index = (Interpreter::expr_offset_in_bytes(offset)/wordSize);
629 return &interpreter_frame_tos_address()[index];
630 }
631
632 #ifndef PRODUCT
633
634 #define DESCRIBE_FP_OFFSET(name) \
635 values.describe(frame_no, fp() + frame::name##_offset, #name)
636
637 void frame::describe_pd(FrameValues& values, int frame_no) {
638 if (is_interpreted_frame()) {
639 DESCRIBE_FP_OFFSET(interpreter_frame_sender_sp);
640 DESCRIBE_FP_OFFSET(interpreter_frame_last_sp);
641 DESCRIBE_FP_OFFSET(interpreter_frame_method);
642 DESCRIBE_FP_OFFSET(interpreter_frame_mirror);
643 DESCRIBE_FP_OFFSET(interpreter_frame_mdp);
644 DESCRIBE_FP_OFFSET(interpreter_frame_cache);
645 DESCRIBE_FP_OFFSET(interpreter_frame_locals);
646 DESCRIBE_FP_OFFSET(interpreter_frame_bcp);
647 DESCRIBE_FP_OFFSET(interpreter_frame_initial_sp);
648 #ifdef AMD64
649 } else if (is_entry_frame()) {
650 // This could be more descriptive if we use the enum in
651 // stubGenerator to map to real names but it's most important to
652 // claim these frame slots so the error checking works.
653 for (int i = 0; i < entry_frame_after_call_words; i++) {
654 values.describe(frame_no, fp() - i, err_msg("call_stub word fp - %d", i));
655 }
656 #endif // AMD64
657 }
658 }
659 #endif // !PRODUCT
660
661 intptr_t *frame::initial_deoptimization_info() {
662 // used to reset the saved FP
663 return fp();
664 }
|
625
626
627 intptr_t* frame::interpreter_frame_tos_at(jint offset) const {
628 int index = (Interpreter::expr_offset_in_bytes(offset)/wordSize);
629 return &interpreter_frame_tos_address()[index];
630 }
631
632 #ifndef PRODUCT
633
634 #define DESCRIBE_FP_OFFSET(name) \
635 values.describe(frame_no, fp() + frame::name##_offset, #name)
636
637 void frame::describe_pd(FrameValues& values, int frame_no) {
638 if (is_interpreted_frame()) {
639 DESCRIBE_FP_OFFSET(interpreter_frame_sender_sp);
640 DESCRIBE_FP_OFFSET(interpreter_frame_last_sp);
641 DESCRIBE_FP_OFFSET(interpreter_frame_method);
642 DESCRIBE_FP_OFFSET(interpreter_frame_mirror);
643 DESCRIBE_FP_OFFSET(interpreter_frame_mdp);
644 DESCRIBE_FP_OFFSET(interpreter_frame_cache);
645 DESCRIBE_FP_OFFSET(interpreter_frame_vt_alloc_ptr);
646 DESCRIBE_FP_OFFSET(interpreter_frame_locals);
647 DESCRIBE_FP_OFFSET(interpreter_frame_bcp);
648 DESCRIBE_FP_OFFSET(interpreter_frame_initial_sp);
649 #ifdef AMD64
650 } else if (is_entry_frame()) {
651 // This could be more descriptive if we use the enum in
652 // stubGenerator to map to real names but it's most important to
653 // claim these frame slots so the error checking works.
654 for (int i = 0; i < entry_frame_after_call_words; i++) {
655 values.describe(frame_no, fp() - i, err_msg("call_stub word fp - %d", i));
656 }
657 #endif // AMD64
658 }
659 }
660 #endif // !PRODUCT
661
662 intptr_t *frame::initial_deoptimization_info() {
663 // used to reset the saved FP
664 return fp();
665 }
|