src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/vector/AMD64VectorMove.java
equal
deleted
inserted
replaced
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)) { |