changeset 18:d2a6a000ff33

Fix a bug in FrameMap::nr2floatreg. In FrameMap::nr2floatreg, it is wrong that multiplying 2 to the argument rnr.
author YANG Yongqiang <yangyongqiang@loongson.cn>
date Sat, 30 Oct 2010 17:47:17 +0800
parents 85b046e5468b
children 142b74086f40
files hotspot/src/cpu/mips/vm/c1_FrameMap_mips.cpp hotspot/src/cpu/mips/vm/c1_Runtime1_mips.cpp hotspot/src/cpu/mips/vm/sharedRuntime_mips.cpp hotspot/src/cpu/mips/vm/templateTable_mips.cpp
diffstat 4 files changed, 30 insertions(+), 92 deletions(-) [+]
line wrap: on
line diff
--- a/hotspot/src/cpu/mips/vm/c1_FrameMap_mips.cpp	Thu Oct 28 11:07:44 2010 +0800
+++ b/hotspot/src/cpu/mips/vm/c1_FrameMap_mips.cpp	Sat Oct 30 17:47:17 2010 +0800
@@ -166,7 +166,7 @@
 FloatRegister FrameMap::nr2floatreg (int rnr) {
 	assert(_init_done, "tables not initialized");
 	debug_only(fpu_range_check(rnr);)
-	return _fpu_regs[rnr*2];
+	return _fpu_regs[rnr];
 }
 
 // returns true if reg could be smashed by a callee.
--- a/hotspot/src/cpu/mips/vm/c1_Runtime1_mips.cpp	Thu Oct 28 11:07:44 2010 +0800
+++ b/hotspot/src/cpu/mips/vm/c1_Runtime1_mips.cpp	Sat Oct 30 17:47:17 2010 +0800
@@ -323,17 +323,18 @@
 }
 
 static void restore_live_registers_except_V0(StubAssembler* sasm, bool restore_fpu_registers = true) {	
-   //static void restore_live_registers(MacroAssembler* sasm) {
-   //FIXME , maybe V1 need to be saved too
-   __ block_comment("restore_live_registers except V0");
-   for (Register r = T0; r != T7->successor(); r = r->successor() ) {
-   	__ lw(r, SP, (r->encoding() - T0->encoding() + T0_off) * wordSize);
-   }
-   for (Register r = S0; r != S7->successor(); r = r->successor() ) {
-   	__ lw(r, SP, (r->encoding() - S0->encoding() + S0_off) * wordSize);
-   }
-   __ lw(V1, SP, V1_off * wordSize);	
-   __ addiu(SP, SP, (reg_save_frame_size - 2)* wordSize);
+  //static void restore_live_registers(MacroAssembler* sasm) {
+  //FIXME , maybe V1 need to be saved too
+  __ block_comment("restore_live_registers except V0");
+  for (Register r = T0; r != T7->successor(); r = r->successor() ) {
+  	__ lw(r, SP, (r->encoding() - T0->encoding() + T0_off) * wordSize);
+  }
+  for (Register r = S0; r != S7->successor(); r = r->successor() ) {
+  	__ lw(r, SP, (r->encoding() - S0->encoding() + S0_off) * wordSize);
+  }
+
+  __ lw(V1, SP, V1_off * wordSize);	
+  __ addiu(SP, SP, (reg_save_frame_size - 2)* wordSize);
 }
 void Runtime1::initialize_pd() {
   // nothing to do
--- a/hotspot/src/cpu/mips/vm/sharedRuntime_mips.cpp	Thu Oct 28 11:07:44 2010 +0800
+++ b/hotspot/src/cpu/mips/vm/sharedRuntime_mips.cpp	Sat Oct 30 17:47:17 2010 +0800
@@ -1181,25 +1181,24 @@
 				if(int_reg_cnt == 0){
 					regs[i].set2(A0->as_VMReg());
 					int_reg_cnt += 2;  
-				}
-				else if (int_reg_cnt == 1){
+				} else if (int_reg_cnt == 1){
 					regs[i].set2(A2->as_VMReg());
 					int_reg_cnt += 3;  
-				}else if(int_reg_cnt == 2){
+				} else if (int_reg_cnt == 2){
 					regs[i].set2(A2->as_VMReg());
 					int_reg_cnt += 2;  
-				}else if(int_reg_cnt == 3){
+				} else if (int_reg_cnt == 3){
 					regs[i].set2(VMRegImpl::stack2reg(stack));
 					stack += 2;
 					int_reg_cnt += 1;  
-				}else{
+				} else {
 					regs[i].set2(VMRegImpl::stack2reg(stack));
 					stack += 2;
 				}
 				break; 
 			case T_DOUBLE:      
 				assert(sig_bt[i+1] == T_VOID, "missing Half" ); 
-				if(f2i==1){
+				if(f2i == 1){
 					if (int_reg_cnt == 1){
 						regs[i].set2(A2->as_VMReg());
 						int_reg_cnt += 3;  
@@ -1214,19 +1213,16 @@
 						regs[i].set2(VMRegImpl::stack2reg(stack));
 						stack += 2;
 					}
-				}
-				else {
-					if(flt_reg_cnt==0){
+				} else {
+					if(flt_reg_cnt == 0){
 						regs[i].set2(F12->as_VMReg());
 						flt_reg_cnt++;
 						int_reg_cnt += 2; 
-					}
-					else if( flt_reg_cnt==2){
+					}	else if( flt_reg_cnt == 2){
 						regs[i].set2(F14->as_VMReg());
 						flt_reg_cnt++;
 						if(int_reg_cnt<=1)int_reg_cnt += 1; 
-					}
-					else if(int_reg_cnt == 2){
+					} else if(int_reg_cnt == 2){
 						regs[i].set2(A2->as_VMReg());
 						int_reg_cnt +=2; 
 					}else if(int_reg_cnt == 3){
@@ -1239,7 +1235,6 @@
 					}
 
 				} 
-				; 
 				break;
 			case T_VOID: regs[i].set_bad(); break;
 			default:
@@ -1247,7 +1242,7 @@
 				     break;
 		}
 	}
-	return stack ;
+	return stack;
 }
 
 int SharedRuntime::c_calling_convention_jni(const BasicType *sig_bt, 
--- a/hotspot/src/cpu/mips/vm/templateTable_mips.cpp	Thu Oct 28 11:07:44 2010 +0800
+++ b/hotspot/src/cpu/mips/vm/templateTable_mips.cpp	Sat Oct 30 17:47:17 2010 +0800
@@ -2779,7 +2779,7 @@
 	__ get_cache_and_index_at_bcp(Rcache, index, 1);
 
 	// is resolved?
-	__ sll(AT, index, 4);
+	__ sll(AT, index, 4); 
 	__ add(AT, Rcache, AT);
 	__ lw(AT, AT, in_bytes(constantPoolCacheOopDesc::base_offset() 
 				+ ConstantPoolCacheEntry::indices_offset()));
@@ -2877,6 +2877,8 @@
 	__ sll(AT, index, 4);
 	__ add(AT, cache, AT);
 	__ lw(method, AT, method_offset);
+
+
 	if (itable_index != NOREG) {
 		//__ sll(AT, index, 4);
 		//__ addu(AT, cache, AT);
@@ -3171,7 +3173,7 @@
 			// depending on its type. As a result, we must find 
 			// the type to determine where the object is.
 			Label two_word, valsize_known;
-			__ sll(AT, T4, 4);
+			__ sll(AT, T4, 4); 
 			__ add(AT, T1, AT);
 			__ lw(T3, AT, in_bytes(cp_base_offset 
 						+ ConstantPoolCacheEntry::flags_offset()));
@@ -3201,7 +3203,7 @@
 		}
 		// cache entry pointer
 		__ addi(T1, T1, in_bytes(cp_base_offset));
-		__ shl(T4, 4);
+		__ shl(T4, 4); 
 		__ addu(T1, T1, T4);
 		// object (tos)
 		__ move(T3, SP);
@@ -3564,7 +3566,7 @@
 	__ get_cache_and_index_at_bcp(T3, T2, 1);
 
 	// test for volatile with edx but edx is tos register for lputfield.
-	__ sll(AT, T2, 4);
+	__ sll(AT, T2, 4); 
 	__ add(AT, T3, AT);
 	__ lw(T4, AT, in_bytes(base + ConstantPoolCacheEntry::flags_offset()));
 
@@ -3941,15 +3943,10 @@
 	__ verify_oop(method);
 
 	// It's final, need a null check here!
-//jerome_for_debug
 	__ null_check(recv);
 
 	// profile this call
 	__ profile_final_call(T0);
-
-	//__ lw(T9, method, in_bytes(methodOopDesc::interpreter_entry_offset()));
-	//__ jr(T9);
-	//__ delayed();
 	__ move(T0, recv);
 	__ jump_from_interpreted(method, T4);
 
@@ -3960,55 +3957,6 @@
 	// Keep recv in ecx for callee expects it there
 	__ lw(T4, recv, oopDesc::klass_offset_in_bytes());
 	__ verify_oop(T4);
-//jerome10
-/* 
-	Label nnn;
-	__ move(AT, 0x80000000);	
-	__ andr(AT, AT, T4);	
-	__ beq(AT, ZERO, nnn);	
-	__ delayed()->nop();	
-
-	__ move(AT, (int)&jerome10 );
-	__ sw(ZERO, AT, 0);
-
-	__ move(AT, (int)&jerome1 );
-	__ sw(recv, AT, 0); 	
-	__ move(AT, (int)&jerome2 );
-	__ sw(T4, AT, 0); 	
-	__ move(AT, (int)&jerome3 );
-//	__ get_thread(T4);	
-	__ sw(RA, AT, 0); 	
-	__ move(AT, (int)&jerome4 );
-	__ sw(SP, AT, 0); 	
-
-	__ move(AT, (int)&jerome5 );
-	__ sw(FP, AT, 0); 	
-
-	__ move(AT, (int)&jerome6 );
-	__ sw(ZERO, AT, 0); 	
-
-	__ move(AT, (int)&jerome7 );
-	__ sw(ZERO, AT, 0); 	
-
-	__ move(AT, (int)&jerome8 );
-	__ sw(ZERO, AT, 0); 	
-	
-	__ move(AT, (int)&jerome9 );
-	__ sw(ZERO, AT, 0);
-//	__ move(AT, (int)&jerome2 );
-//	__ lw(T4, AT, 0);
-
-	__ pushad();
-//	__ enter();
-	__ call(CAST_FROM_FN_PTR(address, SharedRuntime::print_call_statistics), 
-				relocInfo::runtime_call_type);
-	__ delayed()->nop();
-//	__ leave();
-	__ popad();
-      
-	
-	__ bind(nnn);
-*/
 	// profile this call
 	__ profile_virtual_call(T1, T0, T4);
 
@@ -4017,14 +3965,8 @@
 	assert(vtableEntry::size() * wordSize == 4, "adjust the scaling in the code below");
 	__ sll(AT, index, 2);
 	__ add(AT, T4, AT);
-	
 	//this is a ualign read 
-	__ lw(method,AT,base+vtableEntry::method_offset_in_bytes());
-       
-//	__ lhu(method, AT, base+vtableEntry::method_offset_in_bytes()+2); 
- //       __ lhu(T4, AT, base+vtableEntry::method_offset_in_bytes()); 	
-  //      __ sll(method, method, 16);	
-   //     __ addu(method, method, T4);	
+	__ lw(method, AT, base + vtableEntry::method_offset_in_bytes());
 	__ move(T0, recv);
 	__ jump_from_interpreted(method, T4);