789 case T_BYTE : { jint* p = (jint*)tos_addr; value_result->b = (jbyte)((*p) & 0xff); break; } 790 case T_CHAR : { jint* p = (jint*)tos_addr; value_result->c = (jchar)((*p) & 0xffff); break; } 791 case T_SHORT : { jint* p = (jint*)tos_addr; value_result->s = (jshort)((*p) & 0xffff); break; } 792 case T_INT : value_result->i = *(jint*)tos_addr; break; 793 case T_LONG : value_result->j = *(jlong*)tos_addr; break; 794 case T_FLOAT : value_result->f = *(jfloat*)tos_addr; break; 795 case T_DOUBLE : value_result->d = *(jdouble*)tos_addr; break; 796 case T_VOID : /* Nothing to do */ break; 797 default : ShouldNotReachHere(); 798 } 799 }; 800 801 return type; 802 } 803 804 // Lesp pointer is one word lower than the top item on the stack. 805 intptr_t* frame::interpreter_frame_tos_at(jint offset) const { 806 int index = (Interpreter::expr_offset_in_bytes(offset)/wordSize) - 1; 807 return &interpreter_frame_tos_address()[index]; 808 } | 789 case T_BYTE : { jint* p = (jint*)tos_addr; value_result->b = (jbyte)((*p) & 0xff); break; } 790 case T_CHAR : { jint* p = (jint*)tos_addr; value_result->c = (jchar)((*p) & 0xffff); break; } 791 case T_SHORT : { jint* p = (jint*)tos_addr; value_result->s = (jshort)((*p) & 0xffff); break; } 792 case T_INT : value_result->i = *(jint*)tos_addr; break; 793 case T_LONG : value_result->j = *(jlong*)tos_addr; break; 794 case T_FLOAT : value_result->f = *(jfloat*)tos_addr; break; 795 case T_DOUBLE : value_result->d = *(jdouble*)tos_addr; break; 796 case T_VOID : /* Nothing to do */ break; 797 default : ShouldNotReachHere(); 798 } 799 }; 800 801 return type; 802 } 803 804 // Lesp pointer is one word lower than the top item on the stack. 805 intptr_t* frame::interpreter_frame_tos_at(jint offset) const { 806 int index = (Interpreter::expr_offset_in_bytes(offset)/wordSize) - 1; 807 return &interpreter_frame_tos_address()[index]; 808 } 809 810 811 #ifdef ASSERT 812 813 #define DESCRIBE_FP_OFFSET(name) \ 814 values.describe(-1, fp() + frame::name##_offset, #name) 815 816 void frame::describe_pd(FrameValues& values, int frame_no) { 817 for (int w = 0; w < frame::register_save_words; w++) { 818 values.describe(frame_no, sp() + w, err_msg("register save area word %d", w), 1); 819 } 820 821 if (is_interpreted_frame()) { 822 DESCRIBE_FP_OFFSET(interpreter_frame_d_scratch_fp); 823 DESCRIBE_FP_OFFSET(interpreter_frame_l_scratch_fp); 824 DESCRIBE_FP_OFFSET(interpreter_frame_padding); 825 DESCRIBE_FP_OFFSET(interpreter_frame_oop_temp); 826 } 827 828 if (!is_compiled_frame()) { 829 if (frame::callee_aggregate_return_pointer_words != 0) { 830 values.describe(frame_no, sp() + frame::callee_aggregate_return_pointer_sp_offset, "callee_aggregate_return_pointer_word"); 831 } 832 for (int w = 0; w < frame::callee_register_argument_save_area_words; w++) { 833 values.describe(frame_no, sp() + frame::callee_register_argument_save_area_sp_offset + w, 834 err_msg("callee_register_argument_save_area_words %d", w)); 835 } 836 } 837 } 838 839 #endif |