All Downloads are FREE. Search and download functionalities are using the official Maven repository.

prompto.compiler.OpcodeKind Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/* copied from com.sun.tools.classfile.Instruction.Kind */

package prompto.compiler;


/** The kind of an instruction, as determined by the position, size and
 *  types of its operands. */
public enum OpcodeKind {
    /** Opcode is not followed by any operands. */
    NO_OPERANDS(1),
    /** Opcode is followed by a byte indicating a type. */
    ATYPE(2),
    /** Opcode is followed by a 2-byte branch offset. */
    BRANCH(3),
    /** Opcode is followed by a 4-byte branch offset. */
    BRANCH_W(5),
    /** Opcode is followed by a signed byte value. */
    BYTE(2),
    /** Opcode is followed by a 1-byte index into the constant pool. */
    CPREF(2),
    /** Opcode is followed by a 2-byte index into the constant pool. */
    CPREF_W(3),
    /** Opcode is followed by a 2-byte index into the constant pool,
     *  an unsigned byte value. */
    CPREF_W_UBYTE(4),
    /** Opcode is followed by a 2-byte index into the constant pool.,
     *  an unsigned byte value, and a zero byte. */
    CPREF_W_UBYTE_ZERO(5),
    /** Opcode is followed by variable number of operands, depending
     * on the instruction.*/
    DYNAMIC(-1),
    /** Opcode is followed by a 1-byte reference to a local variable. */
    LOCAL(2),
    /** Opcode is followed by a 1-byte reference to a local variable,
     *  and a signed byte value. */
    LOCAL_BYTE(3),
    /** Opcode is followed by a signed short value. */
    SHORT(3),
    /** Wide opcode is not followed by any operands. */
    WIDE_NO_OPERANDS(2, 2),
    /** Wide opcode is followed by a 2-byte index into the constant pool. */
    WIDE_CPREF_W(2, 4),
    /** Wide opcode is followed by a 2-byte index into the constant pool,
     *  and a signed short value. */
    WIDE_CPREF_W_SHORT(2, 6),
    /** Opcode was not recognized. */
    UNKNOWN(1);

    public final int width;  // opcode length	
    public final int length; // full length in bytes, or -1 if it depends on the instruction

    OpcodeKind(int length) {
        this(1, length);
    }
    
    OpcodeKind(int width, int length) {
    	this.width = width;
        this.length = length;
    }

};




© 2015 - 2024 Weber Informatics LLC | Privacy Policy