--- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Tue Sep 11 14:59:23 2012 +0200
+++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Tue Sep 11 16:20:57 2012 +0200
@@ -950,6 +950,8 @@
if (type == T_OBJECT || type == T_ARRAY) {
__ verify_oop(src->as_register());
__ movptr (dst, src->as_register());
+ } else if (type == T_METADATA) {
+ __ movptr (dst, src->as_register());
} else {
__ movl (dst, src->as_register());
}
@@ -1041,6 +1043,14 @@
__ movptr(as_Address(to_addr), src->as_register());
}
break;
+ case T_METADATA:
+ // We get here to store a method pointer to the stack to pass to
+ // a dtrace runtime call. This can't work on 64 bit with
+ // compressed klass ptrs: T_METADATA can be a compressed klass
+ // ptr or a 64 bit method pointer.
+ LP64_ONLY(ShouldNotReachHere());
+ __ movptr(as_Address(to_addr), src->as_register());
+ break;
case T_ADDRESS:
__ movptr(as_Address(to_addr), src->as_register());
break;
@@ -1118,6 +1128,8 @@
if (type == T_ARRAY || type == T_OBJECT) {
__ movptr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
__ verify_oop(dest->as_register());
+ } else if (type == T_METADATA) {
+ __ movptr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
} else {
__ movl(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
}