comparison src/cpu/x86/vm/c1_LIRAssembler_x86.cpp @ 6739:8a02ca5e5576

7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere Summary: C1 needs knowledge of T_METADATA at the LIR level. Reviewed-by: kvn, coleenp
author roland
date Tue, 11 Sep 2012 16:20:57 +0200
parents da91efe96a93
children 7eca5de9e0b6
comparison
equal deleted inserted replaced
6738:ec98e58952b2 6739:8a02ca5e5576
948 if (src->is_single_cpu()) { 948 if (src->is_single_cpu()) {
949 Address dst = frame_map()->address_for_slot(dest->single_stack_ix()); 949 Address dst = frame_map()->address_for_slot(dest->single_stack_ix());
950 if (type == T_OBJECT || type == T_ARRAY) { 950 if (type == T_OBJECT || type == T_ARRAY) {
951 __ verify_oop(src->as_register()); 951 __ verify_oop(src->as_register());
952 __ movptr (dst, src->as_register()); 952 __ movptr (dst, src->as_register());
953 } else if (type == T_METADATA) {
954 __ movptr (dst, src->as_register());
953 } else { 955 } else {
954 __ movl (dst, src->as_register()); 956 __ movl (dst, src->as_register());
955 } 957 }
956 958
957 } else if (src->is_double_cpu()) { 959 } else if (src->is_double_cpu()) {
1038 if (UseCompressedOops && !wide) { 1040 if (UseCompressedOops && !wide) {
1039 __ movl(as_Address(to_addr), compressed_src); 1041 __ movl(as_Address(to_addr), compressed_src);
1040 } else { 1042 } else {
1041 __ movptr(as_Address(to_addr), src->as_register()); 1043 __ movptr(as_Address(to_addr), src->as_register());
1042 } 1044 }
1045 break;
1046 case T_METADATA:
1047 // We get here to store a method pointer to the stack to pass to
1048 // a dtrace runtime call. This can't work on 64 bit with
1049 // compressed klass ptrs: T_METADATA can be a compressed klass
1050 // ptr or a 64 bit method pointer.
1051 LP64_ONLY(ShouldNotReachHere());
1052 __ movptr(as_Address(to_addr), src->as_register());
1043 break; 1053 break;
1044 case T_ADDRESS: 1054 case T_ADDRESS:
1045 __ movptr(as_Address(to_addr), src->as_register()); 1055 __ movptr(as_Address(to_addr), src->as_register());
1046 break; 1056 break;
1047 case T_INT: 1057 case T_INT:
1116 1126
1117 if (dest->is_single_cpu()) { 1127 if (dest->is_single_cpu()) {
1118 if (type == T_ARRAY || type == T_OBJECT) { 1128 if (type == T_ARRAY || type == T_OBJECT) {
1119 __ movptr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix())); 1129 __ movptr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
1120 __ verify_oop(dest->as_register()); 1130 __ verify_oop(dest->as_register());
1131 } else if (type == T_METADATA) {
1132 __ movptr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
1121 } else { 1133 } else {
1122 __ movl(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix())); 1134 __ movl(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
1123 } 1135 }
1124 1136
1125 } else if (dest->is_double_cpu()) { 1137 } else if (dest->is_double_cpu()) {