opcode.inc 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. // Copyright 2021 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. // opcode name, return type, arg1 type, arg2 type, arg3 type, arg4 type, ...
  5. OPCODE(Void, Void, )
  6. OPCODE(Identity, Opaque, Opaque, )
  7. OPCODE(Phi, Opaque, /*todo*/ )
  8. // Control flow
  9. OPCODE(Branch, Void, Label, )
  10. OPCODE(BranchConditional, Void, U1, Label, Label, )
  11. OPCODE(Exit, Void, )
  12. OPCODE(Return, Void, )
  13. OPCODE(Unreachable, Void, )
  14. // Context getters/setters
  15. OPCODE(GetRegister, U32, Reg, )
  16. OPCODE(SetRegister, Void, Reg, U32, )
  17. OPCODE(GetPred, U1, Pred, )
  18. OPCODE(SetPred, Void, Pred, U1, )
  19. OPCODE(GetCbuf, U32, U32, U32, )
  20. OPCODE(GetAttribute, U32, Attribute, )
  21. OPCODE(SetAttribute, U32, Attribute, )
  22. OPCODE(GetAttributeIndexed, U32, U32, )
  23. OPCODE(SetAttributeIndexed, U32, U32, )
  24. OPCODE(GetZSCORaw, U32, )
  25. OPCODE(SetZSCORaw, Void, U32, )
  26. OPCODE(SetZSCO, Void, ZSCO, )
  27. OPCODE(GetZFlag, U1, Void, )
  28. OPCODE(GetSFlag, U1, Void, )
  29. OPCODE(GetCFlag, U1, Void, )
  30. OPCODE(GetOFlag, U1, Void, )
  31. OPCODE(SetZFlag, Void, U1, )
  32. OPCODE(SetSFlag, Void, U1, )
  33. OPCODE(SetCFlag, Void, U1, )
  34. OPCODE(SetOFlag, Void, U1, )
  35. // Undefined
  36. OPCODE(Undef1, U1, )
  37. OPCODE(Undef8, U8, )
  38. OPCODE(Undef16, U16, )
  39. OPCODE(Undef32, U32, )
  40. OPCODE(Undef64, U64, )
  41. // Memory operations
  42. OPCODE(WriteGlobalU8, Void, U64, U32, )
  43. OPCODE(WriteGlobalS8, Void, U64, U32, )
  44. OPCODE(WriteGlobalU16, Void, U64, U32, )
  45. OPCODE(WriteGlobalS16, Void, U64, U32, )
  46. OPCODE(WriteGlobal32, Void, U64, U32, )
  47. OPCODE(WriteGlobal64, Void, U64, Opaque, )
  48. OPCODE(WriteGlobal128, Void, U64, Opaque, )
  49. // Vector utility
  50. OPCODE(CompositeConstruct2, Opaque, Opaque, Opaque, )
  51. OPCODE(CompositeConstruct3, Opaque, Opaque, Opaque, Opaque, )
  52. OPCODE(CompositeConstruct4, Opaque, Opaque, Opaque, Opaque, Opaque, )
  53. OPCODE(CompositeExtract, Opaque, Opaque, U32, )
  54. // Bitwise conversions
  55. OPCODE(PackUint2x32, U64, Opaque, )
  56. OPCODE(UnpackUint2x32, Opaque, U64, )
  57. OPCODE(PackFloat2x16, U32, Opaque, )
  58. OPCODE(UnpackFloat2x16, Opaque, U32, )
  59. OPCODE(PackDouble2x32, U64, Opaque, )
  60. OPCODE(UnpackDouble2x32, Opaque, U64, )
  61. // Pseudo-operation, handled specially at final emit
  62. OPCODE(GetZeroFromOp, U1, Opaque, )
  63. OPCODE(GetSignFromOp, U1, Opaque, )
  64. OPCODE(GetCarryFromOp, U1, Opaque, )
  65. OPCODE(GetOverflowFromOp, U1, Opaque, )
  66. OPCODE(GetZSCOFromOp, ZSCO, Opaque, )
  67. // Floating-point operations
  68. OPCODE(FPAbs16, U16, U16 )
  69. OPCODE(FPAbs32, U32, U32 )
  70. OPCODE(FPAbs64, U64, U64 )
  71. OPCODE(FPAdd16, U16, U16, U16 )
  72. OPCODE(FPAdd32, U32, U32, U32 )
  73. OPCODE(FPAdd64, U64, U64, U64 )
  74. OPCODE(FPFma16, U16, U16, U16 )
  75. OPCODE(FPFma32, U32, U32, U32 )
  76. OPCODE(FPFma64, U64, U64, U64 )
  77. OPCODE(FPMax32, U32, U32, U32 )
  78. OPCODE(FPMax64, U64, U64, U64 )
  79. OPCODE(FPMin32, U32, U32, U32 )
  80. OPCODE(FPMin64, U64, U64, U64 )
  81. OPCODE(FPMul16, U16, U16, U16 )
  82. OPCODE(FPMul32, U32, U32, U32 )
  83. OPCODE(FPMul64, U64, U64, U64 )
  84. OPCODE(FPNeg16, U16, U16 )
  85. OPCODE(FPNeg32, U32, U32 )
  86. OPCODE(FPNeg64, U64, U64 )
  87. OPCODE(FPRecip32, U32, U32 )
  88. OPCODE(FPRecip64, U64, U64 )
  89. OPCODE(FPRecipSqrt32, U32, U32 )
  90. OPCODE(FPRecipSqrt64, U64, U64 )
  91. OPCODE(FPSqrt, U32, U32 )
  92. OPCODE(FPSin, U32, U32 )
  93. OPCODE(FPSinNotReduced, U32, U32 )
  94. OPCODE(FPExp2, U32, U32 )
  95. OPCODE(FPExp2NotReduced, U32, U32 )
  96. OPCODE(FPCos, U32, U32 )
  97. OPCODE(FPCosNotReduced, U32, U32 )
  98. OPCODE(FPLog2, U32, U32 )
  99. OPCODE(FPSaturate16, U16, U16 )
  100. OPCODE(FPSaturate32, U32, U32 )
  101. OPCODE(FPSaturate64, U64, U64 )
  102. OPCODE(FPRoundEven16, U16, U16 )
  103. OPCODE(FPRoundEven32, U32, U32 )
  104. OPCODE(FPRoundEven64, U64, U64 )
  105. OPCODE(FPFloor16, U16, U16 )
  106. OPCODE(FPFloor32, U32, U32 )
  107. OPCODE(FPFloor64, U64, U64 )
  108. OPCODE(FPCeil16, U16, U16 )
  109. OPCODE(FPCeil32, U32, U32 )
  110. OPCODE(FPCeil64, U64, U64 )
  111. OPCODE(FPTrunc16, U16, U16 )
  112. OPCODE(FPTrunc32, U32, U32 )
  113. OPCODE(FPTrunc64, U64, U64 )
  114. // Logical operations
  115. OPCODE(LogicalOr, U1, U1, U1, )
  116. OPCODE(LogicalAnd, U1, U1, U1, )
  117. OPCODE(LogicalNot, U1, U1, )
  118. // Conversion operations
  119. OPCODE(ConvertS16F16, U32, U16, )
  120. OPCODE(ConvertS16F32, U32, U32, )
  121. OPCODE(ConvertS16F64, U32, U64, )
  122. OPCODE(ConvertS32F16, U32, U16, )
  123. OPCODE(ConvertS32F32, U32, U32, )
  124. OPCODE(ConvertS32F64, U32, U64, )
  125. OPCODE(ConvertS64F16, U64, U16, )
  126. OPCODE(ConvertS64F32, U64, U32, )
  127. OPCODE(ConvertS64F64, U64, U64, )
  128. OPCODE(ConvertU16F16, U32, U16, )
  129. OPCODE(ConvertU16F32, U32, U32, )
  130. OPCODE(ConvertU16F64, U32, U64, )
  131. OPCODE(ConvertU32F16, U32, U16, )
  132. OPCODE(ConvertU32F32, U32, U32, )
  133. OPCODE(ConvertU32F64, U32, U64, )
  134. OPCODE(ConvertU64F16, U64, U16, )
  135. OPCODE(ConvertU64F32, U64, U32, )
  136. OPCODE(ConvertU64F64, U64, U64, )
  137. OPCODE(ConvertU64U32, U64, U32, )
  138. OPCODE(ConvertU32U64, U32, U64, )