Mercurial > hg > truffle
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()) { |