# HG changeset patch # User Roland Schatz # Date 1402931931 -7200 # Node ID 4dd2cedc7f57641764fe3d153d65a0b982b9bd88 # Parent 26d95e1247d045b38abcb4c3fd3eae60724b8e2b Revert using LIRKind.reference(Kind.Int) instead of hotspot specific NarrowOop kind (part of c0b8d395368b). diff -r 26d95e1247d0 -r 4dd2cedc7f57 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 Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Mon Jun 16 17:18:51 2014 +0200 @@ -235,7 +235,7 @@ @Override public void emitCompareBranch(PlatformKind cmpKind, Value left, Value right, Condition cond, boolean unorderedIsTrue, LabelRef trueLabel, LabelRef falseLabel, double trueLabelProbability) { - boolean mirrored = emitCompare((Kind) cmpKind, left, right); + boolean mirrored = emitCompare(cmpKind, left, right); Condition finalCondition = mirrored ? cond.mirror() : cond; if (cmpKind == Kind.Float || cmpKind == Kind.Double) { append(new FloatBranchOp(finalCondition, unorderedIsTrue, trueLabel, falseLabel, trueLabelProbability)); @@ -268,7 +268,7 @@ @Override public Variable emitConditionalMove(PlatformKind cmpKind, Value left, Value right, Condition cond, boolean unorderedIsTrue, Value trueValue, Value falseValue) { - boolean mirrored = emitCompare((Kind) cmpKind, left, right); + boolean mirrored = emitCompare(cmpKind, left, right); Condition finalCondition = mirrored ? cond.mirror() : cond; Variable result = newVariable(trueValue.getLIRKind()); @@ -297,8 +297,8 @@ } } - protected void emitCompareOp(Kind cmpKind, Variable left, Value right) { - switch (cmpKind) { + protected void emitCompareOp(PlatformKind cmpKind, Variable left, Value right) { + switch ((Kind) cmpKind) { case Byte: case Boolean: append(new CompareOp(BCMP, left, right)); @@ -413,7 +413,7 @@ * @param b the right operand of the comparison * @return true if the left and right operands were switched, false otherwise */ - private boolean emitCompare(Kind cmpKind, Value a, Value b) { + private boolean emitCompare(PlatformKind cmpKind, Value a, Value b) { Variable left; Value right; boolean mirrored; diff -r 26d95e1247d0 -r 4dd2cedc7f57 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Mon Jun 16 17:18:51 2014 +0200 @@ -92,7 +92,7 @@ final int stackFrameAlignment = 16; final int implicitNullCheckLimit = 4096; final boolean inlineObjects = true; - return new HotSpotTargetDescription(createArchitecture(config), true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects); + return new HotSpotTargetDescription(createArchitecture(config), true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects, Kind.Int); } @Override @@ -233,15 +233,15 @@ } else { /* * System V Application Binary Interface, AMD64 Architecture Processor Supplement - * + * * Draft Version 0.96 - * + * * http://www.uclibc.org/docs/psABI-x86_64.pdf - * + * * 3.2.1 - * + * * ... - * + * * This subsection discusses usage of each register. Registers %rbp, %rbx and %r12 * through %r15 "belong" to the calling function and the called function is required to * preserve their values. In other words, a called function must preserve these diff -r 26d95e1247d0 -r 4dd2cedc7f57 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCompare.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCompare.java Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCompare.java Mon Jun 16 17:18:51 2014 +0200 @@ -30,6 +30,7 @@ import com.oracle.graal.compiler.common.*; import com.oracle.graal.hotspot.data.*; import com.oracle.graal.hotspot.meta.*; +import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.amd64.*; import com.oracle.graal.lir.amd64.AMD64Move.MemOp; @@ -37,6 +38,33 @@ public class AMD64HotSpotCompare { + @Opcode("NCMP") + public static class HotSpotCompareNarrowOp extends AMD64LIRInstruction { + + @Use({REG}) protected AllocatableValue x; + @Use({REG, STACK}) protected AllocatableValue y; + + public HotSpotCompareNarrowOp(AllocatableValue x, AllocatableValue y) { + this.x = x; + this.y = y; + } + + @Override + public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { + if (isRegister(y)) { + masm.cmpl(asRegister(x), asRegister(y)); + } else { + assert isStackSlot(y); + masm.cmpl(asRegister(x), (AMD64Address) crb.asAddress(y)); + } + } + + @Override + protected void verify() { + assert x.getPlatformKind() == NarrowOopStamp.NarrowOop && y.getPlatformKind() == NarrowOopStamp.NarrowOop; + } + } + @Opcode("CMP") public static class HotSpotCompareConstantOp extends AMD64LIRInstruction { diff -r 26d95e1247d0 -r 4dd2cedc7f57 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Mon Jun 16 17:18:51 2014 +0200 @@ -39,6 +39,7 @@ import com.oracle.graal.hotspot.HotSpotVMConfig.CompressEncoding; import com.oracle.graal.hotspot.amd64.AMD64HotSpotMove.HotSpotStoreConstantOp; import com.oracle.graal.hotspot.meta.*; +import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.hotspot.stubs.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.NoOp; @@ -49,6 +50,7 @@ import com.oracle.graal.lir.amd64.AMD64Move.LeaDataOp; import com.oracle.graal.lir.amd64.AMD64Move.LoadOp; import com.oracle.graal.lir.amd64.AMD64Move.MoveFromRegOp; +import com.oracle.graal.lir.amd64.AMD64Move.MoveToRegOp; import com.oracle.graal.lir.amd64.AMD64Move.StoreOp; import com.oracle.graal.lir.gen.*; @@ -434,6 +436,14 @@ } } + private static Kind getMemoryKind(LIRKind kind) { + if (kind.getPlatformKind() == NarrowOopStamp.NarrowOop) { + return Kind.Int; + } else { + return (Kind) kind.getPlatformKind(); + } + } + private static LIRKind toStackKind(LIRKind kind) { if (kind.getPlatformKind() instanceof Kind) { Kind stackKind = ((Kind) kind.getPlatformKind()).getStackKind(); @@ -455,7 +465,7 @@ public Variable emitLoad(LIRKind kind, Value address, LIRFrameState state) { AMD64AddressValue loadAddress = asAddressValue(address); Variable result = newVariable(toStackKind(kind)); - append(new LoadOp((Kind) kind.getPlatformKind(), result, loadAddress, state)); + append(new LoadOp(getMemoryKind(kind), result, loadAddress, state)); return result; } @@ -465,12 +475,12 @@ if (isConstant(inputVal)) { Constant c = asConstant(inputVal); if (canStoreConstant(c)) { - append(new HotSpotStoreConstantOp((Kind) kind.getPlatformKind(), storeAddress, c, state)); + append(new HotSpotStoreConstantOp(getMemoryKind(kind), storeAddress, c, state)); return; } } Variable input = load(inputVal); - append(new StoreOp((Kind) kind.getPlatformKind(), storeAddress, input, state)); + append(new StoreOp(getMemoryKind(kind), storeAddress, input, state)); } @Override @@ -479,7 +489,7 @@ assert inputKind.getPlatformKind() == Kind.Long || inputKind.getPlatformKind() == Kind.Object; if (inputKind.isReference(0)) { // oop - Variable result = newVariable(LIRKind.reference(Kind.Int)); + Variable result = newVariable(LIRKind.reference(NarrowOopStamp.NarrowOop)); append(new AMD64HotSpotMove.CompressPointer(result, asAllocatable(pointer), getProviders().getRegisters().getHeapBaseRegister().asValue(), encoding, nonNull)); return result; } else { @@ -497,7 +507,7 @@ @Override public Value emitUncompress(Value pointer, CompressEncoding encoding, boolean nonNull) { LIRKind inputKind = pointer.getLIRKind(); - assert inputKind.getPlatformKind() == Kind.Int; + assert inputKind.getPlatformKind() == Kind.Int || inputKind.getPlatformKind() == NarrowOopStamp.NarrowOop; if (inputKind.isReference(0)) { // oop Variable result = newVariable(LIRKind.reference(Kind.Object)); @@ -519,6 +529,12 @@ protected AMD64LIRInstruction createMove(AllocatableValue dst, Value src) { if (src instanceof Constant) { return new AMD64HotSpotMove.HotSpotLoadConstantOp(dst, (Constant) src); + } else if (dst.getPlatformKind() == NarrowOopStamp.NarrowOop) { + if (isRegister(src) || isStackSlot(dst)) { + return new MoveFromRegOp(Kind.Int, dst, src); + } else { + return new MoveToRegOp(Kind.Int, dst, src); + } } else { return super.createMove(dst, src); } @@ -527,7 +543,7 @@ public Value emitCompareAndSwap(Value address, Value expectedValue, Value newValue, Value trueValue, Value falseValue) { LIRKind kind = newValue.getLIRKind(); assert kind.equals(expectedValue.getLIRKind()); - Kind memKind = (Kind) kind.getPlatformKind(); + Kind memKind = getMemoryKind(kind); AMD64AddressValue addressValue = asAddressValue(address); RegisterValue raxRes = AMD64.rax.asValue(kind); @@ -542,7 +558,7 @@ public Value emitAtomicReadAndAdd(Value address, Value delta) { LIRKind kind = delta.getLIRKind(); - Kind memKind = (Kind) kind.getPlatformKind(); + Kind memKind = getMemoryKind(kind); Variable result = newVariable(kind); AMD64AddressValue addressValue = asAddressValue(address); append(new AMD64Move.AtomicReadAndAddOp(memKind, result, addressValue, asAllocatable(delta))); @@ -551,7 +567,7 @@ public Value emitAtomicReadAndWrite(Value address, Value newValue) { LIRKind kind = newValue.getLIRKind(); - Kind memKind = (Kind) kind.getPlatformKind(); + Kind memKind = getMemoryKind(kind); Variable result = newVariable(kind); AMD64AddressValue addressValue = asAddressValue(address); append(new AMD64Move.AtomicReadAndWriteOp(memKind, result, addressValue, asAllocatable(newValue))); @@ -564,9 +580,11 @@ } @Override - protected void emitCompareOp(Kind cmpKind, Variable left, Value right) { + protected void emitCompareOp(PlatformKind cmpKind, Variable left, Value right) { if (right instanceof HotSpotConstant) { append(new AMD64HotSpotCompare.HotSpotCompareConstantOp(left, (Constant) right)); + } else if (cmpKind == NarrowOopStamp.NarrowOop) { + append(new AMD64HotSpotCompare.HotSpotCompareNarrowOp(left, asAllocatable(right))); } else { super.emitCompareOp(cmpKind, left, right); } diff -r 26d95e1247d0 -r 4dd2cedc7f57 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Mon Jun 16 17:18:51 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, 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 @@ -33,6 +33,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.hotspot.*; +import com.oracle.graal.hotspot.nodes.type.*; public class AMD64HotSpotRegisterConfig implements RegisterConfig { @@ -69,9 +70,16 @@ return categorized.get(kind); } + PlatformKind primitiveKind; + if (kind == NarrowOopStamp.NarrowOop) { + primitiveKind = Kind.Int; + } else { + primitiveKind = kind; + } + ArrayList list = new ArrayList<>(); for (Register reg : getAllocatableRegisters()) { - if (architecture.canStoreValue(reg.getRegisterCategory(), kind)) { + if (architecture.canStoreValue(reg.getRegisterCategory(), primitiveKind)) { list.add(reg); } } diff -r 26d95e1247d0 -r 4dd2cedc7f57 graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackendFactory.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackendFactory.java Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackendFactory.java Mon Jun 16 17:18:51 2014 +0200 @@ -72,7 +72,7 @@ final int stackFrameAlignment = 8; final int implicitNullCheckLimit = 0; final boolean inlineObjects = true; - return new HotSpotTargetDescription(new HSAIL(), true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects); + return new HotSpotTargetDescription(new HSAIL(), true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects, Kind.Int); } public String getArchitecture() { diff -r 26d95e1247d0 -r 4dd2cedc7f57 graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java Mon Jun 16 17:18:51 2014 +0200 @@ -33,6 +33,7 @@ import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.HotSpotVMConfig.CompressEncoding; import com.oracle.graal.hotspot.meta.*; +import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.SaveRegistersOp; import com.oracle.graal.lir.gen.*; @@ -45,6 +46,7 @@ import com.oracle.graal.lir.hsail.HSAILMove.CompareAndSwapOp; import com.oracle.graal.lir.hsail.HSAILMove.LoadAcquireOp; import com.oracle.graal.lir.hsail.HSAILMove.LoadOp; +import com.oracle.graal.lir.hsail.HSAILMove.MoveFromRegOp; import com.oracle.graal.lir.hsail.HSAILMove.MoveToRegOp; import com.oracle.graal.lir.hsail.HSAILMove.StoreConstantOp; import com.oracle.graal.lir.hsail.HSAILMove.StoreOp; @@ -107,18 +109,26 @@ } } + private static Kind getMemoryKind(LIRKind kind) { + if (kind.getPlatformKind() == NarrowOopStamp.NarrowOop) { + return Kind.Int; + } else { + return (Kind) kind.getPlatformKind(); + } + } + @Override public Variable emitLoad(LIRKind kind, Value address, LIRFrameState state) { HSAILAddressValue loadAddress = asAddressValue(address); Variable result = newVariable(kind); - append(new LoadOp((Kind) kind.getPlatformKind(), result, loadAddress, state)); + append(new LoadOp(getMemoryKind(kind), result, loadAddress, state)); return result; } public Variable emitLoadAcquire(LIRKind kind, Value address, LIRFrameState state) { HSAILAddressValue loadAddress = asAddressValue(address); Variable result = newVariable(kind); - append(new LoadAcquireOp((Kind) kind.getPlatformKind(), result, loadAddress, state)); + append(new LoadAcquireOp(getMemoryKind(kind), result, loadAddress, state)); return result; } @@ -131,32 +141,32 @@ c = Constant.INT_0; } if (canStoreConstant(c)) { - append(new StoreConstantOp((Kind) kind.getPlatformKind(), storeAddress, c, state)); + append(new StoreConstantOp(getMemoryKind(kind), storeAddress, c, state)); return; } } Variable input = load(inputVal); - append(new StoreOp((Kind) kind.getPlatformKind(), storeAddress, input, state)); + append(new StoreOp(getMemoryKind(kind), storeAddress, input, state)); } public void emitStoreRelease(LIRKind kind, Value address, Value inputVal, LIRFrameState state) { HSAILAddressValue storeAddress = asAddressValue(address); // TODO: handle Constants here Variable input = load(inputVal); - append(new StoreReleaseOp((Kind) kind.getPlatformKind(), storeAddress, input, state)); + append(new StoreReleaseOp(getMemoryKind(kind), storeAddress, input, state)); } public Value emitCompareAndSwap(Value address, Value expectedValue, Value newValue, Value trueValue, Value falseValue) { LIRKind kind = newValue.getLIRKind(); assert kind == expectedValue.getLIRKind(); - Kind memKind = (Kind) kind.getPlatformKind(); + Kind memKind = getMemoryKind(kind); HSAILAddressValue addressValue = asAddressValue(address); Variable expected = emitMove(expectedValue); Variable casResult = newVariable(kind); append(new CompareAndSwapOp(memKind, casResult, addressValue, expected, asAllocatable(newValue))); - assert trueValue.getLIRKind() == falseValue.getLIRKind(); + assert trueValue.getLIRKind().equals(falseValue.getLIRKind()); Variable nodeResult = newVariable(trueValue.getLIRKind()); append(new CondMoveOp(HSAILLIRGenerator.mapKindToCompareOp(memKind), casResult, expected, nodeResult, Condition.EQ, trueValue, falseValue)); return nodeResult; @@ -165,7 +175,7 @@ @Override public Value emitAtomicReadAndAdd(Value address, Value delta) { LIRKind kind = delta.getLIRKind(); - Kind memKind = (Kind) kind.getPlatformKind(); + Kind memKind = getMemoryKind(kind); Variable result = newVariable(kind); HSAILAddressValue addressValue = asAddressValue(address); append(new HSAILMove.AtomicReadAndAddOp(memKind, result, addressValue, asAllocatable(delta))); @@ -175,7 +185,7 @@ @Override public Value emitAtomicReadAndWrite(Value address, Value newValue) { LIRKind kind = newValue.getLIRKind(); - Kind memKind = (Kind) kind.getPlatformKind(); + Kind memKind = getMemoryKind(kind); Variable result = newVariable(kind); HSAILAddressValue addressValue = asAddressValue(address); append(new HSAILMove.AtomicReadAndWriteOp(memKind, result, addressValue, asAllocatable(newValue))); @@ -241,6 +251,12 @@ append(new MoveToRegOp(Kind.Object, uncompressed, src)); CompressEncoding oopEncoding = config.getOopEncoding(); return new HSAILMove.CompressPointer(dst, newVariable(LIRKind.reference(Kind.Object)), uncompressed, oopEncoding.base, oopEncoding.shift, oopEncoding.alignment, true); + } else if (dst.getPlatformKind() == NarrowOopStamp.NarrowOop) { + if (isRegister(src) || isStackSlot(dst)) { + return new MoveFromRegOp(Kind.Int, dst, src); + } else { + return new MoveToRegOp(Kind.Int, dst, src); + } } else { return super.createMove(dst, src); } @@ -281,7 +297,7 @@ @Override public Value emitCompress(Value pointer, CompressEncoding encoding, boolean nonNull) { - Variable result = newVariable(LIRKind.reference(Kind.Int)); + Variable result = newVariable(LIRKind.reference(NarrowOopStamp.NarrowOop)); append(new HSAILMove.CompressPointer(result, newVariable(pointer.getLIRKind()), asAllocatable(pointer), encoding.base, encoding.shift, encoding.alignment, nonNull)); return result; } diff -r 26d95e1247d0 -r 4dd2cedc7f57 graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotRegisterConfig.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotRegisterConfig.java Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotRegisterConfig.java Mon Jun 16 17:18:51 2014 +0200 @@ -29,6 +29,7 @@ import com.oracle.graal.api.code.CallingConvention.Type; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.hsail.*; /** @@ -144,7 +145,14 @@ @Override public Register[] getAllocatableRegisters(PlatformKind kind) { - switch ((Kind) kind) { + Kind primitiveKind; + if (kind == NarrowOopStamp.NarrowOop) { + primitiveKind = Kind.Int; + } else { + primitiveKind = (Kind) kind; + } + + switch (primitiveKind) { case Int: case Short: case Byte: diff -r 26d95e1247d0 -r 4dd2cedc7f57 graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackendFactory.java --- a/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackendFactory.java Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackendFactory.java Mon Jun 16 17:18:51 2014 +0200 @@ -93,7 +93,7 @@ final int stackFrameAlignment = 1; final int implicitNullCheckLimit = 0; final boolean inlineObjects = true; - return new HotSpotTargetDescription(createArchitecture(), true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects); + return new HotSpotTargetDescription(createArchitecture(), true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects, Kind.Int); } public String getArchitecture() { diff -r 26d95e1247d0 -r 4dd2cedc7f57 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java Mon Jun 16 17:18:51 2014 +0200 @@ -42,7 +42,7 @@ final int stackFrameAlignment = 16; final int implicitNullCheckLimit = 4096; final boolean inlineObjects = true; - return new HotSpotTargetDescription(createArchitecture(), true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects); + return new HotSpotTargetDescription(createArchitecture(), true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects, Kind.Int); } public HotSpotBackend createBackend(HotSpotGraalRuntime runtime, HotSpotBackend host) { diff -r 26d95e1247d0 -r 4dd2cedc7f57 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotTargetDescription.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotTargetDescription.java Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotTargetDescription.java Mon Jun 16 17:18:51 2014 +0200 @@ -23,11 +23,25 @@ package com.oracle.graal.hotspot; import com.oracle.graal.api.code.*; +import com.oracle.graal.api.meta.*; +import com.oracle.graal.hotspot.nodes.type.*; public class HotSpotTargetDescription extends TargetDescription { - public HotSpotTargetDescription(Architecture arch, boolean isMP, int stackAlignment, int implicitNullCheckLimit, boolean inlineObjects) { + private final PlatformKind rawNarrowOopKind; + + public HotSpotTargetDescription(Architecture arch, boolean isMP, int stackAlignment, int implicitNullCheckLimit, boolean inlineObjects, PlatformKind rawNarrowOopKind) { super(arch, isMP, stackAlignment, implicitNullCheckLimit, inlineObjects); + this.rawNarrowOopKind = rawNarrowOopKind; + } + + @Override + public int getSizeInBytes(PlatformKind kind) { + if (kind == NarrowOopStamp.NarrowOop) { + return super.getSizeInBytes(rawNarrowOopKind); + } else { + return super.getSizeInBytes(kind); + } } @Override diff -r 26d95e1247d0 -r 4dd2cedc7f57 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCompressedNullConstant.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCompressedNullConstant.java Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCompressedNullConstant.java Mon Jun 16 17:18:51 2014 +0200 @@ -23,6 +23,7 @@ package com.oracle.graal.hotspot.meta; import com.oracle.graal.api.meta.*; +import com.oracle.graal.hotspot.nodes.type.*; /** * The compressed representation of the {@link Constant#NULL_OBJECT null constant}. @@ -34,7 +35,7 @@ public static final Constant COMPRESSED_NULL = new HotSpotCompressedNullConstant(); private HotSpotCompressedNullConstant() { - super(LIRKind.reference(Kind.Int)); + super(LIRKind.reference(NarrowOopStamp.NarrowOop)); } @Override diff -r 26d95e1247d0 -r 4dd2cedc7f57 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java Mon Jun 16 17:18:51 2014 +0200 @@ -23,6 +23,7 @@ package com.oracle.graal.hotspot.meta; import com.oracle.graal.api.meta.*; +import com.oracle.graal.hotspot.nodes.type.*; /** * Represents a constant non-{@code null} object reference, within the compiler and across the @@ -78,7 +79,7 @@ private final boolean compressed; private HotSpotObjectConstant(Object object, boolean compressed) { - super(LIRKind.reference(compressed ? Kind.Int : Kind.Object)); + super(LIRKind.reference(compressed ? NarrowOopStamp.NarrowOop : Kind.Object)); this.object = object; this.compressed = compressed; assert object != null; diff -r 26d95e1247d0 -r 4dd2cedc7f57 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/NarrowOopStamp.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/NarrowOopStamp.java Fri Jun 13 15:19:12 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/NarrowOopStamp.java Mon Jun 16 17:18:51 2014 +0200 @@ -72,7 +72,7 @@ @Override public LIRKind getLIRKind(LIRKindTool tool) { - return LIRKind.reference(Kind.Int); + return LIRKind.reference(NarrowOop); } @Override