use of org.graalvm.compiler.lir.amd64.AMD64AddressValue in project graal by oracle.
the class AMD64ArithmeticLIRGenerator method emitBinaryMemory.
public Value emitBinaryMemory(AMD64RMOp op, OperandSize size, AllocatableValue a, AMD64AddressValue location, LIRFrameState state) {
Variable result = getLIRGen().newVariable(LIRKind.combine(a));
getLIRGen().append(new AMD64Binary.MemoryTwoOp(op, size, result, a, location, state));
return result;
}
use of org.graalvm.compiler.lir.amd64.AMD64AddressValue in project graal by oracle.
the class AMD64ArithmeticLIRGenerator method emitConvertMemoryOp.
protected Value emitConvertMemoryOp(PlatformKind kind, AMD64RMOp op, OperandSize size, AMD64AddressValue address, LIRFrameState state) {
Variable result = getLIRGen().newVariable(LIRKind.value(kind));
getLIRGen().append(new AMD64Unary.MemoryOp(op, size, result, address, state));
return result;
}
use of org.graalvm.compiler.lir.amd64.AMD64AddressValue in project graal by oracle.
the class AMD64LIRGenerator method emitCompareRegMemoryOp.
private boolean emitCompareRegMemoryOp(OperandSize size, AllocatableValue a, AMD64AddressValue b, LIRFrameState state) {
AMD64RMOp op = CMP.getRMOpcode(size);
append(new AMD64BinaryConsumer.MemoryRMOp(op, size, a, b, state));
return false;
}
use of org.graalvm.compiler.lir.amd64.AMD64AddressValue in project graal by oracle.
the class AMD64LIRGenerator method emitCompareAndSwapBranch.
public void emitCompareAndSwapBranch(ValueKind<?> kind, AMD64AddressValue address, Value expectedValue, Value newValue, Condition condition, LabelRef trueLabel, LabelRef falseLabel, double trueLabelProbability) {
assert kind.equals(expectedValue.getValueKind());
assert kind.equals(newValue.getValueKind());
assert condition == Condition.EQ || condition == Condition.NE;
AMD64Kind memKind = (AMD64Kind) kind.getPlatformKind();
RegisterValue raxValue = AMD64.rax.asValue(kind);
emitMove(raxValue, expectedValue);
append(new CompareAndSwapOp(memKind, raxValue, address, raxValue, asAllocatable(newValue)));
append(new BranchOp(condition, trueLabel, falseLabel, trueLabelProbability));
}
use of org.graalvm.compiler.lir.amd64.AMD64AddressValue in project graal by oracle.
the class AMD64LIRGenerator method emitValueCompareAndSwap.
@Override
public Value emitValueCompareAndSwap(Value address, Value expectedValue, Value newValue) {
ValueKind<?> kind = newValue.getValueKind();
assert kind.equals(expectedValue.getValueKind());
AMD64Kind memKind = (AMD64Kind) kind.getPlatformKind();
AMD64AddressValue addressValue = asAddressValue(address);
RegisterValue raxRes = AMD64.rax.asValue(kind);
emitMove(raxRes, expectedValue);
append(new CompareAndSwapOp(memKind, raxRes, addressValue, raxRes, asAllocatable(newValue)));
Variable result = newVariable(kind);
emitMove(result, raxRes);
return result;
}
Aggregations