20 * or visit www.oracle.com if you need additional information or have any |
20 * or visit www.oracle.com if you need additional information or have any |
21 * questions. |
21 * questions. |
22 */ |
22 */ |
23 package org.graalvm.compiler.hotspot; |
23 package org.graalvm.compiler.hotspot; |
24 |
24 |
25 import static org.graalvm.compiler.lir.LIRValueUtil.isJavaConstant; |
|
26 import static jdk.vm.ci.code.ValueUtil.asRegister; |
25 import static jdk.vm.ci.code.ValueUtil.asRegister; |
27 import static jdk.vm.ci.code.ValueUtil.asStackSlot; |
26 import static jdk.vm.ci.code.ValueUtil.asStackSlot; |
28 import static jdk.vm.ci.code.ValueUtil.isRegister; |
27 import static jdk.vm.ci.code.ValueUtil.isRegister; |
|
28 import static org.graalvm.compiler.lir.LIRValueUtil.isJavaConstant; |
29 |
29 |
30 import java.util.ArrayList; |
30 import java.util.ArrayList; |
31 |
31 |
|
32 import org.graalvm.compiler.core.common.LIRKind; |
32 import org.graalvm.compiler.core.common.PermanentBailoutException; |
33 import org.graalvm.compiler.core.common.PermanentBailoutException; |
33 import org.graalvm.compiler.core.common.LIRKind; |
|
34 import org.graalvm.compiler.debug.GraalError; |
34 import org.graalvm.compiler.debug.GraalError; |
35 import org.graalvm.compiler.lir.LIRFrameState; |
35 import org.graalvm.compiler.lir.LIRFrameState; |
36 import org.graalvm.compiler.lir.Variable; |
36 import org.graalvm.compiler.lir.Variable; |
37 import org.graalvm.compiler.lir.framemap.ReferenceMapBuilder; |
37 import org.graalvm.compiler.lir.framemap.ReferenceMapBuilder; |
38 |
38 |
50 private final ArrayList<Value> objectValues; |
50 private final ArrayList<Value> objectValues; |
51 private int objectCount; |
51 private int objectCount; |
52 |
52 |
53 private final int totalFrameSize; |
53 private final int totalFrameSize; |
54 private final int maxOopMapStackOffset; |
54 private final int maxOopMapStackOffset; |
|
55 private final int uncompressedReferenceSize; |
55 |
56 |
56 public HotSpotReferenceMapBuilder(int totalFrameSize, int maxOopMapStackOffset) { |
57 public HotSpotReferenceMapBuilder(int totalFrameSize, int maxOopMapStackOffset, int uncompressedReferenceSize) { |
|
58 this.uncompressedReferenceSize = uncompressedReferenceSize; |
57 this.objectValues = new ArrayList<>(); |
59 this.objectValues = new ArrayList<>(); |
58 this.objectCount = 0; |
60 this.objectCount = 0; |
59 this.maxOopMapStackOffset = maxOopMapStackOffset; |
61 this.maxOopMapStackOffset = maxOopMapStackOffset; |
60 this.totalFrameSize = totalFrameSize; |
62 this.totalFrameSize = totalFrameSize; |
61 } |
63 } |
114 base = toLocation(baseValue, 0); |
116 base = toLocation(baseValue, 0); |
115 } |
117 } |
116 |
118 |
117 for (int i = 0; i < kind.getPlatformKind().getVectorLength(); i++) { |
119 for (int i = 0; i < kind.getPlatformKind().getVectorLength(); i++) { |
118 if (kind.isReference(i)) { |
120 if (kind.isReference(i)) { |
|
121 assert kind.isCompressedReference(i) ? (bytes < uncompressedReferenceSize) : (bytes == uncompressedReferenceSize); |
119 objects[idx] = toLocation(obj, i * bytes); |
122 objects[idx] = toLocation(obj, i * bytes); |
120 derivedBase[idx] = base; |
123 derivedBase[idx] = base; |
121 sizeInBytes[idx] = bytes; |
124 sizeInBytes[idx] = bytes; |
122 idx++; |
125 idx++; |
123 } |
126 } |