Search in sources :

Example 1 with RegisterSaveLayout

use of jdk.vm.ci.code.RegisterSaveLayout in project graal by oracle.

the class AMD64HotSpotLeaveCurrentStackFrameOp method emitCode.

@Override
public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
    FrameMap frameMap = crb.frameMap;
    RegisterConfig registerConfig = frameMap.getRegisterConfig();
    RegisterSaveLayout registerSaveLayout = saveRegisterOp.getMap(frameMap);
    Register stackPointer = registerConfig.getFrameRegister();
    // Restore integer result register.
    final int stackSlotSize = frameMap.getTarget().wordSize;
    Register integerResultRegister = registerConfig.getReturnRegister(JavaKind.Long);
    masm.movptr(integerResultRegister, new AMD64Address(stackPointer, registerSaveLayout.registerToSlot(integerResultRegister) * stackSlotSize));
    masm.movptr(rdx, new AMD64Address(stackPointer, registerSaveLayout.registerToSlot(rdx) * stackSlotSize));
    // Restore float result register.
    Register floatResultRegister = registerConfig.getReturnRegister(JavaKind.Double);
    masm.movdbl(floatResultRegister, new AMD64Address(stackPointer, registerSaveLayout.registerToSlot(floatResultRegister) * stackSlotSize));
    /*
         * All of the register save area will be popped of the stack. Only the return address
         * remains.
         */
    leaveFrameAndRestoreRbp(crb, masm);
    // Remove return address.
    masm.addq(stackPointer, crb.target.arch.getReturnAddressSize());
}
Also used : RegisterConfig(jdk.vm.ci.code.RegisterConfig) FrameMap(org.graalvm.compiler.lir.framemap.FrameMap) RegisterSaveLayout(jdk.vm.ci.code.RegisterSaveLayout) Register(jdk.vm.ci.code.Register) AMD64Address(org.graalvm.compiler.asm.amd64.AMD64Address)

Example 2 with RegisterSaveLayout

use of jdk.vm.ci.code.RegisterSaveLayout in project graal by oracle.

the class SPARCSaveRegistersOp method getMap.

@Override
public RegisterSaveLayout getMap(FrameMap frameMap) {
    int total = 0;
    for (int i = 0; i < savedRegisters.length; i++) {
        if (savedRegisters[i] != null) {
            total++;
        }
    }
    Register[] keys = new Register[total];
    int[] values = new int[total];
    if (total != 0) {
        int mapIndex = 0;
        for (int i = 0; i < savedRegisters.length; i++) {
            if (savedRegisters[i] != null) {
                keys[mapIndex] = savedRegisters[i];
                assert isStackSlot(slots[i]) : "not a StackSlot: " + slots[i];
                StackSlot slot = asStackSlot(slots[i]);
                values[mapIndex] = indexForStackSlot(frameMap, slot);
                mapIndex++;
            }
        }
        assert mapIndex == total;
    }
    return new RegisterSaveLayout(keys, values);
}
Also used : RegisterSaveLayout(jdk.vm.ci.code.RegisterSaveLayout) 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)

Example 3 with RegisterSaveLayout

use of jdk.vm.ci.code.RegisterSaveLayout in project graal by oracle.

the class AMD64SaveRegistersOp method getMap.

@Override
public RegisterSaveLayout getMap(FrameMap frameMap) {
    int total = 0;
    for (int i = 0; i < savedRegisters.length; i++) {
        if (savedRegisters[i] != null) {
            total++;
        }
    }
    Register[] keys = new Register[total];
    int[] values = new int[total];
    if (total != 0) {
        int mapIndex = 0;
        for (int i = 0; i < savedRegisters.length; i++) {
            if (savedRegisters[i] != null) {
                keys[mapIndex] = savedRegisters[i];
                assert isStackSlot(slots[i]) : "not a StackSlot: " + slots[i];
                StackSlot slot = asStackSlot(slots[i]);
                values[mapIndex] = indexForStackSlot(frameMap, slot);
                mapIndex++;
            }
        }
        assert mapIndex == total;
    }
    return new RegisterSaveLayout(keys, values);
}
Also used : RegisterSaveLayout(jdk.vm.ci.code.RegisterSaveLayout) 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)

Aggregations

Register (jdk.vm.ci.code.Register)3 RegisterSaveLayout (jdk.vm.ci.code.RegisterSaveLayout)3 StackSlot (jdk.vm.ci.code.StackSlot)2 ValueUtil.asStackSlot (jdk.vm.ci.code.ValueUtil.asStackSlot)2 ValueUtil.isStackSlot (jdk.vm.ci.code.ValueUtil.isStackSlot)2 RegisterConfig (jdk.vm.ci.code.RegisterConfig)1 AMD64Address (org.graalvm.compiler.asm.amd64.AMD64Address)1 FrameMap (org.graalvm.compiler.lir.framemap.FrameMap)1