use of jdk.vm.ci.amd64.AMD64Kind 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 jdk.vm.ci.amd64.AMD64Kind 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;
}
use of jdk.vm.ci.amd64.AMD64Kind in project graal by oracle.
the class AMD64MoveFactoryBase method createStackMove.
@Override
public final AMD64LIRInstruction createStackMove(AllocatableValue result, AllocatableValue input) {
AMD64Kind kind = (AMD64Kind) result.getPlatformKind();
switch(kind.getSizeInBytes()) {
case 2:
return new AMD64PushPopStackMove(WORD, result, input);
case 8:
return new AMD64PushPopStackMove(QWORD, result, input);
default:
RegisterBackupPair backup = backupSlotProvider.getScratchRegister(input.getPlatformKind());
Register scratchRegister = backup.register;
VirtualStackSlot backupSlot = backup.backupSlot;
return createStackMove(result, input, scratchRegister, backupSlot);
}
}
use of jdk.vm.ci.amd64.AMD64Kind in project graal by oracle.
the class AMD64ArithmeticLIRGenerator method emitDiv.
@Override
public Value emitDiv(Value a, Value b, LIRFrameState state) {
TargetDescription target = getLIRGen().target();
boolean isAvx = ((AMD64) target.arch).getFeatures().contains(CPUFeature.AVX);
LIRKind resultKind = LIRKind.combine(a, b);
switch((AMD64Kind) a.getPlatformKind()) {
case DWORD:
AMD64MulDivOp op = emitIDIV(DWORD, a, b, state);
return getLIRGen().emitMove(op.getQuotient());
case QWORD:
AMD64MulDivOp lop = emitIDIV(QWORD, a, b, state);
return getLIRGen().emitMove(lop.getQuotient());
case SINGLE:
if (isAvx) {
return emitBinary(resultKind, AVXOp.DIV, SS, false, a, b);
} else {
return emitBinary(resultKind, SSEOp.DIV, SS, false, a, b);
}
case DOUBLE:
if (isAvx) {
return emitBinary(resultKind, AVXOp.DIV, SD, false, a, b);
} else {
return emitBinary(resultKind, SSEOp.DIV, SD, false, a, b);
}
default:
throw GraalError.shouldNotReachHere();
}
}
Aggregations