Search in sources :

Example 6 with RegisterValue

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));
}
Also used : RegisterValue(jdk.vm.ci.code.RegisterValue) LIRGeneratorTool(org.graalvm.compiler.lir.gen.LIRGeneratorTool)

Example 7 with RegisterValue

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;
}
Also used : RegisterValue(jdk.vm.ci.code.RegisterValue)

Example 8 with RegisterValue

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;
}
Also used : AMD64AddressValue(org.graalvm.compiler.lir.amd64.AMD64AddressValue) RegisterValue(jdk.vm.ci.code.RegisterValue) AMD64Kind(jdk.vm.ci.amd64.AMD64Kind) Variable(org.graalvm.compiler.lir.Variable) CompareAndSwapOp(org.graalvm.compiler.lir.amd64.AMD64Move.CompareAndSwapOp) CondMoveOp(org.graalvm.compiler.lir.amd64.AMD64ControlFlow.CondMoveOp) FloatCondMoveOp(org.graalvm.compiler.lir.amd64.AMD64ControlFlow.FloatCondMoveOp)

Example 9 with RegisterValue

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);
        }
    }
}
Also used : RegisterValue(jdk.vm.ci.code.RegisterValue) Register(jdk.vm.ci.code.Register) ValueUtil.isStackSlot(jdk.vm.ci.code.ValueUtil.isStackSlot) ValueUtil.asStackSlot(jdk.vm.ci.code.ValueUtil.asStackSlot) StackSlot(jdk.vm.ci.code.StackSlot) SPARCAddress(org.graalvm.compiler.asm.sparc.SPARCAddress)

Example 10 with RegisterValue

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));
}
Also used : RegisterValue(jdk.vm.ci.code.RegisterValue) RegisterCategory(jdk.vm.ci.code.Register.RegisterCategory) Variable(org.graalvm.compiler.lir.Variable) Register(jdk.vm.ci.code.Register) GenericValueMap(org.graalvm.compiler.lir.util.GenericValueMap) Test(org.junit.Test)

Aggregations

RegisterValue (jdk.vm.ci.code.RegisterValue)30 CallingConvention (jdk.vm.ci.code.CallingConvention)9 Variable (org.graalvm.compiler.lir.Variable)9 LIRKind (org.graalvm.compiler.core.common.LIRKind)8 Register (jdk.vm.ci.code.Register)7 ForeignCallLinkage (org.graalvm.compiler.core.common.spi.ForeignCallLinkage)6 PlatformKind (jdk.vm.ci.meta.PlatformKind)4 LIRGeneratorTool (org.graalvm.compiler.lir.gen.LIRGeneratorTool)4 AMD64Kind (jdk.vm.ci.amd64.AMD64Kind)3 TargetDescription (jdk.vm.ci.code.TargetDescription)3 AllocatableValue (jdk.vm.ci.meta.AllocatableValue)3 GraalHotSpotVMConfig (org.graalvm.compiler.hotspot.GraalHotSpotVMConfig)3 HotSpotForeignCallLinkage (org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage)3 HotSpotForeignCallLinkageImpl (org.graalvm.compiler.hotspot.HotSpotForeignCallLinkageImpl)3 AMD64AddressValue (org.graalvm.compiler.lir.amd64.AMD64AddressValue)3 CompareAndSwapOp (org.graalvm.compiler.lir.amd64.AMD64Move.CompareAndSwapOp)3 SubstrateRegisterConfig (com.oracle.svm.core.graal.meta.SubstrateRegisterConfig)2 ValueUtil.asRegisterValue (jdk.vm.ci.code.ValueUtil.asRegisterValue)2 TraceUtil.asShadowedRegisterValue (org.graalvm.compiler.lir.alloc.trace.TraceUtil.asShadowedRegisterValue)2 TraceUtil.isShadowedRegisterValue (org.graalvm.compiler.lir.alloc.trace.TraceUtil.isShadowedRegisterValue)2