# HG changeset patch # User Doug Simon # Date 1335172236 -7200 # Node ID 7689999f0ea6ac8c89a6527103824147109c2ae2 # Parent a44b5ebb28a022b1800c3d411213bf367ca3a153 improved disassembly comments for out-of-line stubs diff -r a44b5ebb28a0 -r 7689999f0ea6 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/amd64/AMD64DeoptimizationStub.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/amd64/AMD64DeoptimizationStub.java Mon Apr 23 10:27:17 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/amd64/AMD64DeoptimizationStub.java Mon Apr 23 11:10:36 2012 +0200 @@ -68,4 +68,9 @@ AMD64Call.directCall(tasm, masm, CiRuntimeCall.Deoptimize, info); AMD64Call.shouldNotReachHere(tasm, masm); } + + @Override + public String description() { + return "deopt stub[reason=" + reason + ", action=" + action + "]"; + } } diff -r a44b5ebb28a0 -r 7689999f0ea6 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/amd64/AMD64LIRGenerator.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/amd64/AMD64LIRGenerator.java Mon Apr 23 10:27:17 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/amd64/AMD64LIRGenerator.java Mon Apr 23 11:10:36 2012 +0200 @@ -553,7 +553,7 @@ protected LabelRef createDeoptStub(RiDeoptAction action, RiDeoptReason reason, LIRDebugInfo info, Object deoptInfo) { assert info.topFrame.bci >= 0 : "invalid bci for deopt framestate"; AMD64DeoptimizationStub stub = new AMD64DeoptimizationStub(action, reason, info, deoptInfo); - lir.deoptimizationStubs.add(stub); + lir.stubs.add(stub); return LabelRef.forLabel(stub.label); } diff -r a44b5ebb28a0 -r 7689999f0ea6 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/amd64/AMD64XirOp.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/amd64/AMD64XirOp.java Mon Apr 23 10:27:17 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/amd64/AMD64XirOp.java Mon Apr 23 11:10:36 2012 +0200 @@ -81,7 +81,7 @@ } if (snippet.template.slowPath != null) { - tasm.slowPaths.add(new SlowPath(labels)); + tasm.stubs.add(new SlowPath(labels)); } } @@ -97,6 +97,11 @@ emitXirInstructions(tasm, masm, snippet.template.slowPath, labels, getOperands(), snippet.marks); masm.nop(); } + + @Override + public String description() { + return "slow path for " + snippet.template.name; + } } diff -r a44b5ebb28a0 -r 7689999f0ea6 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/target/amd64/HotSpotAMD64Backend.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/target/amd64/HotSpotAMD64Backend.java Mon Apr 23 10:27:17 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/target/amd64/HotSpotAMD64Backend.java Mon Apr 23 11:10:36 2012 +0200 @@ -161,7 +161,7 @@ AbstractAssembler masm = new AMD64MacroAssembler(target, frameMap.registerConfig); HotSpotFrameContext frameContext = canOmitFrame ? null : new HotSpotFrameContext(); - TargetMethodAssembler tasm = new TargetMethodAssembler(target, runtime, frameMap, masm, frameContext); + TargetMethodAssembler tasm = new TargetMethodAssembler(target, runtime, frameMap, masm, frameContext, lir.stubs); tasm.setFrameSize(frameMap.frameSize()); tasm.targetMethod.setCustomStackAreaOffset(frameMap.offsetToCustomArea()); return tasm; diff -r a44b5ebb28a0 -r 7689999f0ea6 graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java Mon Apr 23 10:27:17 2012 +0200 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java Mon Apr 23 11:10:36 2012 +0200 @@ -500,7 +500,7 @@ private static void emitConvertFixup(TargetMethodAssembler tasm, AMD64MacroAssembler masm, CiValue result, CiValue x) { ConvertSlowPath slowPath = new ConvertSlowPath(result, x); - tasm.slowPaths.add(slowPath); + tasm.stubs.add(slowPath); switch (result.kind) { case Int: masm.cmpl(asIntReg(result), Integer.MIN_VALUE); break; case Long: masm.cmpq(asLongReg(result), tasm.asLongConstRef(CiConstant.forLong(java.lang.Long.MIN_VALUE))); break; @@ -547,6 +547,11 @@ masm.xorptr(asRegister(result), asRegister(result)); masm.jmp(continuation); } + + @Override + public String description() { + return "convert " + x + " to " + result; + } } diff -r a44b5ebb28a0 -r 7689999f0ea6 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIR.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIR.java Mon Apr 23 10:27:17 2012 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIR.java Mon Apr 23 11:10:36 2012 +0200 @@ -54,9 +54,11 @@ */ private final List codeEmittingOrder; - public final List slowPaths; - - public final List deoptimizationStubs; + /** + * Various out-of-line stubs to be emitted near the end of the method + * after all other LIR code has been emitted. + */ + public final List stubs; private int numVariables; @@ -74,6 +76,10 @@ */ public interface Code { void emitCode(TargetMethodAssembler tasm); + /** + * A description of this code stub useful for commenting the code in a disassembly. + */ + String description(); } /** @@ -87,8 +93,7 @@ this.codeEmittingOrder = codeEmittingOrder; this.linearScanOrder = linearScanOrder; - slowPaths = new ArrayList<>(); - deoptimizationStubs = new ArrayList<>(); + stubs = new ArrayList<>(); } /** @@ -141,16 +146,9 @@ emitBlock(tasm, b); } - // generate code for slow cases - for (Code sp : slowPaths) { - emitSlowPath(tasm, sp); - } - for (Code sp : tasm.slowPaths) { - emitSlowPath(tasm, sp); - } - // generate deoptimization stubs - for (Code sp : deoptimizationStubs) { - emitSlowPath(tasm, sp); + // generate code stubs + for (Code c : stubs) { + emitCodeStub(tasm, c); } } @@ -182,11 +180,11 @@ } } - private static void emitSlowPath(TargetMethodAssembler tasm, Code sp) { + private static void emitCodeStub(TargetMethodAssembler tasm, Code code) { if (Debug.isDumpEnabled()) { - tasm.blockComment(String.format("slow case %s", sp.getClass().getName())); + tasm.blockComment(String.format("code stub: %s", code.description())); } - sp.emitCode(tasm); + code.emitCode(tasm); } public void setHasArgInCallerFrame() { diff -r a44b5ebb28a0 -r 7689999f0ea6 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java Mon Apr 23 10:27:17 2012 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java Mon Apr 23 11:10:36 2012 +0200 @@ -26,13 +26,13 @@ import java.util.*; +import com.oracle.graal.debug.*; +import com.oracle.graal.graph.*; +import com.oracle.graal.lir.*; +import com.oracle.graal.lir.LIR.Code; import com.oracle.max.asm.*; import com.oracle.max.cri.ci.*; import com.oracle.max.cri.ri.*; -import com.oracle.graal.debug.*; -import com.oracle.graal.graph.*; -import com.oracle.graal.lir.*; -import com.oracle.graal.lir.LIR.*; public class TargetMethodAssembler { @@ -51,7 +51,11 @@ public final CiTarget target; public final RiRuntime runtime; public final FrameMap frameMap; - public final List slowPaths; + + /** + * Out-of-line stubs to be emitted. + */ + public final List stubs; /** * The object that emits code for managing a method's frame. @@ -62,11 +66,11 @@ private List exceptionInfoList; private int lastSafepointPos; - public TargetMethodAssembler(CiTarget target, RiRuntime runtime, FrameMap frameMap, AbstractAssembler asm, FrameContext frameContext) { + public TargetMethodAssembler(CiTarget target, RiRuntime runtime, FrameMap frameMap, AbstractAssembler asm, FrameContext frameContext, List stubs) { this.target = target; this.runtime = runtime; this.frameMap = frameMap; - this.slowPaths = new ArrayList<>(); + this.stubs = stubs; this.asm = asm; this.targetMethod = new CiTargetMethod(); this.frameContext = frameContext;