opcode.def 5.8 KB

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