src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/vector/AMD64VectorMove.java
changeset 58299 6df94ce3ab2f
parent 51436 091c0d22e735
child 58877 aec7bf35d6f5
equal deleted inserted replaced
58298:0152ad7b38b8 58299:6df94ce3ab2f
     1 /*
     1 /*
     2  * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
    26 
    26 
    27 import static jdk.vm.ci.code.ValueUtil.asRegister;
    27 import static jdk.vm.ci.code.ValueUtil.asRegister;
    28 import static jdk.vm.ci.code.ValueUtil.isRegister;
    28 import static jdk.vm.ci.code.ValueUtil.isRegister;
    29 import static jdk.vm.ci.code.ValueUtil.isStackSlot;
    29 import static jdk.vm.ci.code.ValueUtil.isStackSlot;
    30 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVD;
    30 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVD;
    31 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVDQU;
    31 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVDQU32;
    32 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVQ;
    32 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVQ;
    33 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVSD;
    33 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVSD;
    34 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVSS;
    34 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVSS;
    35 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVUPD;
    35 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVUPD;
    36 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVUPS;
    36 import static org.graalvm.compiler.asm.amd64.AMD64Assembler.VexMoveOp.VMOVUPS;
   264 
   264 
   265     @Opcode("SAVE_REGISTER")
   265     @Opcode("SAVE_REGISTER")
   266     public static class SaveRegistersOp extends AMD64SaveRegistersOp {
   266     public static class SaveRegistersOp extends AMD64SaveRegistersOp {
   267         public static final LIRInstructionClass<SaveRegistersOp> TYPE = LIRInstructionClass.create(SaveRegistersOp.class);
   267         public static final LIRInstructionClass<SaveRegistersOp> TYPE = LIRInstructionClass.create(SaveRegistersOp.class);
   268 
   268 
   269         public SaveRegistersOp(Register[] savedRegisters, AllocatableValue[] slots, boolean supportsRemove) {
   269         public SaveRegistersOp(Register[] savedRegisters, AllocatableValue[] slots) {
   270             super(TYPE, savedRegisters, slots, supportsRemove);
   270             super(TYPE, savedRegisters, slots);
   271         }
   271         }
   272 
   272 
   273         @Override
   273         @Override
   274         protected void saveRegister(CompilationResultBuilder crb, AMD64MacroAssembler masm, StackSlot result, Register register) {
   274         protected void saveRegister(CompilationResultBuilder crb, AMD64MacroAssembler masm, StackSlot result, Register register) {
   275             AMD64Kind kind = (AMD64Kind) result.getPlatformKind();
   275             AMD64Kind kind = (AMD64Kind) result.getPlatformKind();
   332             case SINGLE:
   332             case SINGLE:
   333                 return VMOVUPS;
   333                 return VMOVUPS;
   334             case DOUBLE:
   334             case DOUBLE:
   335                 return VMOVUPD;
   335                 return VMOVUPD;
   336             default:
   336             default:
   337                 return VMOVDQU;
   337                 return VMOVDQU32;
   338         }
   338         }
   339     }
   339     }
   340 
   340 
   341     private static VexMoveOp getVectorMemMoveOp(AMD64Kind kind) {
   341     private static VexMoveOp getVectorMemMoveOp(AMD64Kind kind) {
   342         switch (AVXKind.getDataSize(kind)) {
   342         switch (AVXKind.getDataSize(kind)) {