test/jdk/lib/testlibrary/bytecode/jdk/experimental/bytecode/Opcode.java
author psandoz
Fri, 08 Sep 2017 10:46:46 -0700
changeset 48826 c4d9d1b08e2e
permissions -rw-r--r--
8186209: Tool support for ConstantDynamic 8186046: Minimal ConstantDynamic support 8190972: Ensure that AOT/Graal filters out class files containing CONSTANT_Dynamic ahead of full AOT support Reviewed-by: acorn, coleenp, kvn Contributed-by: lois.foltan@oracle.com, john.r.rose@oracle.com, paul.sandoz@oracle.com

/*
 * Copyright (c) 2017, 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.
 *
 * 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.
 */

package jdk.experimental.bytecode;

import jdk.experimental.bytecode.MacroCodeBuilder.CondKind;

public enum Opcode {

    NOP(0),
    ACONST_NULL(1),
    ICONST_M1(2),
    ICONST_0(3),
    ICONST_1(4),
    ICONST_2(5),
    ICONST_3(6),
    ICONST_4(7),
    ICONST_5(8),
    LCONST_0(9),
    LCONST_1(10),
    FCONST_0(11),
    FCONST_1(12),
    FCONST_2(13),
    DCONST_0(14),
    DCONST_1(15),
    BIPUSH(16),
    SIPUSH(17),
    LDC(18),
    LDC_W(19),
    LDC2_W(20),
    ILOAD(21),
    LLOAD(22),
    FLOAD(23),
    DLOAD(24),
    ALOAD(25),
    ILOAD_0(26),
    ILOAD_1(27),
    ILOAD_2(28),
    ILOAD_3(29),
    LLOAD_0(30),
    LLOAD_1(31),
    LLOAD_2(32),
    LLOAD_3(33),
    FLOAD_0(34),
    FLOAD_1(35),
    FLOAD_2(36),
    FLOAD_3(37),
    DLOAD_0(38),
    DLOAD_1(39),
    DLOAD_2(40),
    DLOAD_3(41),
    ALOAD_0(42),
    ALOAD_1(43),
    ALOAD_2(44),
    ALOAD_3(45),
    IALOAD(46),
    LALOAD(47),
    FALOAD(48),
    DALOAD(49),
    AALOAD(50),
    BALOAD(51),
    CALOAD(52),
    SALOAD(53),
    ISTORE(54),
    LSTORE(55),
    FSTORE(56),
    DSTORE(57),
    ASTORE(58),
    ISTORE_0(59),
    ISTORE_1(60),
    ISTORE_2(61),
    ISTORE_3(62),
    LSTORE_0(63),
    LSTORE_1(64),
    LSTORE_2(65),
    LSTORE_3(66),
    FSTORE_0(67),
    FSTORE_1(68),
    FSTORE_2(69),
    FSTORE_3(70),
    DSTORE_0(71),
    DSTORE_1(72),
    DSTORE_2(73),
    DSTORE_3(74),
    ASTORE_0(75),
    ASTORE_1(76),
    ASTORE_2(77),
    ASTORE_3(78),
    IASTORE(79),
    LASTORE(80),
    FASTORE(81),
    DASTORE(82),
    AASTORE(83),
    BASTORE(84),
    CASTORE(85),
    SASTORE(86),
    POP(87),
    POP2(88),
    DUP(89),
    DUP_X1(90),
    DUP_X2(91),
    DUP2(92),
    DUP2_X1(93),
    DUP2_X2(94),
    SWAP(95),
    IADD(96),
    LADD(97),
    FADD(98),
    DADD(99),
    ISUB(100),
    LSUB(101),
    FSUB(102),
    DSUB(103),
    IMUL(104),
    LMUL(105),
    FMUL(106),
    DMUL(107),
    IDIV(108),
    LDIV(109),
    FDIV(110),
    DDIV(111),
    IREM(112),
    LREM(113),
    FREM(114),
    DREM(115),
    INEG(116),
    LNEG(117),
    FNEG(118),
    DNEG(119),
    ISHL(120),
    LSHL(121),
    ISHR(122),
    LSHR(123),
    IUSHR(124),
    LUSHR(125),
    IAND(126),
    LAND(127),
    IOR(128),
    LOR(129),
    IXOR(130),
    LXOR(131),
    IINC(132),
    I2L(133),
    I2F(134),
    I2D(135),
    L2I(136),
    L2F(137),
    L2D(138),
    F2I(139),
    F2L(140),
    F2D(141),
    D2I(142),
    D2L(143),
    D2F(144),
    I2B(145),
    I2C(146),
    I2S(147),
    LCMP(148),
    FCMPL(149),
    FCMPG(150),
    DCMPL(151),
    DCMPG(152),
    IFEQ(153),
    IFNE(154),
    IFLT(155),
    IFGE(156),
    IFGT(157),
    IFLE(158),
    IF_ICMPEQ(159),
    IF_ICMPNE(160),
    IF_ICMPLT(161),
    IF_ICMPGE(162),
    IF_ICMPGT(163),
    IF_ICMPLE(164),
    IF_ACMPEQ(165),
    IF_ACMPNE(166),
    GOTO_(167),
    JSR(168),
    RET(169),
    TABLESWITCH(170),
    LOOKUPSWITCH(171),
    IRETURN(172),
    LRETURN(173),
    FRETURN(174),
    DRETURN(175),
    ARETURN(176),
    RETURN(177),
    GETSTATIC(178),
    PUTSTATIC(179),
    GETFIELD(180),
    PUTFIELD(181),
    INVOKEVIRTUAL(182),
    INVOKESPECIAL(183),
    INVOKESTATIC(184),
    INVOKEINTERFACE(185),
    INVOKEDYNAMIC(186),
    NEW(187),
    NEWARRAY(188),
    ANEWARRAY(189),
    ARRAYLENGTH(190),
    ATHROW(191),
    CHECKCAST(192),
    INSTANCEOF(193),
    MONITORENTER(194),
    MONITOREXIT(195),
    WIDE(196),
    MULTIANEWARRAY(197),
    IF_NULL(198),
    IF_NONNULL(199),
    GOTO_W(200),
    JSR_W(201),
    VLOAD(203),
    VSTORE(204),
    VALOAD(205),
    VASTORE(206),
    VNEW(207),
    VNEWARRAY(208),
    MULTIVNEWARRAY(209),
    VRETURN(210),
    VGETFIELD(211),
    TYPED(212),
    VBOX(216),
    VUNBOX(217);

    int code;

    Opcode(int code) {
        this.code = code;
    }

    protected Opcode at(TypeTag type) {
        return at(type, 1);
    }

    protected Opcode at(CondKind cond) {
        return at(cond.offset, 1);
    }

    protected Opcode at(TypeTag type, int multiplier) {
        return at(type.offset, multiplier);
    }

    private Opcode at(int offset, int multiplier) {
        if (offset < 0) throw new AssertionError();
        return Opcode.values()[code + (multiplier * offset)];
    }
}