23 package org.graalvm.compiler.hotspot.amd64;
24
25 import org.graalvm.compiler.core.amd64.AMD64MoveFactory;
26 import org.graalvm.compiler.lir.amd64.AMD64LIRInstruction;
27
28 import jdk.vm.ci.hotspot.HotSpotCompressedNullConstant;
29 import jdk.vm.ci.hotspot.HotSpotConstant;
30 import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant;
31 import jdk.vm.ci.hotspot.HotSpotObjectConstant;
32 import jdk.vm.ci.meta.AllocatableValue;
33 import jdk.vm.ci.meta.Constant;
34 import jdk.vm.ci.meta.JavaConstant;
35
36 public class AMD64HotSpotMoveFactory extends AMD64MoveFactory {
37
38 public AMD64HotSpotMoveFactory(BackupSlotProvider backupSlotProvider) {
39 super(backupSlotProvider);
40 }
41
42 @Override
43 public boolean canInlineConstant(JavaConstant c) {
44 if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(c)) {
45 return true;
46 } else if (c instanceof HotSpotObjectConstant) {
47 return ((HotSpotObjectConstant) c).isCompressed();
48 } else {
49 return super.canInlineConstant(c);
50 }
51 }
52
53 @Override
54 public boolean allowConstantToStackMove(Constant value) {
55 if (value instanceof HotSpotConstant) {
56 return ((HotSpotConstant) value).isCompressed();
57 }
58 return true;
59 }
60
61 @Override
62 public AMD64LIRInstruction createLoad(AllocatableValue dst, Constant src) {
63 if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(src)) {
64 return super.createLoad(dst, JavaConstant.INT_0);
65 } else if (src instanceof HotSpotObjectConstant) {
66 return new AMD64HotSpotMove.HotSpotLoadObjectConstantOp(dst, (HotSpotObjectConstant) src);
67 } else if (src instanceof HotSpotMetaspaceConstant) {
|
23 package org.graalvm.compiler.hotspot.amd64;
24
25 import org.graalvm.compiler.core.amd64.AMD64MoveFactory;
26 import org.graalvm.compiler.lir.amd64.AMD64LIRInstruction;
27
28 import jdk.vm.ci.hotspot.HotSpotCompressedNullConstant;
29 import jdk.vm.ci.hotspot.HotSpotConstant;
30 import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant;
31 import jdk.vm.ci.hotspot.HotSpotObjectConstant;
32 import jdk.vm.ci.meta.AllocatableValue;
33 import jdk.vm.ci.meta.Constant;
34 import jdk.vm.ci.meta.JavaConstant;
35
36 public class AMD64HotSpotMoveFactory extends AMD64MoveFactory {
37
38 public AMD64HotSpotMoveFactory(BackupSlotProvider backupSlotProvider) {
39 super(backupSlotProvider);
40 }
41
42 @Override
43 public boolean canInlineConstant(Constant c) {
44 if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(c)) {
45 return true;
46 } else if (c instanceof HotSpotObjectConstant) {
47 return ((HotSpotObjectConstant) c).isCompressed();
48 } else if (c instanceof HotSpotMetaspaceConstant) {
49 return ((HotSpotMetaspaceConstant) c).isCompressed();
50 } else {
51 return super.canInlineConstant(c);
52 }
53 }
54
55 @Override
56 public boolean allowConstantToStackMove(Constant value) {
57 if (value instanceof HotSpotConstant) {
58 return ((HotSpotConstant) value).isCompressed();
59 }
60 return true;
61 }
62
63 @Override
64 public AMD64LIRInstruction createLoad(AllocatableValue dst, Constant src) {
65 if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(src)) {
66 return super.createLoad(dst, JavaConstant.INT_0);
67 } else if (src instanceof HotSpotObjectConstant) {
68 return new AMD64HotSpotMove.HotSpotLoadObjectConstantOp(dst, (HotSpotObjectConstant) src);
69 } else if (src instanceof HotSpotMetaspaceConstant) {
|