# HG changeset patch # User Josef Eisl # Date 1435912509 -7200 # Node ID 24db9b5a9f042d0a8bd6c3b7c8341120b65f5105 # Parent d769b9ccc2b576120c3dd880f54e0d165ada36df Introduce AbstractBlockEndOp and add methods to BlockEndOp. diff -r d769b9ccc2b5 -r 24db9b5a9f04 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64DeoptimizeOp.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64DeoptimizeOp.java Thu Jul 23 12:12:45 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64DeoptimizeOp.java Fri Jul 03 10:35:09 2015 +0200 @@ -31,7 +31,7 @@ import com.oracle.graal.lir.asm.*; @Opcode("DEOPT") -final class AMD64DeoptimizeOp extends AMD64LIRInstruction implements BlockEndOp { +final class AMD64DeoptimizeOp extends AMD64BlockEndOp implements BlockEndOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(AMD64DeoptimizeOp.class); @State private LIRFrameState info; diff -r d769b9ccc2b5 -r 24db9b5a9f04 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotDeoptimizeCallerOp.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotDeoptimizeCallerOp.java Thu Jul 23 12:12:45 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotDeoptimizeCallerOp.java Fri Jul 03 10:35:09 2015 +0200 @@ -23,19 +23,19 @@ package com.oracle.graal.hotspot.amd64; import static com.oracle.graal.hotspot.HotSpotHostBackend.*; -import jdk.internal.jvmci.meta.*; import com.oracle.graal.asm.amd64.*; import com.oracle.graal.lir.*; -import com.oracle.graal.lir.StandardOp.BlockEndOp; import com.oracle.graal.lir.amd64.*; import com.oracle.graal.lir.asm.*; +import jdk.internal.jvmci.meta.*; + /** * Removes the current frame and tail calls the uncommon trap routine. */ @Opcode("DEOPT_CALLER") -final class AMD64HotSpotDeoptimizeCallerOp extends AMD64HotSpotEpilogueOp implements BlockEndOp { +final class AMD64HotSpotDeoptimizeCallerOp extends AMD64HotSpotEpilogueBlockEndOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(AMD64HotSpotDeoptimizeCallerOp.class); diff -r d769b9ccc2b5 -r 24db9b5a9f04 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEpilogueBlockEndOp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEpilogueBlockEndOp.java Fri Jul 03 10:35:09 2015 +0200 @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.amd64; + +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; + +import com.oracle.graal.asm.amd64.*; +import com.oracle.graal.lir.*; +import com.oracle.graal.lir.amd64.*; +import com.oracle.graal.lir.asm.*; + +import jdk.internal.jvmci.meta.*; + +/** + * @see AMD64HotSpotEpilogueOp + */ +abstract class AMD64HotSpotEpilogueBlockEndOp extends AMD64BlockEndOp { + + protected AMD64HotSpotEpilogueBlockEndOp(LIRInstructionClass c, AllocatableValue savedRbp) { + super(c); + this.savedRbp = savedRbp; + } + + @Use({REG, STACK}) private AllocatableValue savedRbp; + + protected void leaveFrameAndRestoreRbp(CompilationResultBuilder crb, AMD64MacroAssembler masm) { + AMD64HotSpotEpilogueOp.leaveFrameAndRestoreRbp(savedRbp, crb, masm); + } + +} diff -r d769b9ccc2b5 -r 24db9b5a9f04 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEpilogueOp.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEpilogueOp.java Thu Jul 23 12:12:45 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEpilogueOp.java Fri Jul 03 10:35:09 2015 +0200 @@ -46,6 +46,10 @@ @Use({REG, STACK}) private AllocatableValue savedRbp; protected void leaveFrameAndRestoreRbp(CompilationResultBuilder crb, AMD64MacroAssembler masm) { + leaveFrameAndRestoreRbp(savedRbp, crb, masm); + } + + static void leaveFrameAndRestoreRbp(AllocatableValue savedRbp, CompilationResultBuilder crb, AMD64MacroAssembler masm) { if (isStackSlot(savedRbp)) { // Restoring RBP from the stack must be done before the frame is removed masm.movq(rbp, (AMD64Address) crb.asAddress(savedRbp)); diff -r d769b9ccc2b5 -r 24db9b5a9f04 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotJumpToExceptionHandlerInCallerOp.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotJumpToExceptionHandlerInCallerOp.java Thu Jul 23 12:12:45 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotJumpToExceptionHandlerInCallerOp.java Fri Jul 03 10:35:09 2015 +0200 @@ -22,8 +22,6 @@ */ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.meta.*; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; import static jdk.internal.jvmci.amd64.AMD64.*; import static jdk.internal.jvmci.code.ValueUtil.*; @@ -31,15 +29,17 @@ import com.oracle.graal.asm.amd64.*; import com.oracle.graal.asm.amd64.AMD64Assembler.*; import com.oracle.graal.lir.*; -import com.oracle.graal.lir.StandardOp.BlockEndOp; import com.oracle.graal.lir.asm.*; +import jdk.internal.jvmci.code.*; +import jdk.internal.jvmci.meta.*; + /** * Sets up the arguments for an exception handler in the callers frame, removes the current frame * and jumps to the handler. */ @Opcode("JUMP_TO_EXCEPTION_HANDLER_IN_CALLER") -final class AMD64HotSpotJumpToExceptionHandlerInCallerOp extends AMD64HotSpotEpilogueOp implements BlockEndOp { +final class AMD64HotSpotJumpToExceptionHandlerInCallerOp extends AMD64HotSpotEpilogueBlockEndOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(AMD64HotSpotJumpToExceptionHandlerInCallerOp.class); diff -r d769b9ccc2b5 -r 24db9b5a9f04 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotReturnOp.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotReturnOp.java Thu Jul 23 12:12:45 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotReturnOp.java Fri Jul 03 10:35:09 2015 +0200 @@ -23,20 +23,20 @@ package com.oracle.graal.hotspot.amd64; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; + +import com.oracle.graal.asm.amd64.*; +import com.oracle.graal.lir.*; +import com.oracle.graal.lir.asm.*; + import jdk.internal.jvmci.code.*; import jdk.internal.jvmci.hotspot.*; import jdk.internal.jvmci.meta.*; -import com.oracle.graal.asm.amd64.*; -import com.oracle.graal.lir.*; -import com.oracle.graal.lir.StandardOp.BlockEndOp; -import com.oracle.graal.lir.asm.*; - /** * Returns from a function. */ @Opcode("RETURN") -final class AMD64HotSpotReturnOp extends AMD64HotSpotEpilogueOp implements BlockEndOp { +final class AMD64HotSpotReturnOp extends AMD64HotSpotEpilogueBlockEndOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(AMD64HotSpotReturnOp.class); @Use({REG, ILLEGAL}) protected Value value; diff -r d769b9ccc2b5 -r 24db9b5a9f04 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotUnwindOp.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotUnwindOp.java Thu Jul 23 12:12:45 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotUnwindOp.java Fri Jul 03 10:35:09 2015 +0200 @@ -26,21 +26,21 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; import static jdk.internal.jvmci.amd64.AMD64.*; import static jdk.internal.jvmci.code.ValueUtil.*; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.meta.*; import com.oracle.graal.asm.amd64.*; import com.oracle.graal.hotspot.stubs.*; import com.oracle.graal.lir.*; -import com.oracle.graal.lir.StandardOp.BlockEndOp; import com.oracle.graal.lir.amd64.*; import com.oracle.graal.lir.asm.*; +import jdk.internal.jvmci.code.*; +import jdk.internal.jvmci.meta.*; + /** * Removes the current frame and jumps to the {@link UnwindExceptionToCallerStub}. */ @Opcode("UNWIND") -final class AMD64HotSpotUnwindOp extends AMD64HotSpotEpilogueOp implements BlockEndOp { +final class AMD64HotSpotUnwindOp extends AMD64HotSpotEpilogueBlockEndOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(AMD64HotSpotUnwindOp.class); @Use({REG}) protected RegisterValue exception; diff -r d769b9ccc2b5 -r 24db9b5a9f04 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCDeoptimizeOp.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCDeoptimizeOp.java Thu Jul 23 12:12:45 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCDeoptimizeOp.java Fri Jul 03 10:35:09 2015 +0200 @@ -28,12 +28,11 @@ import com.oracle.graal.asm.sparc.*; import com.oracle.graal.lir.*; -import com.oracle.graal.lir.StandardOp.BlockEndOp; import com.oracle.graal.lir.asm.*; import com.oracle.graal.lir.sparc.*; @Opcode("DEOPT") -final class SPARCDeoptimizeOp extends SPARCLIRInstruction implements BlockEndOp { +final class SPARCDeoptimizeOp extends SPARCBlockEndOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(SPARCDeoptimizeOp.class); public static final SizeEstimate SIZE = SizeEstimate.create(1); @Temp AllocatableValue pcRegister; diff -r d769b9ccc2b5 -r 24db9b5a9f04 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotEpilogueOp.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotEpilogueOp.java Thu Jul 23 12:12:45 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotEpilogueOp.java Fri Jul 03 10:35:09 2015 +0200 @@ -23,17 +23,16 @@ package com.oracle.graal.hotspot.sparc; import com.oracle.graal.lir.*; -import com.oracle.graal.lir.StandardOp.BlockEndOp; import com.oracle.graal.lir.asm.*; import com.oracle.graal.lir.sparc.*; /** * Superclass for operations that leave a method's frame. */ -abstract class SPARCHotSpotEpilogueOp extends SPARCLIRInstruction implements BlockEndOp { +abstract class SPARCHotSpotEpilogueOp extends SPARCBlockEndOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(SPARCHotSpotEpilogueOp.class); - protected SPARCHotSpotEpilogueOp(LIRInstructionClass c, SizeEstimate size) { + protected SPARCHotSpotEpilogueOp(LIRInstructionClass c, SizeEstimate size) { super(c, size); } diff -r d769b9ccc2b5 -r 24db9b5a9f04 graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64BlockEndOp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64BlockEndOp.java Fri Jul 03 10:35:09 2015 +0200 @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2015, 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.lir.amd64; + +import com.oracle.graal.asm.amd64.*; +import com.oracle.graal.lir.*; +import com.oracle.graal.lir.StandardOp.*; +import com.oracle.graal.lir.asm.*; + +public abstract class AMD64BlockEndOp extends AbstractBlockEndOp { + + public static final LIRInstructionClass TYPE = LIRInstructionClass.create(AMD64BlockEndOp.class); + + protected AMD64BlockEndOp(LIRInstructionClass c) { + super(c); + } + + @Override + public final void emitCode(CompilationResultBuilder crb) { + emitCode(crb, (AMD64MacroAssembler) crb.asm); + } + + public abstract void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm); +} diff -r d769b9ccc2b5 -r 24db9b5a9f04 graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java Thu Jul 23 12:12:45 2015 +0200 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java Fri Jul 03 10:35:09 2015 +0200 @@ -42,7 +42,7 @@ public class AMD64ControlFlow { - public static final class ReturnOp extends AMD64LIRInstruction implements BlockEndOp { + public static final class ReturnOp extends AMD64BlockEndOp implements BlockEndOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(ReturnOp.class); @Use({REG, ILLEGAL}) protected Value x; @@ -58,7 +58,7 @@ } } - public static class BranchOp extends AMD64LIRInstruction implements StandardOp.BranchOp { + public static class BranchOp extends AMD64BlockEndOp implements StandardOp.BranchOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(BranchOp.class); protected final ConditionFlag condition; protected final LabelRef trueDestination; @@ -125,7 +125,7 @@ } } - public static final class StrategySwitchOp extends AMD64LIRInstruction implements BlockEndOp { + public static final class StrategySwitchOp extends AMD64BlockEndOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(StrategySwitchOp.class); @Use({CONST}) protected JavaConstant[] keyConstants; private final LabelRef[] keyTargets; @@ -181,7 +181,7 @@ } } - public static final class TableSwitchOp extends AMD64LIRInstruction implements BlockEndOp { + public static final class TableSwitchOp extends AMD64BlockEndOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(TableSwitchOp.class); private final int lowKey; private final LabelRef defaultTarget; diff -r d769b9ccc2b5 -r 24db9b5a9f04 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCBlockEndOp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCBlockEndOp.java Fri Jul 03 10:35:09 2015 +0200 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2015, 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.lir.sparc; + +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; + +import com.oracle.graal.lir.*; +import com.oracle.graal.lir.StandardOp.*; + +import jdk.internal.jvmci.meta.*; + +public abstract class SPARCBlockEndOp extends SPARCLIRInstruction implements BlockEndOp { + public static final LIRInstructionClass TYPE = LIRInstructionClass.create(SPARCBlockEndOp.class); + + @Alive({REG, STACK, CONST}) private Value[] outgoingValues; + private int size; + + protected SPARCBlockEndOp(LIRInstructionClass c) { + this(c, null); + } + + protected SPARCBlockEndOp(LIRInstructionClass c, SizeEstimate sizeEstimate) { + super(c, sizeEstimate); + this.outgoingValues = Value.NO_VALUES; + this.size = 0; + } + + public void setOutgoingValues(Value[] values) { + assert outgoingValues.length == 0; + assert values != null; + outgoingValues = values; + size = values.length; + } + + public int getOutgoingSize() { + return size; + } + + public Value getOutgoingValue(int idx) { + assert checkRange(idx); + return outgoingValues[idx]; + } + + private boolean checkRange(int idx) { + return idx < size; + } + + public void clearOutgoingValues() { + outgoingValues = Value.NO_VALUES; + size = 0; + } + + public int addOutgoingValues(Value[] v) { + + int t = size + v.length; + if (t >= outgoingValues.length) { + Value[] newArray = new Value[t]; + System.arraycopy(outgoingValues, 0, newArray, 0, size); + outgoingValues = newArray; + } + System.arraycopy(v, 0, outgoingValues, size, v.length); + size = t; + return t; + + } +} diff -r d769b9ccc2b5 -r 24db9b5a9f04 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java --- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java Thu Jul 23 12:12:45 2015 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java Fri Jul 03 10:35:09 2015 +0200 @@ -38,7 +38,6 @@ import jdk.internal.jvmci.code.*; import jdk.internal.jvmci.common.*; import jdk.internal.jvmci.meta.*; -import jdk.internal.jvmci.sparc.*; import jdk.internal.jvmci.sparc.SPARC.CPUFeature; import com.oracle.graal.asm.*; @@ -51,7 +50,6 @@ import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Setx; import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.lir.*; -import com.oracle.graal.lir.StandardOp.BlockEndOp; import com.oracle.graal.lir.SwitchStrategy.BaseSwitchClosure; import com.oracle.graal.lir.asm.*; @@ -60,7 +58,7 @@ // if does not fit into simm5 of cbcond) instruction and the final branch instruction private static final int maximumSelfOffsetInstructions = 2; - public static final class ReturnOp extends SPARCLIRInstruction implements BlockEndOp { + public static final class ReturnOp extends SPARCBlockEndOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(ReturnOp.class); public static final SizeEstimate SIZE = SizeEstimate.create(2); @@ -83,7 +81,7 @@ } } - public static final class CompareBranchOp extends SPARCLIRInstruction implements BlockEndOp, SPARCDelayedControlTransfer { + public static final class CompareBranchOp extends SPARCBlockEndOp implements SPARCDelayedControlTransfer { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(CompareBranchOp.class); public static final SizeEstimate SIZE = SizeEstimate.create(3); static final EnumSet SUPPORTED_KINDS = EnumSet.of(Kind.Long, Kind.Int, Kind.Object, Kind.Float, Kind.Double); @@ -312,15 +310,12 @@ private static boolean isShortBranch(SPARCAssembler asm, int position, LabelHint hint, Label label) { int disp = 0; - boolean dispValid = true; if (label.isBound()) { disp = label.position() - position; } else if (hint != null && hint.isValid()) { disp = hint.getTarget() - hint.getPosition(); - } else { - dispValid = false; } - if (dispValid) { + if (disp != 0) { if (disp < 0) { disp -= maximumSelfOffsetInstructions * asm.target.wordSize; } else { @@ -333,7 +328,7 @@ return false; } - public static final class BranchOp extends SPARCLIRInstruction implements StandardOp.BranchOp { + public static final class BranchOp extends SPARCBlockEndOp implements StandardOp.BranchOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(BranchOp.class); public static final SizeEstimate SIZE = SizeEstimate.create(2); protected final ConditionFlag conditionFlag; @@ -398,7 +393,7 @@ return true; } - public static final class StrategySwitchOp extends SPARCLIRInstruction implements BlockEndOp { + public static final class StrategySwitchOp extends SPARCBlockEndOp { public static final LIRInstructionClass TYPE = LIRInstructionClass.create(StrategySwitchOp.class); @Use({CONST}) protected JavaConstant[] keyConstants; private final LabelRef[] keyTargets; @@ -407,8 +402,7 @@ @Alive({REG, ILLEGAL}) protected Value constantTableBase; @Temp({REG}) protected Value scratch; private final SwitchStrategy strategy; - private final Map labelHints; - private final List