Mercurial > hg > openjdk6-mips
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);