// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.lightir;

/**
 * Constants related to LIR.
 *
 * <p>The constants generally follow the bytecode values as defined by the classfile format.
 */
public interface LIROpcodes {

  static boolean isOneByteInstruction(int opcode) {
    assert opcode >= NOP;
    return opcode <= DCONST_1;
  }

  // Instructions maintaining the same opcode as defined in CF.
  int NOP = 0;
  int ACONST_NULL = 1;
  int ICONST_M1 = 2;
  int ICONST_0 = 3;
  int ICONST_1 = 4;
  int ICONST_2 = 5;
  int ICONST_3 = 6;
  int ICONST_4 = 7;
  int ICONST_5 = 8;
  int LCONST_0 = 9;
  int LCONST_1 = 10;
  int FCONST_0 = 11;
  int FCONST_1 = 12;
  int FCONST_2 = 13;
  int DCONST_0 = 14;
  int DCONST_1 = 15;
  // int BIPUSH = 16;
  // int SIPUSH = 17;
  int LDC = 18;
  // int ILOAD = 21;
  // int LLOAD = 22;
  // int FLOAD = 23;
  // int DLOAD = 24;
  // int ALOAD = 25;
  int IALOAD = 46;
  int LALOAD = 47;
  int FALOAD = 48;
  int DALOAD = 49;
  int AALOAD = 50;
  int BALOAD = 51;
  int CALOAD = 52;
  int SALOAD = 53;
  // int ISTORE = 54;
  // int LSTORE = 55;
  // int FSTORE = 56;
  // int DSTORE = 57;
  // int ASTORE = 58;
  int IASTORE = 79;
  int LASTORE = 80;
  int FASTORE = 81;
  int DASTORE = 82;
  int AASTORE = 83;
  int BASTORE = 84;
  int CASTORE = 85;
  int SASTORE = 86;
  // int POP = 87;
  // int POP2 = 88;
  // int DUP = 89;
  // int DUP_X1 = 90;
  // int DUP_X2 = 91;
  // int DUP2 = 92;
  // int DUP2_X1 = 93;
  // int DUP2_X2 = 94;
  // int SWAP = 95;
  int IADD = 96;
  int LADD = 97;
  int FADD = 98;
  int DADD = 99;
  int ISUB = 100;
  int LSUB = 101;
  int FSUB = 102;
  int DSUB = 103;
  int IMUL = 104;
  int LMUL = 105;
  int FMUL = 106;
  int DMUL = 107;
  int IDIV = 108;
  int LDIV = 109;
  int FDIV = 110;
  int DDIV = 111;
  int IREM = 112;
  int LREM = 113;
  int FREM = 114;
  int DREM = 115;
  int INEG = 116;
  int LNEG = 117;
  int FNEG = 118;
  int DNEG = 119;
  int ISHL = 120;
  int LSHL = 121;
  int ISHR = 122;
  int LSHR = 123;
  int IUSHR = 124;
  int LUSHR = 125;
  int IAND = 126;
  int LAND = 127;
  int IOR = 128;
  int LOR = 129;
  int IXOR = 130;
  int LXOR = 131;
  // int IINC = 132;
  int I2L = 133;
  int I2F = 134;
  int I2D = 135;
  int L2I = 136;
  int L2F = 137;
  int L2D = 138;
  int F2I = 139;
  int F2L = 140;
  int F2D = 141;
  int D2I = 142;
  int D2L = 143;
  int D2F = 144;
  int I2B = 145;
  int I2C = 146;
  int I2S = 147;
  int LCMP = 148;
  int FCMPL = 149;
  int FCMPG = 150;
  int DCMPL = 151;
  int DCMPG = 152;
  int IFEQ = 153;
  int IFNE = 154;
  int IFLT = 155;
  int IFGE = 156;
  int IFGT = 157;
  int IFLE = 158;
  int IF_ICMPEQ = 159;
  int IF_ICMPNE = 160;
  int IF_ICMPLT = 161;
  int IF_ICMPGE = 162;
  int IF_ICMPGT = 163;
  int IF_ICMPLE = 164;
  int IF_ACMPEQ = 165;
  int IF_ACMPNE = 166;
  int GOTO = 167;
  // int JSR = 168;
  // int RET = 169;
  int TABLESWITCH = 170;
  int LOOKUPSWITCH = 171;
  int IRETURN = 172;
  int LRETURN = 173;
  int FRETURN = 174;
  int DRETURN = 175;
  int ARETURN = 176;
  int RETURN = 177;
  int GETSTATIC = 178;
  int PUTSTATIC = 179;
  int GETFIELD = 180;
  int PUTFIELD = 181;
  int INVOKEVIRTUAL = 182;
  int INVOKESPECIAL = 183;
  int INVOKESTATIC = 184;
  int INVOKEINTERFACE = 185;
  int INVOKEDYNAMIC = 186;
  int NEW = 187;
  int NEWARRAY = 188;
  int ANEWARRAY = 189;
  int ARRAYLENGTH = 190;
  int ATHROW = 191;
  int CHECKCAST = 192;
  int INSTANCEOF = 193;
  int MONITORENTER = 194;
  int MONITOREXIT = 195;
  int MULTIANEWARRAY = 197;
  int IFNULL = 198;
  int IFNONNULL = 199;

  // Non-CF instructions.
  int ICONST = 200;
  int LCONST = 201;
  int FCONST = 202;
  int DCONST = 203;
}
