lopcodes.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /*
  2. ** $Id: lopcodes.c,v 1.81 2018/04/04 14:23:41 roberto Exp roberto $
  3. ** Opcodes for Lua virtual machine
  4. ** See Copyright Notice in lua.h
  5. */
  6. #define lopcodes_c
  7. #define LUA_CORE
  8. #include "lprefix.h"
  9. #include <stddef.h>
  10. #include "lopcodes.h"
  11. /* ORDER OP */
  12. #if defined(LUAI_DEFOPNAMES)
  13. LUAI_DDEF const char *const luaP_opnames[NUM_OPCODES+1] = {
  14. "MOVE",
  15. "LOADI",
  16. "LOADF",
  17. "LOADK",
  18. "LOADKX",
  19. "LOADBOOL",
  20. "LOADNIL",
  21. "GETUPVAL",
  22. "SETUPVAL",
  23. "GETTABUP",
  24. "GETTABLE",
  25. "GETI",
  26. "GETFIELD",
  27. "SETTABUP",
  28. "SETTABLE",
  29. "SETI",
  30. "SETFIELD",
  31. "NEWTABLE",
  32. "SELF",
  33. "ADDI",
  34. "SUBI",
  35. "MULI",
  36. "MODI",
  37. "POWI",
  38. "DIVI",
  39. "IDIVI",
  40. "BANDK",
  41. "BORK",
  42. "BXORK",
  43. "SHRI",
  44. "SHLI",
  45. "ADD",
  46. "SUB",
  47. "MUL",
  48. "MOD",
  49. "POW",
  50. "DIV",
  51. "IDIV",
  52. "BAND",
  53. "BOR",
  54. "BXOR",
  55. "SHL",
  56. "SHR",
  57. "UNM",
  58. "BNOT",
  59. "NOT",
  60. "LEN",
  61. "CONCAT",
  62. "CLOSE",
  63. "JMP",
  64. "EQ",
  65. "LT",
  66. "LE",
  67. "EQK",
  68. "EQI",
  69. "LTI",
  70. "LEI",
  71. "GTI",
  72. "GEI",
  73. "TEST",
  74. "TESTSET",
  75. "CALL",
  76. "TAILCALL",
  77. "RETURN",
  78. "RETURN0",
  79. "RETURN1",
  80. "FORLOOP1",
  81. "FORPREP1",
  82. "FORLOOP",
  83. "FORPREP",
  84. "TFORCALL",
  85. "TFORLOOP",
  86. "SETLIST",
  87. "CLOSURE",
  88. "VARARG",
  89. "PREPVARARG",
  90. "EXTRAARG",
  91. NULL
  92. };
  93. #endif
  94. LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = {
  95. /* OT IT T A mode opcode */
  96. opmode(0, 0, 0, 1, iABC) /* OP_MOVE */
  97. ,opmode(0, 0, 0, 1, iAsBx) /* OP_LOADI */
  98. ,opmode(0, 0, 0, 1, iAsBx) /* OP_LOADF */
  99. ,opmode(0, 0, 0, 1, iABx) /* OP_LOADK */
  100. ,opmode(0, 0, 0, 1, iABx) /* OP_LOADKX */
  101. ,opmode(0, 0, 0, 1, iABC) /* OP_LOADBOOL */
  102. ,opmode(0, 0, 0, 1, iABC) /* OP_LOADNIL */
  103. ,opmode(0, 0, 0, 1, iABC) /* OP_GETUPVAL */
  104. ,opmode(0, 0, 0, 0, iABC) /* OP_SETUPVAL */
  105. ,opmode(0, 0, 0, 1, iABC) /* OP_GETTABUP */
  106. ,opmode(0, 0, 0, 1, iABC) /* OP_GETTABLE */
  107. ,opmode(0, 0, 0, 1, iABC) /* OP_GETI */
  108. ,opmode(0, 0, 0, 1, iABC) /* OP_GETFIELD */
  109. ,opmode(0, 0, 0, 0, iABC) /* OP_SETTABUP */
  110. ,opmode(0, 0, 0, 0, iABC) /* OP_SETTABLE */
  111. ,opmode(0, 0, 0, 0, iABC) /* OP_SETI */
  112. ,opmode(0, 0, 0, 0, iABC) /* OP_SETFIELD */
  113. ,opmode(0, 0, 0, 1, iABC) /* OP_NEWTABLE */
  114. ,opmode(0, 0, 0, 1, iABC) /* OP_SELF */
  115. ,opmode(0, 0, 0, 1, iABC) /* OP_ADDI */
  116. ,opmode(0, 0, 0, 1, iABC) /* OP_SUBI */
  117. ,opmode(0, 0, 0, 1, iABC) /* OP_MULI */
  118. ,opmode(0, 0, 0, 1, iABC) /* OP_MODI */
  119. ,opmode(0, 0, 0, 1, iABC) /* OP_POWI */
  120. ,opmode(0, 0, 0, 1, iABC) /* OP_DIVI */
  121. ,opmode(0, 0, 0, 1, iABC) /* OP_IDIVI */
  122. ,opmode(0, 0, 0, 1, iABC) /* OP_BANDK */
  123. ,opmode(0, 0, 0, 1, iABC) /* OP_BORK */
  124. ,opmode(0, 0, 0, 1, iABC) /* OP_BXORK */
  125. ,opmode(0, 0, 0, 1, iABC) /* OP_SHRI */
  126. ,opmode(0, 0, 0, 1, iABC) /* OP_SHLI */
  127. ,opmode(0, 0, 0, 1, iABC) /* OP_ADD */
  128. ,opmode(0, 0, 0, 1, iABC) /* OP_SUB */
  129. ,opmode(0, 0, 0, 1, iABC) /* OP_MUL */
  130. ,opmode(0, 0, 0, 1, iABC) /* OP_MOD */
  131. ,opmode(0, 0, 0, 1, iABC) /* OP_POW */
  132. ,opmode(0, 0, 0, 1, iABC) /* OP_DIV */
  133. ,opmode(0, 0, 0, 1, iABC) /* OP_IDIV */
  134. ,opmode(0, 0, 0, 1, iABC) /* OP_BAND */
  135. ,opmode(0, 0, 0, 1, iABC) /* OP_BOR */
  136. ,opmode(0, 0, 0, 1, iABC) /* OP_BXOR */
  137. ,opmode(0, 0, 0, 1, iABC) /* OP_SHL */
  138. ,opmode(0, 0, 0, 1, iABC) /* OP_SHR */
  139. ,opmode(0, 0, 0, 1, iABC) /* OP_UNM */
  140. ,opmode(0, 0, 0, 1, iABC) /* OP_BNOT */
  141. ,opmode(0, 0, 0, 1, iABC) /* OP_NOT */
  142. ,opmode(0, 0, 0, 1, iABC) /* OP_LEN */
  143. ,opmode(0, 0, 0, 1, iABC) /* OP_CONCAT */
  144. ,opmode(0, 0, 0, 0, iABC) /* OP_CLOSE */
  145. ,opmode(0, 0, 0, 0, isJ) /* OP_JMP */
  146. ,opmode(0, 0, 1, 0, iABC) /* OP_EQ */
  147. ,opmode(0, 0, 1, 0, iABC) /* OP_LT */
  148. ,opmode(0, 0, 1, 0, iABC) /* OP_LE */
  149. ,opmode(0, 0, 1, 0, iABC) /* OP_EQK */
  150. ,opmode(0, 0, 1, 0, iABC) /* OP_EQI */
  151. ,opmode(0, 0, 1, 0, iABC) /* OP_LTI */
  152. ,opmode(0, 0, 1, 0, iABC) /* OP_LEI */
  153. ,opmode(0, 0, 1, 0, iABC) /* OP_GTI */
  154. ,opmode(0, 0, 1, 0, iABC) /* OP_GEI */
  155. ,opmode(0, 0, 1, 0, iABC) /* OP_TEST */
  156. ,opmode(0, 0, 1, 1, iABC) /* OP_TESTSET */
  157. ,opmode(1, 1, 0, 1, iABC) /* OP_CALL */
  158. ,opmode(1, 1, 0, 1, iABC) /* OP_TAILCALL */
  159. ,opmode(0, 1, 0, 0, iABC) /* OP_RETURN */
  160. ,opmode(0, 0, 0, 0, iABC) /* OP_RETURN0 */
  161. ,opmode(0, 0, 0, 0, iABC) /* OP_RETURN1 */
  162. ,opmode(0, 0, 0, 1, iABx) /* OP_FORLOOP1 */
  163. ,opmode(0, 0, 0, 1, iABx) /* OP_FORPREP1 */
  164. ,opmode(0, 0, 0, 1, iABx) /* OP_FORLOOP */
  165. ,opmode(0, 0, 0, 1, iABx) /* OP_FORPREP */
  166. ,opmode(0, 0, 0, 0, iABC) /* OP_TFORCALL */
  167. ,opmode(0, 0, 0, 1, iABx) /* OP_TFORLOOP */
  168. ,opmode(0, 1, 0, 0, iABC) /* OP_SETLIST */
  169. ,opmode(0, 0, 0, 1, iABx) /* OP_CLOSURE */
  170. ,opmode(1, 0, 0, 1, iABC) /* OP_VARARG */
  171. ,opmode(0, 0, 0, 1, iABC) /* OP_PREPVARARG */
  172. ,opmode(0, 0, 0, 0, iAx) /* OP_EXTRAARG */
  173. };