# HG changeset patch # User Doug Simon # Date 1395752212 -3600 # Node ID 209cf6959421b4854bdea52746c9cd2ff4a09c8c # Parent 8db7309936427f80605680188584fcdb9f395944 added support for installing raw data with code diff -r 8db730993642 -r 209cf6959421 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RawDataValue.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RawDataValue.java Tue Mar 25 13:56:52 2014 +0100 @@ -0,0 +1,76 @@ +/* + * 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 + * 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.code; + +import java.util.*; + +import com.oracle.graal.api.meta.*; + +/** + * Represents some raw data. + */ +public final class RawDataValue extends Value { + + private static final long serialVersionUID = 7947228462156566360L; + + private final byte[] data; + + public RawDataValue(PlatformKind kind, byte[] data) { + super(kind); + this.data = data; + } + + public byte[] getData() { + return data; + } + + @Override + public String toString() { + Formatter ret = new Formatter(); + ret.format("data["); + boolean first = true; + for (byte b : data) { + ret.format(first ? "%02X" : " %02X", b); + first = false; + } + return ret.format("]").toString(); + } + + @Override + public int hashCode() { + return Arrays.hashCode(data); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj instanceof RawDataValue) { + RawDataValue other = (RawDataValue) obj; + return Arrays.equals(data, other.data); + } else { + return false; + } + } +} diff -r 8db730993642 -r 209cf6959421 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/ValueUtil.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/ValueUtil.java Tue Mar 25 13:55:55 2014 +0100 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/ValueUtil.java Tue Mar 25 13:56:52 2014 +0100 @@ -90,6 +90,16 @@ return ((RegisterValue) value).getRegister(); } + public static boolean isRawData(Value value) { + assert value != null; + return value instanceof RawDataValue; + } + + public static RawDataValue asRawData(Value value) { + assert value != null; + return (RawDataValue) value; + } + public static Register asIntReg(Value value) { if (value.getKind() != Kind.Int) { throw new InternalError("needed Int got: " + value.getKind()); diff -r 8db730993642 -r 209cf6959421 graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java Tue Mar 25 13:55:55 2014 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java Tue Mar 25 13:56:52 2014 +0100 @@ -29,6 +29,7 @@ import com.oracle.graal.amd64.*; import com.oracle.graal.api.code.*; +import com.oracle.graal.api.code.CompilationResult.RawData; import com.oracle.graal.api.meta.*; import com.oracle.graal.asm.*; import com.oracle.graal.asm.amd64.*; @@ -376,6 +377,13 @@ } else { throw GraalInternalError.shouldNotReachHere(); } + } else if (isRawData(input)) { + if (isRegister(result)) { + RawData rawData = new RawData(asRawData(input).getData(), 16); + masm.leaq(asRegister(result), (AMD64Address) crb.recordDataReferenceInCode(rawData)); + } else { + throw GraalInternalError.shouldNotReachHere(); + } } else { throw GraalInternalError.shouldNotReachHere(); } diff -r 8db730993642 -r 209cf6959421 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java --- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Tue Mar 25 13:55:55 2014 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Tue Mar 25 13:56:52 2014 +0100 @@ -23,13 +23,33 @@ package com.oracle.graal.lir.sparc; import static com.oracle.graal.api.code.ValueUtil.*; -import static com.oracle.graal.asm.sparc.SPARCMacroAssembler.*; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; import static com.oracle.graal.sparc.SPARC.*; +import com.oracle.graal.api.code.CompilationResult.RawData; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.asm.sparc.*; +import com.oracle.graal.asm.sparc.SPARCAssembler.Add; +import com.oracle.graal.asm.sparc.SPARCAssembler.Lddf; +import com.oracle.graal.asm.sparc.SPARCAssembler.Ldf; +import com.oracle.graal.asm.sparc.SPARCAssembler.Ldsb; +import com.oracle.graal.asm.sparc.SPARCAssembler.Ldsh; +import com.oracle.graal.asm.sparc.SPARCAssembler.Ldsw; +import com.oracle.graal.asm.sparc.SPARCAssembler.Lduh; +import com.oracle.graal.asm.sparc.SPARCAssembler.Ldx; +import com.oracle.graal.asm.sparc.SPARCAssembler.Membar; +import com.oracle.graal.asm.sparc.SPARCAssembler.Rdpc; +import com.oracle.graal.asm.sparc.SPARCAssembler.Stb; +import com.oracle.graal.asm.sparc.SPARCAssembler.Sth; +import com.oracle.graal.asm.sparc.SPARCAssembler.Stw; +import com.oracle.graal.asm.sparc.SPARCAssembler.Stx; +import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Cas; +import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Casx; +import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Clr; +import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Mov; +import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Setuw; +import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Setx; import com.oracle.graal.graph.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.ImplicitNullCheck; @@ -370,6 +390,13 @@ } else { throw GraalInternalError.shouldNotReachHere(); } + } else if (isRawData(input)) { + if (isRegister(result)) { + RawData rawData = new RawData(asRawData(input).getData(), 16); + throw GraalInternalError.unimplemented("Emitting raw data: " + rawData); + } else { + throw GraalInternalError.shouldNotReachHere(); + } } else { throw GraalInternalError.shouldNotReachHere(); }