# HG changeset patch # User Roland Schatz # Date 1367316013 -7200 # Node ID 149fe42411df52d0ccc4ee618d2585f600f2799c # Parent 20dc10bb82d1251685392a4d1eba5ff1cb4de814 Use platform specific kind in backend. diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Register.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Register.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Register.java Tue Apr 30 12:00:13 2013 +0200 @@ -85,7 +85,7 @@ * An array of {@link RegisterValue} objects, for this register, with one entry per {@link Kind} * , indexed by {@link Kind#ordinal}. */ - private final RegisterValue[] values; + private final HashMap values; /** * Attributes that characterize a register in a useful way. @@ -125,11 +125,7 @@ this.spillSlotSize = spillSlotSize; this.flags = createMask(flags); this.encoding = encoding; - - values = new RegisterValue[Kind.values().length]; - for (Kind kind : Kind.values()) { - values[kind.ordinal()] = new RegisterValue(kind, this); - } + this.values = new HashMap<>(); } private static int createMask(RegisterFlag... flags) { @@ -150,8 +146,14 @@ * @param kind the specified kind * @return the {@link RegisterValue} */ - public RegisterValue asValue(Kind kind) { - return values[kind.ordinal()]; + public RegisterValue asValue(PlatformKind kind) { + if (values.containsKey(kind)) { + return values.get(kind); + } else { + RegisterValue ret = new RegisterValue(kind, this); + values.put(kind, ret); + return ret; + } } /** diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RegisterValue.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RegisterValue.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RegisterValue.java Tue Apr 30 12:00:13 2013 +0200 @@ -27,8 +27,8 @@ /** * Denotes a register that stores a value of a fixed kind. There is exactly one (canonical) instance * of {@link RegisterValue} for each ({@link Register}, {@link Kind}) pair. Use - * {@link Register#asValue(Kind)} to retrieve the canonical {@link RegisterValue} instance for a - * given (register,kind) pair. + * {@link Register#asValue(PlatformKind)} to retrieve the canonical {@link RegisterValue} instance + * for a given (register,kind) pair. */ public final class RegisterValue extends AllocatableValue { @@ -39,14 +39,14 @@ /** * Should only be called from {@link Register#Register} to ensure canonicalization. */ - protected RegisterValue(Kind kind, Register register) { + protected RegisterValue(PlatformKind kind, Register register) { super(kind); this.reg = register; } @Override public int hashCode() { - return (getRegister().number << 4) ^ getKind().ordinal(); + return (getRegister().number << 4) ^ getPlatformKind().hashCode(); } @Override diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/StackSlot.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/StackSlot.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/StackSlot.java Tue Apr 30 12:00:13 2013 +0200 @@ -22,7 +22,7 @@ */ package com.oracle.graal.api.code; -import static com.oracle.graal.api.meta.Kind.*; +import java.util.*; import com.oracle.graal.api.meta.*; @@ -46,25 +46,20 @@ * @param addFrameSize Specifies if the offset is relative to the stack pointer, or the * beginning of the frame (stack pointer + total frame size). */ - public static StackSlot get(Kind kind, int offset, boolean addFrameSize) { - assert kind.getStackKind() == kind; + public static StackSlot get(PlatformKind kind, int offset, boolean addFrameSize) { assert addFrameSize || offset >= 0; if (offset % CACHE_GRANULARITY == 0) { - StackSlot[][] cache; - int index = offset / CACHE_GRANULARITY; + StackSlot slot; if (!addFrameSize) { - cache = OUT_CACHE; + slot = OUT_CACHE.lookup(kind, offset); } else if (offset >= 0) { - cache = IN_CACHE; + slot = IN_CACHE.lookup(kind, offset); } else { - cache = SPILL_CACHE; - index = -index; + slot = SPILL_CACHE.lookup(kind, offset); } - StackSlot[] slots = cache[kind.ordinal()]; - if (index < slots.length) { - StackSlot slot = slots[index]; - assert slot.getKind() == kind && slot.offset == offset && slot.addFrameSize == addFrameSize; + if (slot != null) { + assert slot.getPlatformKind().equals(kind) && slot.offset == offset && slot.addFrameSize == addFrameSize; return slot; } } @@ -72,10 +67,10 @@ } /** - * Private constructor to enforce use of {@link #get(Kind, int, boolean)} so that a cache can be - * used. + * Private constructor to enforce use of {@link #get(PlatformKind, int, boolean)} so that a + * cache can be used. */ - private StackSlot(Kind kind, int offset, boolean addFrameSize) { + private StackSlot(PlatformKind kind, int offset, boolean addFrameSize) { super(kind); this.offset = offset; this.addFrameSize = addFrameSize; @@ -107,7 +102,7 @@ @Override public int hashCode() { - return getKind().ordinal() ^ (offset << 4) ^ (addFrameSize ? 15 : 0); + return getPlatformKind().hashCode() ^ (offset << 4) ^ (addFrameSize ? 15 : 0); } @Override @@ -117,7 +112,7 @@ } if (o instanceof StackSlot) { StackSlot l = (StackSlot) o; - return l.getKind() == getKind() && l.offset == offset && l.addFrameSize == addFrameSize; + return l.getPlatformKind().equals(getPlatformKind()) && l.offset == offset && l.addFrameSize == addFrameSize; } return false; } @@ -139,7 +134,7 @@ public StackSlot asOutArg() { assert offset >= 0; if (addFrameSize) { - return get(getKind(), offset, false); + return get(getPlatformKind(), offset, false); } return this; } @@ -150,28 +145,48 @@ public StackSlot asInArg() { assert offset >= 0; if (!addFrameSize) { - return get(getKind(), offset, true); + return get(getPlatformKind(), offset, true); } return this; } - private static final int CACHE_GRANULARITY = 8; private static final int SPILL_CACHE_PER_KIND_SIZE = 100; private static final int PARAM_CACHE_PER_KIND_SIZE = 10; + private static final int CACHE_GRANULARITY = 8; - private static final StackSlot[][] SPILL_CACHE = makeCache(SPILL_CACHE_PER_KIND_SIZE, -1, true); - private static final StackSlot[][] IN_CACHE = makeCache(PARAM_CACHE_PER_KIND_SIZE, 1, true); - private static final StackSlot[][] OUT_CACHE = makeCache(PARAM_CACHE_PER_KIND_SIZE, 1, false); + private static class Cache extends HashMap { + + private static final long serialVersionUID = 4424132866289682843L; + + private final int cachePerKindSize; + private final int sign; + private final boolean addFrameSize; + + Cache(int cachePerKindSize, int sign, boolean addFrameSize) { + this.cachePerKindSize = cachePerKindSize; + this.sign = sign; + this.addFrameSize = addFrameSize; + } - private static StackSlot[][] makeCache(int cachePerKindSize, int sign, boolean addFrameSize) { - StackSlot[][] cache = new StackSlot[Kind.values().length][]; - for (Kind kind : new Kind[]{Illegal, Int, Long, Float, Double, Object}) { - StackSlot[] slots = new StackSlot[cachePerKindSize]; - for (int i = 0; i < cachePerKindSize; i++) { - slots[i] = new StackSlot(kind, sign * i * CACHE_GRANULARITY, addFrameSize); + StackSlot lookup(PlatformKind kind, int offset) { + int index = sign * offset / CACHE_GRANULARITY; + StackSlot[] slots = this.get(kind); + if (slots == null) { + slots = new StackSlot[cachePerKindSize]; + for (int i = 0; i < cachePerKindSize; i++) { + slots[i] = new StackSlot(kind, sign * i * CACHE_GRANULARITY, addFrameSize); + } + this.put(kind, slots); } - cache[kind.ordinal()] = slots; + if (index < slots.length) { + return slots[index]; + } else { + return null; + } } - return cache; } + + private static final Cache SPILL_CACHE = new Cache(SPILL_CACHE_PER_KIND_SIZE, -1, true); + private static final Cache IN_CACHE = new Cache(PARAM_CACHE_PER_KIND_SIZE, 1, true); + private static final Cache OUT_CACHE = new Cache(PARAM_CACHE_PER_KIND_SIZE, 1, false); } diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/TargetDescription.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/TargetDescription.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/TargetDescription.java Tue Apr 30 12:00:13 2013 +0200 @@ -88,9 +88,9 @@ * @param kind the kind for which to get the size * @return the size in bytes of {@code kind} */ - public int sizeInBytes(Kind kind) { + public int sizeInBytes(PlatformKind kind) { // Checkstyle: stop - switch (kind) { + switch ((Kind) kind) { case Boolean: return 1; case Byte: diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualObject.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualObject.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualObject.java Tue Apr 30 12:00:13 2013 +0200 @@ -168,7 +168,7 @@ @Override public int hashCode() { - return getKind().ordinal() + type.hashCode(); + return getPlatformKind().hashCode() + type.hashCode(); } @Override diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/AllocatableValue.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/AllocatableValue.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/AllocatableValue.java Tue Apr 30 12:00:13 2013 +0200 @@ -32,8 +32,7 @@ public static final AllocatableValue[] NONE = {}; - public AllocatableValue(Kind kind) { - super(kind); + public AllocatableValue(PlatformKind platformKind) { + super(platformKind); } - } diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Kind.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Kind.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Kind.java Tue Apr 30 12:00:13 2013 +0200 @@ -29,7 +29,7 @@ * {@link Kind#Int} for {@code int} and {@link Kind#Object} for all object types. A kind has a * single character short name, a Java name, and a set of flags further describing its behavior. */ -public enum Kind { +public enum Kind implements PlatformKind { /** The primitive boolean kind, represented as an int on the stack. */ Boolean('z', "boolean", true, java.lang.Boolean.TYPE, java.lang.Boolean.class), diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/PlatformKind.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/PlatformKind.java Tue Apr 30 12:00:13 2013 +0200 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2013, 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.api.meta; + +/** + * Represents a platform-specific low-level type for values. + */ +public interface PlatformKind { + + String name(); +} diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Value.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Value.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Value.java Tue Apr 30 12:00:13 2013 +0200 @@ -41,14 +41,20 @@ }; private final Kind kind; + private final PlatformKind platformKind; /** * Initializes a new value of the specified kind. * - * @param kind the kind + * @param platformKind the kind */ - protected Value(Kind kind) { - this.kind = kind; + protected Value(PlatformKind platformKind) { + this.platformKind = platformKind; + if (platformKind instanceof Kind) { + this.kind = (Kind) platformKind; + } else { + this.kind = Kind.Illegal; + } } /** @@ -65,4 +71,11 @@ public final Kind getKind() { return kind; } + + /** + * Returns the platform specific kind used to store this value. + */ + public final PlatformKind getPlatformKind() { + return platformKind; + } } diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Tue Apr 30 12:00:13 2013 +0200 @@ -525,7 +525,7 @@ } private void emitDivRem(AMD64Arithmetic op, Value a, Value b, LIRFrameState state) { - AllocatableValue rax = AMD64.rax.asValue(a.getKind()); + AllocatableValue rax = AMD64.rax.asValue(a.getPlatformKind()); emitMove(rax, a); append(new DivRemOp(op, rax, asAllocatable(b), state)); } @@ -554,12 +554,12 @@ emitDivRem(LDIV, a, b, state(deopting)); return emitMove(RAX_L); case Float: { - Variable result = newVariable(a.getKind()); + Variable result = newVariable(a.getPlatformKind()); append(new BinaryRegStack(FDIV, result, asAllocatable(a), asAllocatable(b))); return result; } case Double: { - Variable result = newVariable(a.getKind()); + Variable result = newVariable(a.getPlatformKind()); append(new BinaryRegStack(DDIV, result, asAllocatable(a), asAllocatable(b))); return result; } @@ -657,7 +657,7 @@ } private Variable emitShift(AMD64Arithmetic op, Value a, Value b) { - Variable result = newVariable(a.getKind()); + Variable result = newVariable(a.getPlatformKind()); AllocatableValue input = asAllocatable(a); if (isConstant(b)) { append(new BinaryRegConst(op, result, input, asConstant(b))); diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/Interval.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/Interval.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/Interval.java Tue Apr 30 12:00:13 2013 +0200 @@ -430,7 +430,7 @@ /** * The kind of this interval. */ - private Kind kind; + private PlatformKind kind; /** * The head of the list of ranges describing this interval. This list is sorted by @@ -501,15 +501,15 @@ void assignLocation(AllocatableValue newLocation) { if (isRegister(newLocation)) { assert this.location == null : "cannot re-assign location for " + this; - if (newLocation.getKind() == Kind.Illegal && kind != Kind.Illegal) { + if (newLocation.getPlatformKind() == Kind.Illegal && kind != Kind.Illegal) { this.location = asRegister(newLocation).asValue(kind); return; } } else { assert this.location == null || isRegister(this.location) : "cannot re-assign location for " + this; assert isStackSlot(newLocation); - assert newLocation.getKind() != Kind.Illegal; - assert newLocation.getKind() == this.kind; + assert newLocation.getPlatformKind() != Kind.Illegal; + assert newLocation.getPlatformKind() == this.kind; } this.location = newLocation; } @@ -522,14 +522,13 @@ return location; } - public Kind kind() { + public PlatformKind kind() { assert !isRegister(operand) : "cannot access type for fixed interval"; return kind; } - void setKind(Kind kind) { + void setKind(PlatformKind kind) { assert isRegister(operand) || this.kind() == Kind.Illegal || this.kind() == kind : "overwriting existing type"; - assert kind == kind.getStackKind() || kind == Kind.Short : "these kinds should have int type registers"; this.kind = kind; } diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java Tue Apr 30 12:00:13 2013 +0200 @@ -968,7 +968,7 @@ TTY.println(blockData.get(block).liveOut.toString()); } - void addUse(AllocatableValue operand, int from, int to, RegisterPriority registerPriority, Kind kind) { + void addUse(AllocatableValue operand, int from, int to, RegisterPriority registerPriority, PlatformKind kind) { if (!isProcessed(operand)) { return; } @@ -987,7 +987,7 @@ interval.addUsePos(to & ~1, registerPriority); } - void addTemp(AllocatableValue operand, int tempPos, RegisterPriority registerPriority, Kind kind) { + void addTemp(AllocatableValue operand, int tempPos, RegisterPriority registerPriority, PlatformKind kind) { if (!isProcessed(operand)) { return; } @@ -1008,7 +1008,7 @@ return !isRegister(operand) || attributes(asRegister(operand)).isAllocatable(); } - void addDef(AllocatableValue operand, int defPos, RegisterPriority registerPriority, Kind kind) { + void addDef(AllocatableValue operand, int defPos, RegisterPriority registerPriority, PlatformKind kind) { if (!isProcessed(operand)) { return; } @@ -1197,7 +1197,7 @@ @Override public Value doValue(Value operand, OperandMode mode, EnumSet flags) { if (isVariableOrRegister(operand)) { - addDef((AllocatableValue) operand, opId, registerPriorityOfOutputOperand(op), operand.getKind().getStackKind()); + addDef((AllocatableValue) operand, opId, registerPriorityOfOutputOperand(op), operand.getPlatformKind()); addRegisterHint(op, operand, mode, flags, true); } return operand; @@ -1208,7 +1208,7 @@ @Override public Value doValue(Value operand, OperandMode mode, EnumSet flags) { if (isVariableOrRegister(operand)) { - addTemp((AllocatableValue) operand, opId, RegisterPriority.MustHaveRegister, operand.getKind().getStackKind()); + addTemp((AllocatableValue) operand, opId, RegisterPriority.MustHaveRegister, operand.getPlatformKind()); addRegisterHint(op, operand, mode, flags, false); } return operand; @@ -1220,7 +1220,7 @@ public Value doValue(Value operand, OperandMode mode, EnumSet flags) { if (isVariableOrRegister(operand)) { RegisterPriority p = registerPriorityOfInputOperand(flags); - addUse((AllocatableValue) operand, blockFrom, opId + 1, p, operand.getKind().getStackKind()); + addUse((AllocatableValue) operand, blockFrom, opId + 1, p, operand.getPlatformKind()); addRegisterHint(op, operand, mode, flags, false); } return operand; @@ -1232,7 +1232,7 @@ public Value doValue(Value operand, OperandMode mode, EnumSet flags) { if (isVariableOrRegister(operand)) { RegisterPriority p = registerPriorityOfInputOperand(flags); - addUse((AllocatableValue) operand, blockFrom, opId, p, operand.getKind().getStackKind()); + addUse((AllocatableValue) operand, blockFrom, opId, p, operand.getPlatformKind()); addRegisterHint(op, operand, mode, flags, false); } return operand; @@ -1247,7 +1247,7 @@ @Override public Value doValue(Value operand) { - addUse((AllocatableValue) operand, blockFrom, opId + 1, RegisterPriority.None, operand.getKind().getStackKind()); + addUse((AllocatableValue) operand, blockFrom, opId + 1, RegisterPriority.None, operand.getPlatformKind()); return operand; } }); diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/MoveResolver.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/MoveResolver.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/MoveResolver.java Tue Apr 30 12:00:13 2013 +0200 @@ -207,7 +207,7 @@ } private void insertMove(Value fromOpr, Interval toInterval) { - assert fromOpr.getKind() == toInterval.kind() : "move between different types"; + assert fromOpr.getPlatformKind() == toInterval.kind() : "move between different types"; assert insertIdx != -1 : "must setup insert position first"; AllocatableValue toOpr = toInterval.operand; diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Tue Apr 30 12:00:13 2013 +0200 @@ -142,22 +142,26 @@ /** * Creates a new {@linkplain Variable variable}. * - * @param kind The kind of the new variable. + * @param platformKind The kind of the new variable. * @return a new variable */ @Override - public Variable newVariable(Kind kind) { - Kind stackKind = kind.getStackKind(); - switch (stackKind) { - case Int: - case Long: - case Object: - return new Variable(stackKind, lir.nextVariable(), Register.RegisterFlag.CPU); - case Float: - case Double: - return new Variable(stackKind, lir.nextVariable(), Register.RegisterFlag.FPU); - default: - throw GraalInternalError.shouldNotReachHere(); + public Variable newVariable(PlatformKind platformKind) { + if (platformKind instanceof Kind) { + Kind stackKind = ((Kind) platformKind).getStackKind(); + switch (stackKind) { + case Int: + case Long: + case Object: + return new Variable(stackKind, lir.nextVariable(), Register.RegisterFlag.CPU); + case Float: + case Double: + return new Variable(stackKind, lir.nextVariable(), Register.RegisterFlag.FPU); + default: + throw GraalInternalError.shouldNotReachHere(); + } + } else { + return new Variable(platformKind, lir.nextVariable(), Register.RegisterFlag.FPU); } } diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64AddressValue.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64AddressValue.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64AddressValue.java Tue Apr 30 12:00:13 2013 +0200 @@ -41,11 +41,11 @@ protected final Scale scale; protected final int displacement; - public AMD64AddressValue(Kind kind, AllocatableValue base, int displacement) { + public AMD64AddressValue(PlatformKind kind, AllocatableValue base, int displacement) { this(kind, base, Value.ILLEGAL, Scale.Times1, displacement); } - public AMD64AddressValue(Kind kind, AllocatableValue base, AllocatableValue index, Scale scale, int displacement) { + public AMD64AddressValue(PlatformKind kind, AllocatableValue base, AllocatableValue index, Scale scale, int displacement) { super(kind); this.base = base; this.index = index; @@ -91,13 +91,13 @@ public boolean equals(Object obj) { if (obj instanceof AMD64AddressValue) { AMD64AddressValue addr = (AMD64AddressValue) obj; - return getKind() == addr.getKind() && displacement == addr.displacement && base.equals(addr.base) && scale == addr.scale && index.equals(addr.index); + return getPlatformKind() == addr.getPlatformKind() && displacement == addr.displacement && base.equals(addr.base) && scale == addr.scale && index.equals(addr.index); } return false; } @Override public int hashCode() { - return base.hashCode() ^ index.hashCode() ^ (displacement << 4) ^ (scale.value << 8) ^ (getKind().ordinal() << 12); + return base.hashCode() ^ index.hashCode() ^ (displacement << 4) ^ (scale.value << 8) ^ getPlatformKind().hashCode(); } } diff -r 20dc10bb82d1 -r 149fe42411df 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 Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java Tue Apr 30 12:00:13 2013 +0200 @@ -255,8 +255,8 @@ public DivRemOp(AMD64Arithmetic opcode, AllocatableValue x, AllocatableValue y, LIRFrameState state) { this.opcode = opcode; - this.divResult = AMD64.rax.asValue(x.getKind()); - this.remResult = AMD64.rdx.asValue(x.getKind()); + this.divResult = AMD64.rax.asValue(x.getPlatformKind()); + this.remResult = AMD64.rdx.asValue(x.getPlatformKind()); this.x = x; this.y = y; this.state = state; diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXAddressValue.java --- a/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXAddressValue.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXAddressValue.java Tue Apr 30 12:00:13 2013 +0200 @@ -48,7 +48,7 @@ * @param kind the kind of the value being addressed * @param base the base register */ - public PTXAddressValue(Kind kind, AllocatableValue base) { + public PTXAddressValue(PlatformKind kind, AllocatableValue base) { this(kind, base, 0); } @@ -60,7 +60,7 @@ * @param base the base register * @param displacement the displacement */ - public PTXAddressValue(Kind kind, AllocatableValue base, long displacement) { + public PTXAddressValue(PlatformKind kind, AllocatableValue base, long displacement) { super(kind); this.base = base; this.displacement = displacement; @@ -95,13 +95,13 @@ public boolean equals(Object obj) { if (obj instanceof PTXAddressValue) { PTXAddressValue addr = (PTXAddressValue) obj; - return getKind() == addr.getKind() && displacement == addr.displacement && base.equals(addr.base); + return getPlatformKind() == addr.getPlatformKind() && displacement == addr.displacement && base.equals(addr.base); } return false; } @Override public int hashCode() { - return base.hashCode() ^ ((int) displacement << 4) ^ (getKind().ordinal() << 12); + return base.hashCode() ^ ((int) displacement << 4) ^ getPlatformKind().hashCode(); } } diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValue.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValue.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValue.java Tue Apr 30 12:00:13 2013 +0200 @@ -45,7 +45,7 @@ private final CompositeValueClass valueClass; - public CompositeValue(Kind kind) { + public CompositeValue(PlatformKind kind) { super(kind); valueClass = CompositeValueClass.get(getClass()); } diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.lir/src/com/oracle/graal/lir/FrameMap.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/FrameMap.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/FrameMap.java Tue Apr 30 12:00:13 2013 +0200 @@ -266,7 +266,7 @@ hasOutgoingStackArguments = hasOutgoingStackArguments || argsSize > 0; } - private StackSlot getSlot(Kind kind, int additionalOffset) { + private StackSlot getSlot(PlatformKind kind, int additionalOffset) { return StackSlot.get(kind, -spillSize + additionalOffset, true); } @@ -277,12 +277,12 @@ * @param kind The kind of the spill slot to be reserved. * @return A spill slot denoting the reserved memory area. */ - public StackSlot allocateSpillSlot(Kind kind) { + public StackSlot allocateSpillSlot(PlatformKind kind) { assert frameSize == -1 : "frame size must not yet be fixed"; if (freedSlots != null) { for (Iterator iter = freedSlots.iterator(); iter.hasNext();) { StackSlot s = iter.next(); - if (s.getKind() == kind) { + if (s.getPlatformKind() == kind) { iter.remove(); if (freedSlots.isEmpty()) { freedSlots = null; @@ -299,8 +299,8 @@ private Set freedSlots; /** - * Frees a spill slot that was obtained via {@link #allocateSpillSlot(Kind)} such that it can be - * reused for the next allocation request for the same kind of slot. + * Frees a spill slot that was obtained via {@link #allocateSpillSlot(PlatformKind)} such that + * it can be reused for the next allocation request for the same kind of slot. */ public void freeSpillSlot(StackSlot slot) { if (freedSlots == null) { diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.lir/src/com/oracle/graal/lir/Variable.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/Variable.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/Variable.java Tue Apr 30 12:00:13 2013 +0200 @@ -49,9 +49,8 @@ * @param kind * @param index */ - public Variable(Kind kind, int index, Register.RegisterFlag flag) { + public Variable(PlatformKind kind, int index, Register.RegisterFlag flag) { super(kind); - assert kind == kind.getStackKind() : "Variables can be only created for stack kinds"; assert index >= 0; this.index = index; this.flag = flag; diff -r 20dc10bb82d1 -r 149fe42411df graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java Tue Apr 30 00:34:07 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java Tue Apr 30 12:00:13 2013 +0200 @@ -49,7 +49,7 @@ Value operand(ValueNode object); - AllocatableValue newVariable(Kind kind); + AllocatableValue newVariable(PlatformKind kind); Value setResult(ValueNode x, Value operand);