use of jdk.vm.ci.code.RegisterValue in project graal by oracle.
the class ReadStackPointerNode method generate.
@Override
public void generate(NodeLIRBuilderTool gen) {
LIRGeneratorTool tool = gen.getLIRGeneratorTool();
RegisterValue input = tool.getRegisterConfig().getFrameRegister().asValue(tool.getLIRKind(FrameAccess.getWordStamp()));
gen.setResult(this, tool.emitMove(input));
}
use of jdk.vm.ci.code.RegisterValue in project graal by oracle.
the class AMD64ArithmeticLIRGenerator method moveToReg.
private RegisterValue moveToReg(Register reg, Value v) {
RegisterValue ret = reg.asValue(v.getValueKind());
getLIRGen().emitMove(ret, v);
return ret;
}
use of jdk.vm.ci.code.RegisterValue in project graal by oracle.
the class AMD64LIRGenerator method emitLogicCompareAndSwap.
@Override
public Variable emitLogicCompareAndSwap(Value address, Value expectedValue, Value newValue, Value trueValue, Value falseValue) {
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)));
assert trueValue.getValueKind().equals(falseValue.getValueKind());
Variable result = newVariable(trueValue.getValueKind());
append(new CondMoveOp(result, Condition.EQ, asAllocatable(trueValue), falseValue));
return result;
}
use of jdk.vm.ci.code.RegisterValue in project graal by oracle.
the class SPARCSaveRegistersOp method emitCode.
@Override
public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) {
// Can be used with VIS3
// new Movxtod(SPARC.i0, RETURN_REGISTER_STORAGE).emit(masm);
// We abuse the first stackslot for transferring i0 to return_register_storage
// assert slots.length >= 1;
SPARCAddress slot0Address = (SPARCAddress) crb.asAddress(slots[0]);
masm.stx(SPARC.i0, slot0Address);
masm.lddf(slot0Address, RETURN_REGISTER_STORAGE);
// Now save the registers
for (int i = 0; i < savedRegisters.length; i++) {
if (savedRegisters[i] != null) {
assert isStackSlot(slots[i]) : "not a StackSlot: " + slots[i];
Register savedRegister = savedRegisters[i];
StackSlot slot = asStackSlot(slots[i]);
SPARCAddress slotAddress = (SPARCAddress) crb.asAddress(slot);
RegisterValue input = savedRegister.asValue(slot.getValueKind());
SPARCMove.emitStore(input, slotAddress, slot.getPlatformKind(), DUMMY, null, crb, masm);
}
}
}
use of jdk.vm.ci.code.RegisterValue in project graal by oracle.
the class GenericValueMapTest method run0.
@Test
public void run0() {
RegisterCategory cat = new RegisterCategory("regs");
RegisterValue reg = new Register(0, 0, "reg0", cat).asValue();
Variable var = new Variable(LIRKind.value(DummyKind.Long), 0);
Object obj0 = new Object();
Object obj1 = new Object();
GenericValueMap<Object> map = new GenericValueMap<>();
assertNull(map.get(reg));
assertNull(map.get(var));
map.put(reg, obj0);
map.put(var, obj1);
assertEquals(obj0, map.get(reg));
assertEquals(obj1, map.get(var));
map.remove(reg);
map.remove(var);
assertNull(map.get(reg));
assertNull(map.get(var));
map.put(reg, obj0);
map.put(var, obj1);
map.put(var, obj0);
map.put(reg, obj1);
assertEquals(obj1, map.get(reg));
assertEquals(obj0, map.get(var));
map.put(reg, null);
map.put(var, null);
assertNull(map.get(reg));
assertNull(map.get(var));
}
Aggregations