src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotReferenceMapBuilder.java
changeset 48398 79afa4c434f6
parent 47216 71c04702a3d5
child 50858 2d3e99a72541
equal deleted inserted replaced
48397:ead47ddf5844 48398:79afa4c434f6
    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                     }