From: <dfr...@us...> - 2007-09-28 01:04:56
|
Revision: 13707 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=13707&view=rev Author: dframpton-oss Date: 2007-09-27 18:04:55 -0700 (Thu, 27 Sep 2007) Log Message: ----------- Complete merge with head up to 13706 Modified Paths: -------------- rvmroot/branches/RVM-265-ReadBarriers/rvm/src/org/jikesrvm/compilers/baseline/ia32/VM_Barriers.java rvmroot/branches/RVM-265-ReadBarriers/rvm/src/org/jikesrvm/compilers/baseline/ppc/VM_Barriers.java rvmroot/branches/RVM-265-ReadBarriers/rvm/src/org/jikesrvm/compilers/opt/OPT_ExpandRuntimeServices.java Modified: rvmroot/branches/RVM-265-ReadBarriers/rvm/src/org/jikesrvm/compilers/baseline/ia32/VM_Barriers.java =================================================================== --- rvmroot/branches/RVM-265-ReadBarriers/rvm/src/org/jikesrvm/compilers/baseline/ia32/VM_Barriers.java 2007-09-28 01:03:02 UTC (rev 13706) +++ rvmroot/branches/RVM-265-ReadBarriers/rvm/src/org/jikesrvm/compilers/baseline/ia32/VM_Barriers.java 2007-09-28 01:04:55 UTC (rev 13707) @@ -12,10 +12,10 @@ */ package org.jikesrvm.compilers.baseline.ia32; -import org.jikesrvm.VM; import org.jikesrvm.VM_Configuration; -import org.jikesrvm.compilers.common.assembler.ia32.VM_Assembler; +import org.jikesrvm.ArchitectureSpecific.VM_Assembler; import org.jikesrvm.ia32.VM_BaselineConstants; +import org.jikesrvm.objectmodel.VM_ObjectModel; import org.jikesrvm.runtime.VM_Entrypoints; import org.vmmagic.unboxed.Offset; @@ -42,6 +42,7 @@ // SP -> ref_to_store, SP+4 -> target_ref Offset of4 = Offset.fromIntSignExtend(4); Offset of8 = Offset.fromIntSignExtend(8); + genNullCheck(asm, 4); asm.emitPUSH_RegDisp(SP, of4); asm.emitPUSH_Reg(reg); asm.emitPUSH_RegDisp(SP, of8); // Push what was originally (SP, 0) @@ -55,6 +56,7 @@ // SP -> ref_to_store, SP+4 -> target_ref Offset of4 = Offset.fromIntSignExtend(4); Offset of8 = Offset.fromIntSignExtend(8); + genNullCheck(asm, 4); asm.emitPUSH_RegDisp(SP, of4); asm.emitPUSH_Imm(fieldOffset.toInt()); asm.emitPUSH_RegDisp(SP, of8); // Push what was originally (SP, 0) @@ -96,6 +98,7 @@ static void compileGetfieldBarrier(VM_Assembler asm, byte reg, int locationMetadata) { // on entry java stack contains ...|target_ref| // SP -> target_ref + genNullCheck(asm, 0); asm.emitPUSH_Reg(reg); asm.emitPUSH_Imm(locationMetadata); genParameterRegisterLoad(asm, 3); @@ -104,6 +107,7 @@ } static void compileGetfieldBarrierImm(VM_Assembler asm, Offset fieldOffset, int locationMetadata) { + genNullCheck(asm, 0); asm.emitPUSH_Imm(fieldOffset.toInt()); asm.emitPUSH_Imm(locationMetadata); genParameterRegisterLoad(asm, 3); @@ -127,6 +131,15 @@ asm.emitPUSH_Reg(T0); } + /** + * Generate a cheap nullcheck by attempting to load the TIB of the object + * at the given offset to SP. + */ + private static void genNullCheck(VM_Assembler asm, int offset) { + asm.emitMOV_Reg_RegDisp(T1, SP, Offset.fromIntZeroExtend(offset)); + VM_ObjectModel.baselineEmitLoadTIB(asm, T1, T1); + } + static void compileModifyCheck(VM_Assembler asm, int offset) { if (!VM_Configuration.ExtremeAssertions) return; // on entry java stack contains ... [SP+offset] -> target_ref @@ -147,7 +160,6 @@ * @param params number of parameter words (including "this" if any). */ private static void genParameterRegisterLoad(VM_Assembler asm, int params) { - if (VM.VerifyAssertions) VM._assert(0 < params); if (0 < NUM_PARAMETER_GPRS) { asm.emitMOV_Reg_RegDisp(T0, SP, Offset.fromIntZeroExtend((params - 1) << LG_WORDSIZE)); } Modified: rvmroot/branches/RVM-265-ReadBarriers/rvm/src/org/jikesrvm/compilers/baseline/ppc/VM_Barriers.java =================================================================== --- rvmroot/branches/RVM-265-ReadBarriers/rvm/src/org/jikesrvm/compilers/baseline/ppc/VM_Barriers.java 2007-09-28 01:03:02 UTC (rev 13706) +++ rvmroot/branches/RVM-265-ReadBarriers/rvm/src/org/jikesrvm/compilers/baseline/ppc/VM_Barriers.java 2007-09-28 01:04:55 UTC (rev 13707) @@ -12,7 +12,6 @@ */ package org.jikesrvm.compilers.baseline.ppc; -import org.jikesrvm.VM; import org.jikesrvm.compilers.common.assembler.ppc.VM_Assembler; import org.jikesrvm.ppc.VM_BaselineConstants; import org.jikesrvm.runtime.VM_Entrypoints; @@ -40,7 +39,7 @@ asm.emitLAddrToc(S0, VM_Entrypoints.putfieldWriteBarrierMethod.getOffset()); asm.emitMTCTR(S0); comp.peekAddr(T0, 1); // object base - if (VM.ExplicitlyGuardLowMemory) asm.emitNullCheck(T0); + asm.emitNullCheck(T0); comp.peekAddr(T2, 0); // value to store asm.emitLVAL(T3, locationMetadata); asm.emitBCCTRL(); // MM_Interface.putfieldWriteBarrier(T0,T1,T2,T3) @@ -52,7 +51,7 @@ asm.emitLAddrToc(S0, VM_Entrypoints.putfieldWriteBarrierMethod.getOffset()); asm.emitMTCTR(S0); comp.peekAddr(T0, 1); // object base - if (VM.ExplicitlyGuardLowMemory) asm.emitNullCheck(T0); + asm.emitNullCheck(T0); asm.emitLVALAddr(T1, fieldOffset); // offset comp.peekAddr(T2, 0); // value to store asm.emitLVAL(T3, locationMetadata); @@ -96,7 +95,7 @@ asm.emitLAddrToc(S0, VM_Entrypoints.getfieldReadBarrierMethod.getOffset()); asm.emitMTCTR(S0); comp.peekAddr(T0, 0); // object base - if (VM.ExplicitlyGuardLowMemory) asm.emitNullCheck(T0); + asm.emitNullCheck(T0); asm.emitLVAL(T2, locationMetadata); asm.emitBCCTRL(); // MM_Interface.getfieldReadBarrier(T0,T1,T2) } @@ -107,7 +106,7 @@ asm.emitLAddrToc(S0, VM_Entrypoints.getfieldReadBarrierMethod.getOffset()); asm.emitMTCTR(S0); comp.peekAddr(T0, 0); // object base - if (VM.ExplicitlyGuardLowMemory) asm.emitNullCheck(T0); + asm.emitNullCheck(T0); asm.emitLVALAddr(T1, fieldOffset); // offset asm.emitLVAL(T2, locationMetadata); asm.emitBCCTRL(); // MM_Interface.getfieldReadBarrier(T0,T1,T2) Modified: rvmroot/branches/RVM-265-ReadBarriers/rvm/src/org/jikesrvm/compilers/opt/OPT_ExpandRuntimeServices.java =================================================================== --- rvmroot/branches/RVM-265-ReadBarriers/rvm/src/org/jikesrvm/compilers/opt/OPT_ExpandRuntimeServices.java 2007-09-28 01:03:02 UTC (rev 13706) +++ rvmroot/branches/RVM-265-ReadBarriers/rvm/src/org/jikesrvm/compilers/opt/OPT_ExpandRuntimeServices.java 2007-09-28 01:04:55 UTC (rev 13707) @@ -338,6 +338,7 @@ null, OPT_IRTools.AC(target.getOffset()), OPT_MethodOperand.STATIC(target), + AStore.getClearGuard(inst), AStore.getArray(inst).copy(), AStore.getIndex(inst).copy(), AStore.getValue(inst).copy()); @@ -385,6 +386,7 @@ null, OPT_IRTools.AC(target.getOffset()), OPT_MethodOperand.STATIC(target), + PutField.getClearGuard(inst), PutField.getRef(inst).copy(), PutField.getOffset(inst).copy(), PutField.getValue(inst).copy(), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |