# HG changeset patch # User Roland Schatz # Date 1362057324 -3600 # Node ID 0c76156918129f291026b1d8cb0e50ca9344e2da # Parent 38a597987357c1a0d8971db91eedcdf2ebdc39b4 Disallow directly storing constants in PTX. diff -r 38a597987357 -r 0c7615691812 graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java --- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Thu Feb 28 14:15:24 2013 +0100 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Thu Feb 28 14:15:24 2013 +0100 @@ -156,7 +156,7 @@ @Override public void emitStore(Kind kind, Value base, int displacement, Value index, int scale, Value inputVal, boolean canTrap) { PTXAddress storeAddress = prepareAddress(kind, base, displacement, index, scale); - Value input = load(inputVal); + Variable input = load(inputVal); append(new StoreOp(storeAddress, input, canTrap ? state() : null)); } diff -r 38a597987357 -r 0c7615691812 graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXMove.java --- a/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXMove.java Thu Feb 28 14:15:24 2013 +0100 +++ b/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXMove.java Thu Feb 28 14:15:24 2013 +0100 @@ -132,14 +132,25 @@ @Override public void emitCode(TargetMethodAssembler tasm, PTXAssembler masm) { - load(tasm, masm, result, address, state); + Register a = asRegister(address.getBase()); + long immOff = address.getDisplacement(); + switch (address.getKind()) { + case Int: + masm.ld_global_s32(asRegister(result), a, immOff); + break; + case Object: + masm.ld_global_u32(asRegister(result), a, immOff); + break; + default: + throw GraalInternalError.shouldNotReachHere(); + } } } public static class StoreOp extends PTXLIRInstruction { @Use({ADDR}) protected PTXAddress address; - @Use({REG, CONST}) protected Value input; + @Use({REG}) protected Value input; @State protected LIRFrameState state; public StoreOp(PTXAddress address, Value input, LIRFrameState state) { @@ -150,7 +161,17 @@ @Override public void emitCode(TargetMethodAssembler tasm, PTXAssembler masm) { - store(tasm, masm, address, input, state); + Register a = asRegister(address.getBase()); + long immOff = address.getDisplacement(); + + assert isRegister(input); + switch (address.getKind()) { + case Int: + masm.st_global_s32(a, immOff, asRegister(input)); + break; + default: + throw GraalInternalError.shouldNotReachHere(); + } } } @@ -255,46 +276,6 @@ } @SuppressWarnings("unused") - public static void load(TargetMethodAssembler tasm, PTXAssembler masm, Value result, PTXAddress loadAddr, LIRFrameState info) { - Register a = asRegister(loadAddr.getBase()); - long immOff = loadAddr.getDisplacement(); - switch (loadAddr.getKind()) { - case Int: - masm.ld_global_s32(asRegister(result), a, immOff); - break; - case Object: - masm.ld_global_u32(asRegister(result), a, immOff); - break; - default: - throw GraalInternalError.shouldNotReachHere(); - } - } - - @SuppressWarnings("unused") - public static void store(TargetMethodAssembler tasm, PTXAssembler masm, PTXAddress storeAddr, Value input, LIRFrameState info) { - Register a = asRegister(storeAddr.getBase()); - long immOff = storeAddr.getDisplacement(); - if (isRegister(input)) { - switch (storeAddr.getKind()) { - case Int: - masm.st_global_s32(a, immOff, asRegister(input)); - break; - default: - throw GraalInternalError.shouldNotReachHere(); - } - } else if (isConstant(input)) { - Constant c = (Constant) input; - switch (storeAddr.getKind()) { - default: - throw GraalInternalError.shouldNotReachHere(); - } - - } else { - throw GraalInternalError.shouldNotReachHere(); - } - } - - @SuppressWarnings("unused") protected static void compareAndSwap(TargetMethodAssembler tasm, PTXAssembler masm, Value result, PTXAddress address, Value cmpValue, Value newValue) { throw new InternalError("NYI"); }