src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/IndirectHotSpotObjectConstantImpl.java
author aivanov
Mon, 21 Oct 2019 21:36:26 +0100
changeset 58728 6d5c7f91e0b5
parent 55463 31bf7b93df5d
permissions -rw-r--r--
8232624: Java cannot start: NewStringPlatform missing Reviewed-by: dholmes, alanb, redestad
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
     1
/*
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
     2
 * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
     4
 *
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
     7
 * published by the Free Software Foundation.
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
     8
 *
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    13
 * accompanied this code).
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    14
 *
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    18
 *
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    21
 * questions.
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    22
 */
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    23
package jdk.vm.ci.hotspot;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    24
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    25
import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    26
55463
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    27
import java.io.ByteArrayOutputStream;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    28
import java.io.PrintStream;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    29
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    30
import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.Option;
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    31
import jdk.vm.ci.meta.JavaConstant;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    32
55463
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    33
/**
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    34
 * Encapsulates a JNI reference to an object in the HotSpot heap.
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    35
 *
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    36
 * {@link IndirectHotSpotObjectConstantImpl} objects are only allocated in the shared library heap.
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    37
 *
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    38
 * @see HotSpotObjectConstantScope
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    39
 */
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    40
final class IndirectHotSpotObjectConstantImpl extends HotSpotObjectConstantImpl {
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    41
    /**
55463
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    42
     * An object handle in {@code JVMCI::_object_handles}.
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    43
     */
55463
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    44
    private long objectHandle;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    45
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    46
    /**
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    47
     * Lazily computed hash code.
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    48
     */
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    49
    private int hashCode;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    50
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    51
    final IndirectHotSpotObjectConstantImpl base;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    52
55463
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    53
    private static class Audit {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    54
        final Object scope;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    55
        final long handle;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    56
        final Throwable origin;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    57
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    58
        Audit(Object scope, long handle, Throwable origin) {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    59
            this.scope = scope;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    60
            this.handle = handle;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    61
            this.origin = origin;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    62
        }
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    63
    }
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    64
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    65
    /**
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    66
     * Details useful to audit a scoped handle used after its creating scope closes. Set to an
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    67
     * {@link Audit} object if {@link HotSpotJVMCIRuntime.Option#AuditHandles} is true otherwise to
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    68
     * {@link HotSpotObjectConstantScope#localScopeDescription}.
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    69
     */
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    70
    private Object rawAudit;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    71
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    72
    @SuppressWarnings("serial")
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    73
    @VMEntryPoint
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    74
    private IndirectHotSpotObjectConstantImpl(long objectHandle, boolean compressed, boolean skipRegister) {
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    75
        super(compressed);
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    76
        assert objectHandle != 0 && UnsafeAccess.UNSAFE.getLong(objectHandle) != 0;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    77
        this.objectHandle = objectHandle;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    78
        this.base = null;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    79
        if (!skipRegister) {
55463
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    80
            HotSpotObjectConstantScope scope = HotSpotObjectConstantScope.CURRENT.get();
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    81
            if (scope != null && !scope.isGlobal()) {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    82
                scope.add(this);
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    83
                if (HotSpotJVMCIRuntime.Option.AuditHandles.getBoolean()) {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    84
                    rawAudit = new Audit(scope.localScopeDescription, objectHandle, new Throwable() {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    85
                        @Override
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    86
                        public String toString() {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    87
                            return "Created " + objectHandle;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    88
                        }
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    89
                    });
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    90
                }
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    91
            } else {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    92
                HandleCleaner.create(this, objectHandle);
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
    93
            }
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    94
        }
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    95
    }
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    96
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    97
    private IndirectHotSpotObjectConstantImpl(IndirectHotSpotObjectConstantImpl base, boolean compressed) {
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    98
        super(compressed);
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
    99
        // This is a variant of an original object that only varies in compress vs uncompressed.
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   100
        // Instead of creating a new handle, reference that object and objectHandle.
55463
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   101
        this.objectHandle = base.getHandle();
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   102
        // There should only be one level of indirection to the base object.
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   103
        assert base.base == null || base.base.base == null;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   104
        this.base = base.base != null ? base.base : base;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   105
    }
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   106
55463
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   107
    long getHandle() {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   108
        checkHandle();
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   109
        return objectHandle;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   110
    }
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   111
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   112
    private void checkHandle() {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   113
        if (objectHandle == 0L) {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   114
            String message;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   115
            if (rawAudit instanceof Audit) {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   116
                Audit audit = (Audit) rawAudit;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   117
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   118
                PrintStream ps = new PrintStream(baos);
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   119
                ps.println("Foreign object reference " + audit.handle + " created in scope '" + audit.scope + "' is no longer valid. Origin: {");
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   120
                audit.origin.printStackTrace(ps);
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   121
                ps.print('}');
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   122
                ps.flush();
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   123
                message = baos.toString();
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   124
            } else {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   125
                message = "Foreign object reference created in scope '" + rawAudit + "' is no longer valid. " +
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   126
                                "Set property " + Option.AuditHandles.getPropertyName() + "=true to show origin of invalid foreign references.";
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   127
            }
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   128
            throw new NullPointerException(message);
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   129
        }
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   130
    }
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   131
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   132
    boolean isValid() {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   133
        return objectHandle != 0L;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   134
    }
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   135
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   136
    @Override
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   137
    public HotSpotResolvedObjectType getType() {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   138
        checkHandle();
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   139
        return super.getType();
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   140
    }
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   141
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   142
    /**
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   143
     * Clears the foreign object reference.
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   144
     */
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   145
    void clear(Object scopeDescription) {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   146
        checkHandle();
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   147
        CompilerToVM.compilerToVM().deleteGlobalHandle(objectHandle);
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   148
        if (rawAudit == null) {
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   149
            rawAudit = scopeDescription;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   150
        }
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   151
        objectHandle = 0L;
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   152
    }
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   153
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   154
    @Override
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   155
    public JavaConstant compress() {
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   156
        assert !compressed;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   157
        return new IndirectHotSpotObjectConstantImpl(this, true);
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   158
    }
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   159
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   160
    @Override
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   161
    public JavaConstant uncompress() {
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   162
        assert compressed;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   163
        return new IndirectHotSpotObjectConstantImpl(this, false);
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   164
    }
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   165
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   166
    @Override
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   167
    public int getIdentityHashCode() {
55463
31bf7b93df5d 8225810: Update JVMCI
kvn
parents: 54669
diff changeset
   168
        checkHandle();
54669
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   169
        int hash = hashCode;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   170
        if (hash == 0) {
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   171
            hash = runtime().compilerToVm.getIdentityHashCode(this);
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   172
            if (hash == 0) {
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   173
                hash = 31;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   174
            }
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   175
            hashCode = hash;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   176
        }
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   177
        return hash;
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   178
    }
ad45b3802d4e 8220623: [JVMCI] Update JVMCI to support JVMCI based Compiler compiled into shared library
kvn
parents:
diff changeset
   179
}