// 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;

import com.android.tools.r8.errors.Unreachable;

/**
 * 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 >= ACONST_NULL;
    return opcode <= DCONST_1 || opcode == RETURN || opcode == DEBUGPOS || opcode == FALLTHROUGH;
  }

  // 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;
  int INVOKEDIRECT = 204;
  int DEBUGPOS = 205;
  int PHI = 206;
  int FALLTHROUGH = 207;
  int MOVEEXCEPTION = 208;
  int DEBUGLOCALWRITE = 209;

  static String toString(int opcode) {
    switch (opcode) {
        // case NOP: return "NOP";
      case ACONST_NULL:
        return "ACONST_NULL";
      case ICONST_M1:
        return "ICONST_M1";
      case ICONST_0:
        return "ICONST_0";
      case ICONST_1:
        return "ICONST_1";
      case ICONST_2:
        return "ICONST_2";
      case ICONST_3:
        return "ICONST_3";
      case ICONST_4:
        return "ICONST_4";
      case ICONST_5:
        return "ICONST_5";
      case LCONST_0:
        return "LCONST_0";
      case LCONST_1:
        return "LCONST_1";
      case FCONST_0:
        return "FCONST_0";
      case FCONST_1:
        return "FCONST_1";
      case FCONST_2:
        return "FCONST_2";
      case DCONST_0:
        return "DCONST_0";
      case DCONST_1:
        return "DCONST_1";
        // case BIPUSH: return "BIPUSH";
        // case SIPUSH: return "SIPUSH";
      case LDC:
        return "LDC";
        // case ILOAD: return "ILOAD";
        // case LLOAD: return "LLOAD";
        // case FLOAD: return "FLOAD";
        // case DLOAD: return "DLOAD";
        // case ALOAD: return "ALOAD";
      case IALOAD:
        return "IALOAD";
      case LALOAD:
        return "LALOAD";
      case FALOAD:
        return "FALOAD";
      case DALOAD:
        return "DALOAD";
      case AALOAD:
        return "AALOAD";
      case BALOAD:
        return "BALOAD";
      case CALOAD:
        return "CALOAD";
      case SALOAD:
        return "SALOAD";
        // case ISTORE: return "ISTORE";
        // case LSTORE: return "LSTORE";
        // case FSTORE: return "FSTORE";
        // case DSTORE: return "DSTORE";
        // case ASTORE: return "ASTORE";
      case IASTORE:
        return "IASTORE";
      case LASTORE:
        return "LASTORE";
      case FASTORE:
        return "FASTORE";
      case DASTORE:
        return "DASTORE";
      case AASTORE:
        return "AASTORE";
      case BASTORE:
        return "BASTORE";
      case CASTORE:
        return "CASTORE";
      case SASTORE:
        return "SASTORE";
        // case POP: return "POP";
        // case POP2: return "POP2";
        // case DUP: return "DUP";
        // case DUP_X1: return "DUP_X1";
        // case DUP_X2: return "DUP_X2";
        // case DUP2: return "DUP2";
        // case DUP2_X1: return "DUP2_X1";
        // case DUP2_X2: return "DUP2_X2";
        // case SWAP: return "SWAP";
      case IADD:
        return "IADD";
      case LADD:
        return "LADD";
      case FADD:
        return "FADD";
      case DADD:
        return "DADD";
      case ISUB:
        return "ISUB";
      case LSUB:
        return "LSUB";
      case FSUB:
        return "FSUB";
      case DSUB:
        return "DSUB";
      case IMUL:
        return "IMUL";
      case LMUL:
        return "LMUL";
      case FMUL:
        return "FMUL";
      case DMUL:
        return "DMUL";
      case IDIV:
        return "IDIV";
      case LDIV:
        return "LDIV";
      case FDIV:
        return "FDIV";
      case DDIV:
        return "DDIV";
      case IREM:
        return "IREM";
      case LREM:
        return "LREM";
      case FREM:
        return "FREM";
      case DREM:
        return "DREM";
      case INEG:
        return "INEG";
      case LNEG:
        return "LNEG";
      case FNEG:
        return "FNEG";
      case DNEG:
        return "DNEG";
      case ISHL:
        return "ISHL";
      case LSHL:
        return "LSHL";
      case ISHR:
        return "ISHR";
      case LSHR:
        return "LSHR";
      case IUSHR:
        return "IUSHR";
      case LUSHR:
        return "LUSHR";
      case IAND:
        return "IAND";
      case LAND:
        return "LAND";
      case IOR:
        return "IOR";
      case LOR:
        return "LOR";
      case IXOR:
        return "IXOR";
      case LXOR:
        return "LXOR";
        // case IINC: return "IINC";
      case I2L:
        return "I2L";
      case I2F:
        return "I2F";
      case I2D:
        return "I2D";
      case L2I:
        return "L2I";
      case L2F:
        return "L2F";
      case L2D:
        return "L2D";
      case F2I:
        return "F2I";
      case F2L:
        return "F2L";
      case F2D:
        return "F2D";
      case D2I:
        return "D2I";
      case D2L:
        return "D2L";
      case D2F:
        return "D2F";
      case I2B:
        return "I2B";
      case I2C:
        return "I2C";
      case I2S:
        return "I2S";
      case LCMP:
        return "LCMP";
      case FCMPL:
        return "FCMPL";
      case FCMPG:
        return "FCMPG";
      case DCMPL:
        return "DCMPL";
      case DCMPG:
        return "DCMPG";
      case IFEQ:
        return "IFEQ";
      case IFNE:
        return "IFNE";
      case IFLT:
        return "IFLT";
      case IFGE:
        return "IFGE";
      case IFGT:
        return "IFGT";
      case IFLE:
        return "IFLE";
      case IF_ICMPEQ:
        return "IF_ICMPEQ";
      case IF_ICMPNE:
        return "IF_ICMPNE";
      case IF_ICMPLT:
        return "IF_ICMPLT";
      case IF_ICMPGE:
        return "IF_ICMPGE";
      case IF_ICMPGT:
        return "IF_ICMPGT";
      case IF_ICMPLE:
        return "IF_ICMPLE";
      case IF_ACMPEQ:
        return "IF_ACMPEQ";
      case IF_ACMPNE:
        return "IF_ACMPNE";
      case GOTO:
        return "GOTO";
        // case JSR: return "JSR";
        // case RET: return "RET";
      case TABLESWITCH:
        return "TABLESWITCH";
      case LOOKUPSWITCH:
        return "LOOKUPSWITCH";
      case IRETURN:
        return "IRETURN";
      case LRETURN:
        return "LRETURN";
      case FRETURN:
        return "FRETURN";
      case DRETURN:
        return "DRETURN";
      case ARETURN:
        return "ARETURN";
      case RETURN:
        return "RETURN";
      case GETSTATIC:
        return "GETSTATIC";
      case PUTSTATIC:
        return "PUTSTATIC";
      case GETFIELD:
        return "GETFIELD";
      case PUTFIELD:
        return "PUTFIELD";
      case INVOKEVIRTUAL:
        return "INVOKEVIRTUAL";
      case INVOKESPECIAL:
        return "INVOKESPECIAL";
      case INVOKESTATIC:
        return "INVOKESTATIC";
      case INVOKEINTERFACE:
        return "INVOKEINTERFACE";
      case INVOKEDYNAMIC:
        return "INVOKEDYNAMIC";
      case NEW:
        return "NEW";
      case NEWARRAY:
        return "NEWARRAY";
      case ANEWARRAY:
        return "ANEWARRAY";
      case ARRAYLENGTH:
        return "ARRAYLENGTH";
      case ATHROW:
        return "ATHROW";
      case CHECKCAST:
        return "CHECKCAST";
      case INSTANCEOF:
        return "INSTANCEOF";
      case MONITORENTER:
        return "MONITORENTER";
      case MONITOREXIT:
        return "MONITOREXIT";
      case MULTIANEWARRAY:
        return "MULTIANEWARRAY";
      case IFNULL:
        return "IFNULL";
      case IFNONNULL:
        return "IFNONNULL";

        // Non-CF instructions.
      case ICONST:
        return "ICONST";
      case LCONST:
        return "LCONST";
      case FCONST:
        return "FCONST";
      case DCONST:
        return "DCONST";
      case INVOKEDIRECT:
        return "INVOKEDIRECT";
      case DEBUGPOS:
        return "DEBUGPOS";
      case PHI:
        return "PHI";
      case FALLTHROUGH:
        return "FALLTHROUGH";
      case MOVEEXCEPTION:
        return "MOVEEXCEPTION";
      case DEBUGLOCALWRITE:
        return "DEBUGLOCALWRITE";

      default:
        throw new Unreachable("Unexpected LIR opcode: " + opcode);
    }
  }
}
