changeset 8:fc40477e29ae

Fix the failure of TruncatedClass test in regression. When jvm passes more than two obj arguments to a native method, the bug occurs.
author Ao Qi <aoqi@loongson.cn>
date Tue, 12 Oct 2010 18:28:27 +0800
parents 3053c0d361b6
children 3713353e23db
files hotspot/src/cpu/mips/vm/sharedRuntime_mips.cpp hotspot/src/share/vm/memory/defNewGeneration.cpp
diffstat 2 files changed, 2 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/hotspot/src/cpu/mips/vm/sharedRuntime_mips.cpp	Sat Oct 09 18:14:02 2010 +0800
+++ b/hotspot/src/cpu/mips/vm/sharedRuntime_mips.cpp	Tue Oct 12 18:28:27 2010 +0800
@@ -1643,12 +1643,13 @@
 		// Oop is in an a register we must store it to the space we reserve
 		// on the stack for oop_handles
 		const Register rOop = src.first()->as_Register();
+		assert( (rOop->encoding() >= A0->encoding()) && (rOop->encoding() <= T0->encoding()),"wrong register");
 		//   const Register rHandle = eax;
 		const Register rHandle = V0;
 		//  int oop_slot = (rOop == ecx ? 0 : 1) * VMRegImpl::slots_per_word 
 		//  + oop_handle_offset;
 //FIXME , refer to java_calling_convertion	
-		int oop_slot = (rOop == T0 ? 0 : 1) * VMRegImpl::slots_per_word + oop_handle_offset;
+		int oop_slot = (rOop == T0 ? 0 : (rOop->encoding() - V1->encoding())) * VMRegImpl::slots_per_word + oop_handle_offset;
 		int offset = oop_slot*VMRegImpl::stack_slot_size;
 		Label skip;
 		// __ movl(Address(esp, offset), rOop);
--- a/hotspot/src/share/vm/memory/defNewGeneration.cpp	Sat Oct 09 18:14:02 2010 +0800
+++ b/hotspot/src/share/vm/memory/defNewGeneration.cpp	Tue Oct 12 18:28:27 2010 +0800
@@ -902,7 +902,6 @@
 }
 
 void DefNewGeneration::verify(bool allow_dirty) {
-  print_on(tty);
   eden()->verify(allow_dirty);
   from()->verify(allow_dirty);
     to()->verify(allow_dirty);