1 //      OPCODE          negated   swaped    float  arity, flags
   2 
   3 OPCODE(BADOP,           BADOP,    BADOP,    BADOP, 0, OPF_NONE)
   4 
   5 /* Entry */
   6 OPCODE(ENTRY,           BADOP,    BADOP,    BADOP, 0, OPF_NONE)
   7 
   8 /* Terminator */
   9 OPCODE(RET,             BADOP,    BADOP,    BADOP, 1, OPF_NONE)
  10 OPCODE(BR,              BADOP,    BADOP,    BADOP, 0, OPF_NONE)
  11 OPCODE(CBR,             BADOP,    BADOP,    BADOP, 1, OPF_NONE)
  12 OPCODE(SWITCH,          BADOP,    BADOP,    BADOP, 1, OPF_NONE)
  13 OPCODE(COMPUTEDGOTO,    BADOP,    BADOP,    BADOP, 1, OPF_NONE)
  14 OPCODE_RANGE(TERMINATOR, RET, COMPUTEDGOTO)
  15 
  16 /* Binary */
  17 OPCODE(ADD,             BADOP,    BADOP,    FADD,  2, OPF_TARGET)
  18 OPCODE(SUB,             BADOP,    BADOP,    FSUB,  2, OPF_TARGET)
  19 OPCODE(MUL,             BADOP,    BADOP,    FMUL,  2, OPF_TARGET)
  20 OPCODE(DIVU,            BADOP,    BADOP,    FDIV,  2, OPF_TARGET)
  21 OPCODE(DIVS,            BADOP,    BADOP,    FDIV,  2, OPF_TARGET)
  22 OPCODE(MODU,            BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  23 OPCODE(MODS,            BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  24 OPCODE(SHL,             BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  25 OPCODE(LSR,             BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  26 OPCODE(ASR,             BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  27 
  28 /* Floating-point binops */
  29 OPCODE(FADD,            BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  30 OPCODE(FSUB,            BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  31 OPCODE(FMUL,            BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  32 OPCODE(FDIV,            BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  33 
  34 /* Logical */
  35 OPCODE(AND_BOOL,        BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  36 OPCODE(OR_BOOL,         BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  37 OPCODE(AND,             BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  38 OPCODE(OR,              BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  39 OPCODE(XOR,             BADOP,    BADOP,    BADOP, 2, OPF_TARGET)
  40 OPCODE_RANGE(BINARY, ADD, XOR)
  41 
  42 /* floating-point comparison */
  43 OPCODE(FCMP_ORD,        FCMP_UNO, FCMP_ORD, BADOP, 2, OPF_TARGET)
  44 OPCODE(FCMP_OEQ,        FCMP_UNE, FCMP_OEQ, BADOP, 2, OPF_TARGET)
  45 OPCODE(FCMP_ONE,        FCMP_UEQ, FCMP_ONE, BADOP, 2, OPF_TARGET)
  46 OPCODE(FCMP_UEQ,        FCMP_ONE, FCMP_UEQ, BADOP, 2, OPF_TARGET)
  47 OPCODE(FCMP_UNE,        FCMP_OEQ, FCMP_UNE, BADOP, 2, OPF_TARGET)
  48 OPCODE(FCMP_OLT,        FCMP_UGE, FCMP_OGT, BADOP, 2, OPF_TARGET)
  49 OPCODE(FCMP_OLE,        FCMP_UGT, FCMP_OGE, BADOP, 2, OPF_TARGET)
  50 OPCODE(FCMP_OGE,        FCMP_ULT, FCMP_OLE, BADOP, 2, OPF_TARGET)
  51 OPCODE(FCMP_OGT,        FCMP_ULE, FCMP_OLT, BADOP, 2, OPF_TARGET)
  52 OPCODE(FCMP_ULT,        FCMP_OGE, FCMP_UGT, BADOP, 2, OPF_TARGET)
  53 OPCODE(FCMP_ULE,        FCMP_OGT, FCMP_UGE, BADOP, 2, OPF_TARGET)
  54 OPCODE(FCMP_UGE,        FCMP_OLT, FCMP_ULE, BADOP, 2, OPF_TARGET)
  55 OPCODE(FCMP_UGT,        FCMP_OLE, FCMP_ULT, BADOP, 2, OPF_TARGET)
  56 OPCODE(FCMP_UNO,        FCMP_ORD, FCMP_UNO, BADOP, 2, OPF_TARGET)
  57 OPCODE_RANGE(FPCMP, FCMP_ORD, FCMP_UNO)
  58 
  59 /* Binary comparison */
  60 OPCODE(SET_EQ,          SET_NE,   SET_EQ,   FCMP_OEQ, 2, OPF_TARGET)
  61 OPCODE(SET_LT,          SET_GE,   SET_GT,   FCMP_OLT, 2, OPF_TARGET)
  62 OPCODE(SET_LE,          SET_GT,   SET_GE,   FCMP_OLE, 2, OPF_TARGET)
  63 OPCODE(SET_GE,          SET_LT,   SET_LE,   FCMP_OGE, 2, OPF_TARGET)
  64 OPCODE(SET_GT,          SET_LE,   SET_LT,   FCMP_OGT, 2, OPF_TARGET)
  65 OPCODE(SET_B,           SET_AE,   SET_A,    FCMP_OLT, 2, OPF_TARGET)
  66 OPCODE(SET_BE,          SET_A,    SET_AE,   FCMP_OLE, 2, OPF_TARGET)
  67 OPCODE(SET_AE,          SET_B,    SET_BE,   FCMP_OGE, 2, OPF_TARGET)
  68 OPCODE(SET_A,           SET_BE,   SET_B,    FCMP_OGT, 2, OPF_TARGET)
  69 OPCODE(SET_NE,          SET_EQ,   SET_NE,   FCMP_UNE, 2, OPF_TARGET)
  70 OPCODE_RANGE(BINCMP, SET_EQ, SET_NE)
  71 
  72 /* Uni */
  73 OPCODE(NOT,             BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  74 OPCODE(NEG,             BADOP,    BADOP,    FNEG,  1, OPF_TARGET)
  75 OPCODE(FNEG,            BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  76 OPCODE(TRUNC,           BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  77 OPCODE(ZEXT,            BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  78 OPCODE(SEXT,            BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  79 OPCODE(FCVTU,           BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  80 OPCODE(FCVTS,           BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  81 OPCODE(UCVTF,           BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  82 OPCODE(SCVTF,           BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  83 OPCODE(FCVTF,           BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  84 OPCODE(UTPTR,           BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  85 OPCODE(PTRTU,           BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  86 OPCODE(PTRCAST,         BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  87 OPCODE_RANGE(UNOP, NOT, PTRCAST)
  88 OPCODE(SYMADDR,         BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  89 OPCODE(SLICE,           BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  90 
  91 /* Select - three input values */
  92 OPCODE(SEL,             BADOP,    BADOP,    BADOP, 3, OPF_TARGET)
  93 
  94 /* Memory */
  95 OPCODE(LOAD,            BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
  96 OPCODE(STORE,           BADOP,    BADOP,    BADOP, 1, OPF_NONE)
  97 
  98 /* Other */
  99 OPCODE(PHISOURCE,       BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
 100 OPCODE(PHI,             BADOP,    BADOP,    BADOP, 0, OPF_TARGET)
 101 OPCODE(SETVAL,          BADOP,    BADOP,    BADOP, 0, OPF_TARGET)
 102 OPCODE(SETFVAL,         BADOP,    BADOP,    BADOP, 0, OPF_TARGET)
 103 OPCODE(CALL,            BADOP,    BADOP,    BADOP, 1, OPF_TARGET)
 104 OPCODE(INLINED_CALL,    BADOP,    BADOP,    BADOP, 0, OPF_NONE)
 105 OPCODE(NOP,             BADOP,    BADOP,    BADOP, 0, OPF_NONE)
 106 OPCODE(DEATHNOTE,       BADOP,    BADOP,    BADOP, 0, OPF_NONE)
 107 OPCODE(ASM,             BADOP,    BADOP,    BADOP, 0, OPF_NONE)
 108 
 109 /* Sparse tagging (line numbers, context, whatever) */
 110 OPCODE(CONTEXT,         BADOP,    BADOP,    BADOP, 0, OPF_NONE)
 111 OPCODE(RANGE,           BADOP,    BADOP,    BADOP, 3, OPF_NONE)
 112 
 113 /* Needed to translate SSA back to normal form */
 114 OPCODE(COPY,            BADOP,    BADOP,    BADOP, 1, OPF_TARGET)