view c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotVMConfig.java @ 1439:d0c8d3a2a7e8

Modified domake script to use (and require) JRE7 environment variable for find the base of a JRE 7 installation. This script no also ensures that $JRE7/lib/amd64/jvm.cfg has the right value for '-client'. Added c1x4hotspotsrc/hotspot/java as indirect launcher for $JRE7/bin/java that can be referenced from Eclipse launch configuration. Copied .checkstyle_checks.xml from C1X project to c1x4hotspotsrc/HotSpotVM so that it can be used by HotSpotVM project without hard coded path to C1X in another Eclipse workspace. Various other changes to reflect changes in CRI and C1X.
author Doug Simon <doug.simon@oracle.com>
date Fri, 29 Oct 2010 18:14:17 +0200
parents 9e5e83ca2259
children 8cfe3537a0d3
line wrap: on
line source

/*
 * Copyright (c) 2010 Sun Microsystems, Inc.  All rights reserved.
 *
 * Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product
 * that is described in this document. In particular, and without limitation, these intellectual property
 * rights may include one or more of the U.S. patents listed at http://www.sun.com/patents and one or
 * more additional patents or pending patent applications in the U.S. and in other countries.
 *
 * U.S. Government Rights - Commercial software. Government users are subject to the Sun
 * Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its
 * supplements.
 *
 * Use is subject to license terms. Sun, Sun Microsystems, the Sun logo, Java and Solaris are trademarks or
 * registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All SPARC trademarks
 * are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the
 * U.S. and other countries.
 *
 * UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open
 * Company, Ltd.
 */
package com.sun.hotspot.c1x;

import com.sun.cri.ci.*;

/**
 * Used to communicate configuration details, runtime offsets, etc. to c1x upon compileMethod.
 *
 * @author Lukas Stadler
 */
public class HotSpotVMConfig implements CompilerObject {

    // os information, register layout, code generation, ...
    public boolean windowsOs;
    public int codeEntryAlignment;

    // offsets, ...
    public int vmPageSize;
    public int stackShadowPages;
    public int hubOffset;
    public int arrayLengthOffset;
    public int klassStateOffset;
    public int klassStateFullyInitialized;
    public int[] arrayOffsets;
    public int arrayClassElementOffset;
    public int threadTlabTopOffset;
    public int threadTlabEndOffset;
    public int instanceHeaderPrototypeOffset;
    public int threadExceptionOopOffset;
    public int threadExceptionPcOffset;
    public int threadMultiNewArrayStorage;
    public long cardtableStartAddress;
    public int cardtableShift;
    public long safepointPollingAddress;

    // runtime stubs
    public long debugStub;
    public long instanceofStub;
    public long newInstanceStub;
    public long unresolvedNewInstanceStub;
    public long newTypeArrayStub;
    public long newObjectArrayStub;
    public long newMultiArrayStub;
    public long loadKlassStub;
    public long accessFieldStub;
    public long resolveStaticCallStub;
    public long inlineCacheMissStub;
    public long unwindExceptionStub;
    public long handleExceptionStub;
    public long throwClassCastException;
    public long throwArrayStoreException;
    public long throwArrayIndexException;
    public long monitorEnterStub;
    public long monitorExitStub;

    public void check() {
        assert vmPageSize >= 16;
        assert codeEntryAlignment > 0;
        assert stackShadowPages > 0;
    }

    public int getArrayOffset(CiKind kind) {
        return arrayOffsets[getKindNumber(kind)];
    }

    private int getKindNumber(CiKind kind) {
        if (kind == CiKind.Boolean) {
            return 0;
        } else if (kind == CiKind.Byte) {
            return 1;
        } else if (kind == CiKind.Short) {
            return 2;
        } else if (kind == CiKind.Char) {
            return 3;
        } else if (kind == CiKind.Int) {
            return 4;
        } else if (kind == CiKind.Float) {
            return 5;
        } else if (kind == CiKind.Long) {
            return 6;
        } else if (kind == CiKind.Double) {
            return 7;
        } else if (kind == CiKind.Object) {
            return 8;
        } else {
            throw new RuntimeException(kind + " is not a Java kind");
        }
    }
}