XCache is a fast, stable PHP opcode cacher that has been proven and is now running on production servers under high load. https://xcache.lighttpd.net/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

261 lines
19 KiB

  1. static const xc_opcode_spec_t xc_opcode_spec[] = {
  2. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 0 NOP */
  3. OPSPEC( UNUSED, STD, STD, TMP) /* 1 ADD */
  4. OPSPEC( UNUSED, STD, STD, TMP) /* 2 SUB */
  5. OPSPEC( UNUSED, STD, STD, TMP) /* 3 MUL */
  6. OPSPEC( UNUSED, STD, STD, TMP) /* 4 DIV */
  7. OPSPEC( UNUSED, STD, STD, TMP) /* 5 MOD */
  8. OPSPEC( UNUSED, STD, STD, TMP) /* 6 SL */
  9. OPSPEC( UNUSED, STD, STD, TMP) /* 7 SR */
  10. OPSPEC( UNUSED, STD, STD, TMP) /* 8 CONCAT */
  11. OPSPEC( UNUSED, STD, STD, TMP) /* 9 BW_OR */
  12. OPSPEC( UNUSED, STD, STD, TMP) /* 10 BW_AND */
  13. OPSPEC( UNUSED, STD, STD, TMP) /* 11 BW_XOR */
  14. OPSPEC( UNUSED, STD, UNUSED, TMP) /* 12 BW_NOT */
  15. OPSPEC( UNUSED, STD, STD, TMP) /* 13 BOOL_NOT */
  16. OPSPEC( UNUSED, STD, STD, TMP) /* 14 BOOL_XOR */
  17. OPSPEC( UNUSED, STD, STD, TMP) /* 15 IS_IDENTICAL */
  18. OPSPEC( UNUSED, STD, STD, TMP) /* 16 IS_NOT_IDENTICAL */
  19. OPSPEC( UNUSED, STD, STD, TMP) /* 17 IS_EQUAL */
  20. OPSPEC( UNUSED, STD, STD, TMP) /* 18 IS_NOT_EQUAL */
  21. OPSPEC( UNUSED, STD, STD, TMP) /* 19 IS_SMALLER */
  22. OPSPEC( UNUSED, STD, STD, TMP) /* 20 IS_SMALLER_OR_EQUAL */
  23. OPSPEC( CAST, STD, UNUSED, TMP) /* 21 CAST */
  24. OPSPEC( UNUSED, STD, UNUSED, TMP) /* 22 QM_ASSIGN */
  25. #ifdef ZEND_ENGINE_2
  26. OPSPEC( ASSIGN, STD, STD, VAR) /* 23 ASSIGN_ADD */
  27. OPSPEC( ASSIGN, STD, STD, VAR) /* 24 ASSIGN_SUB */
  28. OPSPEC( ASSIGN, STD, STD, VAR) /* 25 ASSIGN_MUL */
  29. OPSPEC( ASSIGN, STD, STD, VAR) /* 26 ASSIGN_DIV */
  30. OPSPEC( ASSIGN, STD, STD, VAR) /* 27 ASSIGN_MOD */
  31. OPSPEC( ASSIGN, STD, STD, VAR) /* 28 ASSIGN_SL */
  32. OPSPEC( ASSIGN, STD, STD, VAR) /* 29 ASSIGN_SR */
  33. OPSPEC( ASSIGN, STD, STD, VAR) /* 30 ASSIGN_CONCAT */
  34. OPSPEC( ASSIGN, STD, STD, VAR) /* 31 ASSIGN_BW_OR */
  35. OPSPEC( ASSIGN, STD, STD, VAR) /* 32 ASSIGN_BW_AND */
  36. OPSPEC( ASSIGN, STD, STD, VAR) /* 33 ASSIGN_BW_XOR */
  37. #else
  38. OPSPEC( UNUSED, VAR, STD, VAR)
  39. OPSPEC( UNUSED, VAR, STD, VAR)
  40. OPSPEC( UNUSED, VAR, STD, VAR)
  41. OPSPEC( UNUSED, VAR, STD, VAR)
  42. OPSPEC( UNUSED, VAR, STD, VAR)
  43. OPSPEC( UNUSED, VAR, STD, VAR)
  44. OPSPEC( UNUSED, VAR, STD, VAR)
  45. OPSPEC( UNUSED, VAR, STD, VAR)
  46. OPSPEC( UNUSED, VAR, STD, VAR)
  47. OPSPEC( UNUSED, VAR, STD, VAR)
  48. OPSPEC( UNUSED, VAR, STD, VAR)
  49. #endif
  50. OPSPEC( UNUSED, VAR, UNUSED, VAR) /* 34 PRE_INC */
  51. OPSPEC( UNUSED, VAR, UNUSED, VAR) /* 35 PRE_DEC */
  52. OPSPEC( UNUSED, VAR, UNUSED, TMP) /* 36 POST_INC */
  53. OPSPEC( UNUSED, VAR, UNUSED, TMP) /* 37 POST_DEC */
  54. OPSPEC( UNUSED, VAR, STD, VAR) /* 38 ASSIGN */
  55. OPSPEC( UNUSED, VAR, VAR, VAR) /* 39 ASSIGN_REF */
  56. OPSPEC( UNUSED, STD, UNUSED, UNUSED) /* 40 ECHO */
  57. OPSPEC( UNUSED, STD, UNUSED, TMP) /* 41 PRINT */
  58. #ifdef ZEND_ENGINE_2
  59. OPSPEC( UNUSED, JMPADDR, UNUSED, UNUSED) /* 42 JMP */
  60. OPSPEC( UNUSED, STD, JMPADDR, UNUSED) /* 43 JMPZ */
  61. OPSPEC( UNUSED, STD, JMPADDR, UNUSED) /* 44 JMPNZ */
  62. #else
  63. OPSPEC( UNUSED, OPLINE, UNUSED, UNUSED)
  64. OPSPEC( UNUSED, STD, OPLINE, UNUSED)
  65. OPSPEC( UNUSED, STD, OPLINE, UNUSED)
  66. #endif
  67. OPSPEC( OPLINE, STD, OPLINE, UNUSED) /* 45 JMPZNZ */
  68. #ifdef ZEND_ENGINE_2
  69. OPSPEC( UNUSED, STD, JMPADDR, TMP) /* 46 JMPZ_EX */
  70. OPSPEC( UNUSED, STD, JMPADDR, TMP) /* 47 JMPNZ_EX */
  71. #else
  72. OPSPEC( UNUSED, STD, OPLINE, TMP)
  73. OPSPEC( UNUSED, STD, OPLINE, TMP)
  74. #endif
  75. OPSPEC( UNUSED, STD, STD, TMP) /* 48 CASE */
  76. OPSPEC( BIT, STD, UNUSED, UNUSED) /* 49 SWITCH_FREE */
  77. OPSPEC( UNUSED, BRK, STD, UNUSED) /* 50 BRK */
  78. OPSPEC( UNUSED, CONT, STD, UNUSED) /* 51 CONT */
  79. OPSPEC( UNUSED, STD, UNUSED, TMP) /* 52 BOOL */
  80. OPSPEC( UNUSED, UNUSED, UNUSED, TMP) /* 53 INIT_STRING */
  81. OPSPEC( UNUSED, STD, STD, TMP) /* 54 ADD_CHAR */
  82. OPSPEC( UNUSED, STD, STD, TMP) /* 55 ADD_STRING */
  83. OPSPEC( UNUSED, STD, STD, TMP) /* 56 ADD_VAR */
  84. OPSPEC( UNUSED, UNUSED, UNUSED, TMP) /* 57 BEGIN_SILENCE */
  85. OPSPEC( UNUSED, TMP, UNUSED, UNUSED) /* 58 END_SILENCE */
  86. OPSPEC(INIT_FCALL, STD, STD, UNUSED) /* 59 INIT_FCALL_BY_NAME */
  87. #ifdef ZEND_ENGINE_2
  88. OPSPEC( FCALL, STD, OPLINE, VAR) /* 60 DO_FCALL */
  89. OPSPEC( FCALL, STD, OPLINE, VAR) /* 61 DO_FCALL_BY_NAME */
  90. #else
  91. OPSPEC( FCALL, STD, UNUSED, VAR)
  92. OPSPEC( FCALL, STD, UNUSED, VAR)
  93. #endif
  94. OPSPEC( UNUSED, STD, UNUSED, UNUSED) /* 62 RETURN */
  95. OPSPEC( UNUSED, ARG, UNUSED, VAR) /* 63 RECV */
  96. OPSPEC( UNUSED, ARG, STD, VAR) /* 64 RECV_INIT */
  97. OPSPEC( SEND, STD, ARG, UNUSED) /* 65 SEND_VAL */
  98. OPSPEC( SEND, VAR, ARG, UNUSED) /* 66 SEND_VAR */
  99. OPSPEC( SEND, VAR, ARG, UNUSED) /* 67 SEND_REF */
  100. #ifdef ZEND_ENGINE_2
  101. OPSPEC( UNUSED, CLASS, UNUSED, VAR) /* 68 NEW */
  102. #else
  103. OPSPEC( UNUSED, STD, UNUSED, VAR)
  104. #endif
  105. #ifdef ZEND_ENGINE_2_3
  106. OPSPEC( STD, STD, STD, UNUSED) /* 69 INIT_NS_FCALL_BY_NAME */
  107. #else
  108. OPSPEC( UNUSED, STD, OPLINE, UNUSED) /* 69 JMP_NO_CTOR */
  109. #endif
  110. OPSPEC( UNUSED, TMP, UNUSED, UNUSED) /* 70 FREE */
  111. OPSPEC( BIT, STD, STD, TMP) /* 71 INIT_ARRAY */
  112. OPSPEC( BIT, STD, STD, TMP) /* 72 ADD_ARRAY_ELEMENT */
  113. OPSPEC( UNUSED, STD, INCLUDE, VAR) /* 73 INCLUDE_OR_EVAL */
  114. #ifdef ZEND_ENGINE_2_1
  115. /* php 5.1 and up */
  116. OPSPEC( UNUSED, STD, FETCH, UNUSED) /* 74 UNSET_VAR */
  117. OPSPEC( STD, STD, STD, UNUSED) /* 75 UNSET_DIM */
  118. OPSPEC( STD, STD, STD, UNUSED) /* 76 UNSET_OBJ */
  119. OPSPEC( BIT, STD, OPLINE, VAR) /* 77 FE_RESET */
  120. #else
  121. /* <= php 5.0 */
  122. /* though there is no ISSET_ISEMPTY in php 5.0 it's better to leave it here i guess */
  123. OPSPEC( UNUSED, STD, UNUSED, UNUSED)
  124. OPSPEC( UNUSED, VAR, STD, UNUSED)
  125. OPSPEC( UNUSED, VAR, ISSET, TMP)
  126. OPSPEC( BIT, STD, UNUSED, VAR)
  127. #endif
  128. OPSPEC( FE, STD, OPLINE, TMP) /* 78 FE_FETCH */
  129. OPSPEC( UNUSED, STD, UNUSED, UNUSED) /* 79 EXIT */
  130. OPSPEC( UNUSED, STD, FETCH, VAR) /* 80 FETCH_R */
  131. OPSPEC( FETCH, VAR, STD, VAR) /* 81 FETCH_DIM_R */
  132. OPSPEC( UNUSED, VAR_2, STD, VAR) /* 82 FETCH_OBJ_R */
  133. OPSPEC( UNUSED, STD, FETCH, VAR) /* 83 FETCH_W */
  134. OPSPEC( UNUSED, VAR, STD, VAR) /* 84 FETCH_DIM_W */
  135. OPSPEC( UNUSED, VAR_2, STD, VAR) /* 85 FETCH_OBJ_W */
  136. OPSPEC( UNUSED, STD, FETCH, VAR) /* 86 FETCH_RW */
  137. OPSPEC( UNUSED, VAR, STD, VAR) /* 87 FETCH_DIM_RW */
  138. OPSPEC( UNUSED, VAR_2, STD, VAR) /* 88 FETCH_OBJ_RW */
  139. OPSPEC( UNUSED, STD, FETCH, VAR) /* 89 FETCH_IS */
  140. OPSPEC( UNUSED, VAR, STD, VAR) /* 90 FETCH_DIM_IS */
  141. OPSPEC( UNUSED, VAR_2, STD, VAR) /* 91 FETCH_OBJ_IS */
  142. OPSPEC( ARG, STD, FETCH, VAR) /* 92 FETCH_FUNC_ARG */
  143. OPSPEC( ARG, VAR, STD, VAR) /* 93 FETCH_DIM_FUNC_ARG */
  144. OPSPEC( ARG, VAR_2, STD, VAR) /* 94 FETCH_OBJ_FUNC_ARG */
  145. OPSPEC( UNUSED, STD, FETCH, VAR) /* 95 FETCH_UNSET */
  146. OPSPEC( UNUSED, VAR, STD, VAR) /* 96 FETCH_DIM_UNSET */
  147. OPSPEC( UNUSED, VAR_2, STD, VAR) /* 97 FETCH_OBJ_UNSET */
  148. OPSPEC( UNUSED, STD, STD, VAR) /* 98 FETCH_DIM_TMP_VAR */
  149. #ifdef ZEND_ENGINE_2_3
  150. OPSPEC( UNUSED, VAR_2, STD, TMP) /* 99 FETCH_CONSTANT */
  151. #elif defined(ZEND_ENGINE_2)
  152. OPSPEC( UNUSED, UCLASS, STD, TMP) /* 99 FETCH_CONSTANT */
  153. #else
  154. OPSPEC( UNUSED, STD, UNUSED, TMP) /* 99 FETCH_CONSTANT */
  155. #endif
  156. #ifdef ZEND_ENGINE_2_3
  157. OPSPEC( STD, JMPADDR, STD, UNUSED) /* 100 GOTO */
  158. #else
  159. OPSPEC( DECLARE, STD, STD, UNUSED) /* 100 DECLARE_FUNCTION_OR_CLASS */
  160. #endif
  161. OPSPEC( STD, STD, STD, STD) /* 101 EXT_STMT */
  162. OPSPEC( STD, STD, STD, STD) /* 102 EXT_FCALL_BEGIN */
  163. OPSPEC( STD, STD, STD, STD) /* 103 EXT_FCALL_END */
  164. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 104 EXT_NOP */
  165. OPSPEC( UNUSED, STD, UNUSED, UNUSED) /* 105 TICKS */
  166. OPSPEC(SEND_NOREF, VAR, ARG, UNUSED) /* 106 SEND_VAR_NO_REF */
  167. #ifdef ZEND_ENGINE_2
  168. OPSPEC( OPLINE, CLASS, STD, UNUSED) /* 107 CATCH */
  169. OPSPEC( UNUSED, STD, OPLINE, UNUSED) /* 108 THROW */
  170. OPSPEC( FCLASS, STD, STD, CLASS) /* 109 FETCH_CLASS */
  171. OPSPEC( UNUSED, STD, UNUSED, VAR) /* 110 CLONE */
  172. #ifdef ZEND_ENGINE_2_4
  173. OPSPEC( UNUSED, STD, UNUSED, UNUSED) /* 111 RETURN_BY_REF */
  174. #else
  175. OPSPEC( UNUSED, STD, UNUSED, UNUSED) /* 111 INIT_CTOR_CALL */
  176. #endif
  177. OPSPEC( UNUSED, STD, STD, VAR) /* 112 INIT_METHOD_CALL */
  178. # ifdef ZEND_ENGINE_2_3
  179. OPSPEC( UNUSED, STD, STD, UNUSED) /* 113 INIT_STATIC_METHOD_CALL */
  180. # else
  181. OPSPEC( UNUSED, UCLASS, STD, UNUSED) /* 113 INIT_STATIC_METHOD_CALL */
  182. # endif
  183. OPSPEC( ISSET, STD, FETCH, TMP) /* 114 ISSET_ISEMPTY_VAR */
  184. OPSPEC( ISSET, STD, STD, TMP) /* 115 ISSET_ISEMPTY_DIM_OBJ */
  185. OPSPEC( UNUSED, CLASS, STD, UNUSED) /* 116 IMPORT_FUNCTION */
  186. OPSPEC( UNUSED, CLASS, STD, UNUSED) /* 117 IMPORT_CLASS */
  187. OPSPEC( UNUSED, CLASS, STD, UNUSED) /* 118 IMPORT_CONST */
  188. OPSPEC( STD, STD, STD, STD) /* 119 OP_119 */
  189. OPSPEC( STD, STD, STD, STD) /* 120 OP_120 */
  190. OPSPEC( UNUSED, STD, STD, VAR) /* 121 ASSIGN_ADD_OBJ */
  191. OPSPEC( UNUSED, STD, STD, VAR) /* 122 ASSIGN_SUB_OBJ */
  192. OPSPEC( UNUSED, STD, STD, VAR) /* 123 ASSIGN_MUL_OBJ */
  193. OPSPEC( UNUSED, STD, STD, VAR) /* 124 ASSIGN_DIV_OBJ */
  194. OPSPEC( UNUSED, STD, STD, VAR) /* 125 ASSIGN_MOD_OBJ */
  195. OPSPEC( UNUSED, STD, STD, VAR) /* 126 ASSIGN_SL_OBJ */
  196. OPSPEC( UNUSED, STD, STD, VAR) /* 127 ASSIGN_SR_OBJ */
  197. OPSPEC( UNUSED, STD, STD, VAR) /* 128 ASSIGN_CONCAT_OBJ */
  198. OPSPEC( UNUSED, STD, STD, VAR) /* 129 ASSIGN_BW_OR_OBJ */
  199. OPSPEC( UNUSED, STD, STD, VAR) /* 130 ASSIGN_BW_AND_OBJ */
  200. OPSPEC( UNUSED, STD, STD, VAR) /* 131 ASSIGN_BW_XOR_OBJ */
  201. OPSPEC( UNUSED, STD, STD, VAR) /* 132 PRE_INC_OBJ */
  202. OPSPEC( UNUSED, STD, STD, VAR) /* 133 PRE_DEC_OBJ */
  203. OPSPEC( UNUSED, STD, STD, TMP) /* 134 POST_INC_OBJ */
  204. OPSPEC( UNUSED, STD, STD, TMP) /* 135 POST_DEC_OBJ */
  205. OPSPEC( UNUSED, STD, STD, VAR) /* 136 ASSIGN_OBJ */
  206. OPSPEC( UNUSED, STD, STD, STD) /* 137 OP_DATA */
  207. OPSPEC( UNUSED, STD, CLASS, TMP) /* 138 INSTANCEOF */
  208. OPSPEC( UNUSED, STD, STD, CLASS) /* 139 DECLARE_CLASS */
  209. OPSPEC( CLASS, STD, STD, CLASS) /* 140 DECLARE_INHERITED_CLASS */
  210. OPSPEC( UNUSED, STD, STD, UNUSED) /* 141 DECLARE_FUNCTION */
  211. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 142 RAISE_ABSTRACT_ERROR */
  212. #ifdef ZEND_ENGINE_2_3
  213. OPSPEC( DECLARE, STD, STD, UNUSED) /* 143 DECLARE_CONST */
  214. #else
  215. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 143 UNDEF-143 */
  216. #endif
  217. #ifdef ZEND_ENGINE_2_3
  218. OPSPEC( IFACE, CLASS, STD, UNUSED) /* 144 ADD_INTERFACE */
  219. #else
  220. OPSPEC( IFACE, CLASS, CLASS, UNUSED) /* 144 ADD_INTERFACE */
  221. #endif
  222. #ifdef ZEND_ENGINE_2_3
  223. OPSPEC( CLASS, STD, STD, OPLINE) /* 145 DECLARE_INHERITED_CLASS_DELAYED */
  224. #else
  225. OPSPEC( UNUSED, CLASS, STD, UNUSED) /* 145 VERIFY_INSTANCEOF */
  226. #endif
  227. OPSPEC( UNUSED, CLASS, UNUSED, UNUSED) /* 146 VERIFY_ABSTRACT_CLASS */
  228. OPSPEC( UNUSED, STD, STD, VAR) /* 147 ASSIGN_DIM */
  229. OPSPEC( ISSET, STD, STD, TMP) /* 148 ISSET_ISEMPTY_PROP_OBJ */
  230. OPSPEC( STD, UNUSED, UNUSED, STD) /* 149 HANDLE_EXCEPTION */
  231. OPSPEC( STD, UNUSED, UNUSED, STD) /* 150 USER_OPCODE */
  232. # ifdef ZEND_ENGINE_2_3
  233. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 151 UNDEF */
  234. OPSPEC( UNUSED, STD, JMPADDR, TMP) /* 152 JMP_SET */
  235. OPSPEC( UNUSED, STD, STD, TMP) /* 153 DECLARE_LAMBDA_FUNCTION */
  236. # ifdef ZEND_ENGINE_2_4
  237. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 154 ADD_TRAIT */
  238. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 155 BIND_TRAITS */
  239. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 156 SEPARATE */
  240. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 157 QM_ASSIGN_VAR */
  241. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 158 JMP_SET_VAR */
  242. # endif
  243. # else
  244. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 151 UNDEF */
  245. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 152 UNDEF */
  246. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 153 UNDEF */
  247. # endif
  248. #else
  249. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 107 UNDEF */
  250. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 108 UNDEF */
  251. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 109 UNDEF */
  252. OPSPEC( FCALL, STD, OPLINE, VAR) /* 61 DO_FCALL_BY_FUNC */
  253. OPSPEC(INIT_FCALL, STD, STD, UNUSED) /* 111 INIT_FCALL_BY_FUNC */
  254. OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 112 UNDEF */
  255. #endif
  256. };