debase-ruby_core_source 0.10.2 → 0.10.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (339) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +34 -0
  3. data/README.md +6 -2
  4. data/Rakefile +6 -3
  5. data/debase-ruby_core_source.gemspec +2 -1
  6. data/lib/debase/ruby_core_source.rb +6 -5
  7. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/addr2line.h +0 -0
  8. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/build_assert/build_assert.h +0 -0
  9. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/check_type/check_type.h +0 -0
  10. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/container_of/container_of.h +0 -0
  11. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/list/list.h +0 -0
  12. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/str/str.h +0 -0
  13. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/constant.h +1 -0
  14. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/debug_counter.h +0 -0
  15. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/dln.h +0 -0
  16. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/encindex.h +2 -0
  17. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/eval_intern.h +0 -0
  18. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/gc.h +0 -0
  19. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/id.h +0 -0
  20. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/id_table.h +0 -0
  21. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/insns.inc +2 -2
  22. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/insns_info.inc +157 -157
  23. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/internal.h +5 -4
  24. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/iseq.h +2 -2
  25. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/known_errors.inc +0 -0
  26. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/method.h +0 -0
  27. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/node.h +0 -0
  28. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/node_name.inc +0 -0
  29. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/opt_sc.inc +0 -0
  30. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/optinsn.inc +0 -0
  31. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/optunifs.inc +0 -0
  32. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/parse.h +0 -0
  33. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/probes_helper.h +0 -0
  34. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/regenc.h +0 -0
  35. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/regint.h +0 -0
  36. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/regparse.h +0 -0
  37. data/lib/debase/ruby_core_source/ruby-2.5.1-p57/revision.h +1 -0
  38. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ruby_assert.h +0 -0
  39. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ruby_atomic.h +0 -0
  40. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/siphash.h +0 -0
  41. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/symbol.h +0 -0
  42. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/thread_pthread.h +0 -0
  43. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/thread_win32.h +0 -0
  44. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/timev.h +0 -0
  45. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/transcode_data.h +0 -0
  46. data/lib/debase/ruby_core_source/ruby-2.5.1-p57/version.h +73 -0
  47. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm.inc +13 -13
  48. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_call_iseq_optimized.inc +0 -0
  49. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_core.h +3 -4
  50. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/vm_debug.h +0 -0
  51. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_exec.h +0 -0
  52. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_insnhelper.h +0 -0
  53. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_opts.h +1 -2
  54. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vmtc.inc +2 -2
  55. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/addr2line.h +1 -1
  56. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/build_assert/build_assert.h +0 -0
  57. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/check_type/check_type.h +0 -0
  58. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/container_of/container_of.h +0 -0
  59. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/list/list.h +20 -5
  60. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/str/str.h +0 -0
  61. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/constant.h +1 -0
  62. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/debug_counter.h +283 -0
  63. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/dln.h +0 -0
  64. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/encindex.h +2 -0
  65. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/eval_intern.h +45 -53
  66. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/gc.h +2 -3
  67. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/hrtime.h +168 -0
  68. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/id.h +4 -2
  69. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/id_table.h +0 -0
  70. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/insns.inc +249 -0
  71. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/insns_info.inc +9374 -0
  72. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/internal.h +608 -100
  73. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/iseq.h +127 -91
  74. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/known_errors.inc +477 -432
  75. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/method.h +28 -15
  76. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/mjit.h +148 -0
  77. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/mjit_compile.inc +4224 -0
  78. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/node.h +449 -0
  79. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/node_name.inc +6 -18
  80. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/opt_sc.inc +109 -0
  81. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/optinsn.inc +128 -0
  82. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/optunifs.inc +43 -0
  83. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/parse.h +210 -0
  84. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/probes_helper.h +42 -0
  85. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/regenc.h +1 -1
  86. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/regint.h +0 -0
  87. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/regparse.h +1 -1
  88. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/revision.h +1 -0
  89. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ruby_assert.h +6 -0
  90. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ruby_atomic.h +14 -3
  91. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/siphash.h +1 -1
  92. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/symbol.h +1 -1
  93. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/thread_pthread.h +75 -0
  94. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/thread_win32.h +0 -0
  95. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/timev.h +53 -0
  96. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/transcode_data.h +0 -0
  97. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/transient_heap.h +60 -0
  98. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/version.h +7 -7
  99. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/vm.inc +4502 -0
  100. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/vm_call_iseq_optimized.inc +213 -0
  101. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/vm_core.h +385 -182
  102. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/vm_debug.h +0 -0
  103. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/vm_exec.h +33 -13
  104. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/vm_insnhelper.h +316 -0
  105. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/vm_opts.h +18 -5
  106. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/vmtc.inc +243 -0
  107. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/addr2line.h +21 -0
  108. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/build_assert/build_assert.h +40 -0
  109. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/check_type/check_type.h +63 -0
  110. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/container_of/container_of.h +142 -0
  111. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/list/list.h +788 -0
  112. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/str/str.h +16 -0
  113. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/constant.h +51 -0
  114. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/debug_counter.h +283 -0
  115. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/dln.h +51 -0
  116. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/encindex.h +69 -0
  117. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/eval_intern.h +333 -0
  118. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/gc.h +116 -0
  119. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/hrtime.h +168 -0
  120. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/id.h +252 -0
  121. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/id_table.h +31 -0
  122. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/insns.inc +249 -0
  123. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/insns_info.inc +9374 -0
  124. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/internal.h +2470 -0
  125. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/iseq.h +304 -0
  126. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/known_errors.inc +791 -0
  127. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/method.h +229 -0
  128. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/mjit.h +148 -0
  129. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/mjit_compile.inc +4226 -0
  130. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/node.h +449 -0
  131. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/node_name.inc +200 -0
  132. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/opt_sc.inc +109 -0
  133. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/optinsn.inc +128 -0
  134. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/optunifs.inc +43 -0
  135. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.5-p114}/parse.h +47 -31
  136. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/probes_helper.h +42 -0
  137. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/regenc.h +254 -0
  138. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/regint.h +938 -0
  139. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/regparse.h +370 -0
  140. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/revision.h +1 -0
  141. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ruby_assert.h +60 -0
  142. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ruby_atomic.h +244 -0
  143. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/siphash.h +48 -0
  144. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/symbol.h +112 -0
  145. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/thread_pthread.h +75 -0
  146. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/thread_win32.h +36 -0
  147. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/timev.h +53 -0
  148. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/transcode_data.h +139 -0
  149. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/transient_heap.h +60 -0
  150. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.5-p114}/version.h +7 -7
  151. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm.inc +4504 -0
  152. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_call_iseq_optimized.inc +213 -0
  153. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_core.h +1910 -0
  154. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_debug.h +37 -0
  155. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_exec.h +202 -0
  156. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_insnhelper.h +316 -0
  157. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_opts.h +70 -0
  158. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vmtc.inc +243 -0
  159. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/addr2line.h +21 -0
  160. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/builtin.h +78 -0
  161. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/build_assert/build_assert.h +40 -0
  162. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/check_type/check_type.h +63 -0
  163. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/container_of/container_of.h +142 -0
  164. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/list/list.h +788 -0
  165. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/str/str.h +16 -0
  166. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/constant.h +50 -0
  167. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/debug_counter.h +390 -0
  168. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/dln.h +51 -0
  169. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/encindex.h +69 -0
  170. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/eval_intern.h +312 -0
  171. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/gc.h +131 -0
  172. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/hrtime.h +168 -0
  173. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/id.h +290 -0
  174. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/id_table.h +34 -0
  175. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/insns.inc +253 -0
  176. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/insns_info.inc +9197 -0
  177. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/internal.h +2697 -0
  178. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/iseq.h +312 -0
  179. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/known_errors.inc +791 -0
  180. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/method.h +229 -0
  181. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/mjit.h +177 -0
  182. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/mjit_compile.inc +7779 -0
  183. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/node.h +476 -0
  184. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/node_name.inc +208 -0
  185. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/opt_sc.inc +109 -0
  186. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/optinsn.inc +128 -0
  187. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/optunifs.inc +43 -0
  188. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/parse.h +210 -0
  189. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/probes_helper.h +42 -0
  190. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/regenc.h +254 -0
  191. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/regint.h +938 -0
  192. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/regparse.h +370 -0
  193. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/revision.h +2 -0
  194. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ruby_assert.h +15 -0
  195. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ruby_atomic.h +244 -0
  196. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/siphash.h +48 -0
  197. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/symbol.h +119 -0
  198. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/thread_pthread.h +75 -0
  199. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/thread_win32.h +36 -0
  200. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/timev.h +56 -0
  201. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/transcode_data.h +139 -0
  202. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/transient_heap.h +62 -0
  203. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/variable.h +9 -0
  204. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/version.h +77 -0
  205. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm.inc +5466 -0
  206. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_call_iseq_optimized.inc +237 -0
  207. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_core.h +1968 -0
  208. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_debug.h +34 -0
  209. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_exec.h +193 -0
  210. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.7.0-p0}/vm_insnhelper.h +81 -64
  211. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_opts.h +72 -0
  212. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vmtc.inc +247 -0
  213. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/addr2line.h +20 -0
  214. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/builtin.h +83 -0
  215. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/build_assert/build_assert.h +40 -0
  216. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/check_type/check_type.h +63 -0
  217. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/container_of/container_of.h +142 -0
  218. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/list/list.h +788 -0
  219. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/str/str.h +16 -0
  220. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/constant.h +55 -0
  221. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/debug_counter.h +423 -0
  222. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/dln.h +36 -0
  223. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/encindex.h +70 -0
  224. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/eval_intern.h +312 -0
  225. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/gc.h +140 -0
  226. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/hrtime.h +168 -0
  227. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/id.h +290 -0
  228. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/id_table.h +36 -0
  229. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/insns.inc +249 -0
  230. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/insns_info.inc +8979 -0
  231. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal.h +107 -0
  232. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/array.h +114 -0
  233. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/bignum.h +246 -0
  234. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/bits.h +566 -0
  235. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/class.h +168 -0
  236. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/compar.h +50 -0
  237. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/compile.h +32 -0
  238. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/compilers.h +108 -0
  239. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/complex.h +29 -0
  240. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/cont.h +25 -0
  241. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/dir.h +17 -0
  242. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/enc.h +20 -0
  243. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/encoding.h +28 -0
  244. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/enum.h +19 -0
  245. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/enumerator.h +22 -0
  246. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/error.h +131 -0
  247. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/eval.h +33 -0
  248. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/file.h +39 -0
  249. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/fixnum.h +185 -0
  250. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/gc.h +154 -0
  251. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/hash.h +240 -0
  252. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/imemo.h +243 -0
  253. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/inits.h +51 -0
  254. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/io.h +35 -0
  255. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/load.h +19 -0
  256. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/loadpath.h +17 -0
  257. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/math.h +24 -0
  258. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/missing.h +19 -0
  259. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/mjit.h +29 -0
  260. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/numeric.h +252 -0
  261. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/object.h +83 -0
  262. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/parse.h +23 -0
  263. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/proc.h +32 -0
  264. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/process.h +136 -0
  265. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/random.h +17 -0
  266. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/range.h +37 -0
  267. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/rational.h +69 -0
  268. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/re.h +29 -0
  269. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/sanitizers.h +191 -0
  270. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/scheduler.h +35 -0
  271. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/serial.h +24 -0
  272. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/signal.h +22 -0
  273. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/static_assert.h +17 -0
  274. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/string.h +135 -0
  275. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/struct.h +154 -0
  276. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/symbol.h +41 -0
  277. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/thread.h +60 -0
  278. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/time.h +35 -0
  279. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/transcode.h +21 -0
  280. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/util.h +31 -0
  281. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/variable.h +83 -0
  282. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/vm.h +135 -0
  283. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/warnings.h +17 -0
  284. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/iseq.h +304 -0
  285. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/known_errors.inc +791 -0
  286. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/method.h +245 -0
  287. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/mjit.h +197 -0
  288. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/mjit_compile.inc +8082 -0
  289. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/node.h +484 -0
  290. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/node_name.inc +210 -0
  291. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/opt_sc.inc +109 -0
  292. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/optinsn.inc +128 -0
  293. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/optunifs.inc +43 -0
  294. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/parse.h +211 -0
  295. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/probes_helper.h +44 -0
  296. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ractor.h +271 -0
  297. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ractor_pub.h +50 -0
  298. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/regenc.h +254 -0
  299. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/regint.h +938 -0
  300. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/regparse.h +370 -0
  301. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/revision.h +2 -0
  302. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ruby_assert.h +15 -0
  303. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ruby_atomic.h +236 -0
  304. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/siphash.h +48 -0
  305. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/symbol.h +119 -0
  306. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/thread_pthread.h +106 -0
  307. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/thread_win32.h +66 -0
  308. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/timev.h +57 -0
  309. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/transcode_data.h +138 -0
  310. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/transient_heap.h +61 -0
  311. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/variable.h +21 -0
  312. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/version.h +89 -0
  313. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm.inc +5360 -0
  314. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_call_iseq_optimized.inc +244 -0
  315. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_callinfo.h +457 -0
  316. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_core.h +1952 -0
  317. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_debug.h +116 -0
  318. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_exec.h +196 -0
  319. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_insnhelper.h +260 -0
  320. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_opts.h +73 -0
  321. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_sync.h +97 -0
  322. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vmtc.inc +243 -0
  323. data/lib/debase/ruby_core_source/version.rb +1 -1
  324. metadata +335 -102
  325. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/insns.inc +0 -118
  326. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/insns_info.inc +0 -827
  327. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/node.h +0 -523
  328. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/opt_sc.inc +0 -809
  329. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/optinsn.inc +0 -77
  330. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/optunifs.inc +0 -49
  331. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/probes_helper.h +0 -43
  332. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/revision.h +0 -1
  333. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/vm.inc +0 -2935
  334. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/vm_call_iseq_optimized.inc +0 -212
  335. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/vmtc.inc +0 -115
  336. data/lib/debase/ruby_core_source/ruby-2.5.0-rc1/debug_counter.h +0 -109
  337. data/lib/debase/ruby_core_source/ruby-2.5.0-rc1/revision.h +0 -1
  338. data/lib/debase/ruby_core_source/ruby-2.5.0-rc1/thread_pthread.h +0 -54
  339. data/lib/debase/ruby_core_source/ruby-2.5.0-rc1/timev.h +0 -42
@@ -0,0 +1,42 @@
1
+ #ifndef RUBY_PROBES_HELPER_H
2
+ #define RUBY_PROBES_HELPER_H
3
+
4
+ #include "ruby/ruby.h"
5
+
6
+ struct ruby_dtrace_method_hook_args {
7
+ const char *classname;
8
+ const char *methodname;
9
+ const char *filename;
10
+ int line_no;
11
+ volatile VALUE klass;
12
+ volatile VALUE name;
13
+ };
14
+
15
+ NOINLINE(int rb_dtrace_setup(rb_execution_context_t *, VALUE, ID, struct ruby_dtrace_method_hook_args *));
16
+
17
+ #define RUBY_DTRACE_METHOD_HOOK(name, ec, klazz, id) \
18
+ do { \
19
+ if (UNLIKELY(RUBY_DTRACE_##name##_ENABLED())) { \
20
+ struct ruby_dtrace_method_hook_args args; \
21
+ if (rb_dtrace_setup(ec, klazz, id, &args)) { \
22
+ RUBY_DTRACE_##name(args.classname, \
23
+ args.methodname, \
24
+ args.filename, \
25
+ args.line_no); \
26
+ } \
27
+ } \
28
+ } while (0)
29
+
30
+ #define RUBY_DTRACE_METHOD_ENTRY_HOOK(ec, klass, id) \
31
+ RUBY_DTRACE_METHOD_HOOK(METHOD_ENTRY, ec, klass, id)
32
+
33
+ #define RUBY_DTRACE_METHOD_RETURN_HOOK(ec, klass, id) \
34
+ RUBY_DTRACE_METHOD_HOOK(METHOD_RETURN, ec, klass, id)
35
+
36
+ #define RUBY_DTRACE_CMETHOD_ENTRY_HOOK(ec, klass, id) \
37
+ RUBY_DTRACE_METHOD_HOOK(CMETHOD_ENTRY, ec, klass, id)
38
+
39
+ #define RUBY_DTRACE_CMETHOD_RETURN_HOOK(ec, klass, id) \
40
+ RUBY_DTRACE_METHOD_HOOK(CMETHOD_RETURN, ec, klass, id)
41
+
42
+ #endif /* RUBY_PROBES_HELPER_H */
@@ -122,7 +122,7 @@ typedef struct {
122
122
  } PosixBracketEntryType;
123
123
 
124
124
  #define POSIX_BRACKET_ENTRY_INIT(name, ctype) \
125
- {(short int )(sizeof(name) - 1), (name), (ctype)}
125
+ {(short int )(sizeof(name) - 1), name, (ctype)}
126
126
 
127
127
  #ifndef numberof
128
128
  # define numberof(array) (int )(sizeof(array) / sizeof((array)[0]))
@@ -186,7 +186,7 @@ typedef struct {
186
186
  int target_empty_info;
187
187
  struct _Node* head_exact;
188
188
  struct _Node* next_head_exact;
189
- int is_refered; /* include called node. don't eliminate even if {0} */
189
+ int is_referred; /* include called node. don't eliminate even if {0} */
190
190
  #ifdef USE_COMBINATION_EXPLOSION_CHECK
191
191
  int comb_exp_check_num; /* 1,2,3...: check, 0: no check */
192
192
  #endif
@@ -0,0 +1 @@
1
+ #define RUBY_REVISION 66547
@@ -33,8 +33,14 @@ NORETURN(void rb_assert_failure(const char *, int, const char *, const char *));
33
33
  #define RUBY_ASSERT(expr) RUBY_ASSERT_MESG_WHEN(!RUBY_NDEBUG+0, expr, #expr)
34
34
  #define RUBY_ASSERT_WHEN(cond, expr) RUBY_ASSERT_MESG_WHEN(cond, expr, #expr)
35
35
 
36
+ #if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)
37
+ /* C89 compilers are required to support strings of only 509 chars. */
38
+ /* can't use RUBY_ASSERT for such compilers. */
39
+ #include <assert.h>
40
+ #else
36
41
  #undef assert
37
42
  #define assert RUBY_ASSERT
43
+ #endif
38
44
 
39
45
  #ifndef RUBY_NDEBUG
40
46
  # ifdef NDEBUG
@@ -9,10 +9,10 @@ typedef unsigned int rb_atomic_t;
9
9
  # define ATOMIC_DEC(var) __atomic_fetch_sub(&(var), 1, __ATOMIC_SEQ_CST)
10
10
  # define ATOMIC_OR(var, val) __atomic_fetch_or(&(var), (val), __ATOMIC_SEQ_CST)
11
11
  # define ATOMIC_EXCHANGE(var, val) __atomic_exchange_n(&(var), (val), __ATOMIC_SEQ_CST)
12
- # define ATOMIC_CAS(var, oldval, newval) \
13
- ({ __typeof__(var) oldvaldup = (oldval); /* oldval should not be modified */ \
12
+ # define ATOMIC_CAS(var, oldval, newval) RB_GNUC_EXTENSION_BLOCK( \
13
+ __typeof__(var) oldvaldup = (oldval); /* oldval should not be modified */ \
14
14
  __atomic_compare_exchange_n(&(var), &oldvaldup, (newval), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \
15
- oldvaldup; })
15
+ oldvaldup )
16
16
 
17
17
  # define ATOMIC_SIZE_ADD(var, val) __atomic_fetch_add(&(var), (val), __ATOMIC_SEQ_CST)
18
18
  # define ATOMIC_SIZE_SUB(var, val) __atomic_fetch_sub(&(var), (val), __ATOMIC_SEQ_CST)
@@ -90,6 +90,10 @@ rb_w32_atomic_cas(volatile rb_atomic_t *var, rb_atomic_t oldval, rb_atomic_t new
90
90
  # define ATOMIC_SIZE_EXCHANGE(var, val) InterlockedExchange((LONG *)&(var), (val))
91
91
  # endif
92
92
 
93
+ # ifdef InterlockedExchangePointer
94
+ # define ATOMIC_PTR_EXCHANGE(var, val) InterlockedExchangePointer((PVOID volatile *)&(var), (PVOID)(val))
95
+ # endif /* See below for definitions of other situations */
96
+
93
97
  #elif defined(__sun) && defined(HAVE_ATOMIC_H)
94
98
  #include <atomic.h>
95
99
  typedef unsigned int rb_atomic_t;
@@ -146,12 +150,15 @@ ruby_atomic_size_exchange(size_t *ptr, size_t val)
146
150
  #ifndef ATOMIC_SIZE_INC
147
151
  # define ATOMIC_SIZE_INC(var) ATOMIC_INC(var)
148
152
  #endif
153
+
149
154
  #ifndef ATOMIC_SIZE_DEC
150
155
  # define ATOMIC_SIZE_DEC(var) ATOMIC_DEC(var)
151
156
  #endif
157
+
152
158
  #ifndef ATOMIC_SIZE_EXCHANGE
153
159
  # define ATOMIC_SIZE_EXCHANGE(var, val) ATOMIC_EXCHANGE(var, val)
154
160
  #endif
161
+
155
162
  #ifndef ATOMIC_SIZE_CAS
156
163
  # define ATOMIC_SIZE_CAS(var, oldval, val) ATOMIC_CAS(var, oldval, val)
157
164
  #endif
@@ -160,6 +167,7 @@ ruby_atomic_size_exchange(size_t *ptr, size_t val)
160
167
  # ifndef ATOMIC_PTR_EXCHANGE
161
168
  # define ATOMIC_PTR_EXCHANGE(var, val) ATOMIC_EXCHANGE(var, val)
162
169
  # endif
170
+
163
171
  # ifndef ATOMIC_PTR_CAS
164
172
  # define ATOMIC_PTR_CAS(var, oldval, newval) ATOMIC_CAS(var, oldval, newval)
165
173
  # endif
@@ -167,6 +175,7 @@ ruby_atomic_size_exchange(size_t *ptr, size_t val)
167
175
  # ifndef ATOMIC_VALUE_EXCHANGE
168
176
  # define ATOMIC_VALUE_EXCHANGE(var, val) ATOMIC_EXCHANGE(var, val)
169
177
  # endif
178
+
170
179
  # ifndef ATOMIC_VALUE_CAS
171
180
  # define ATOMIC_VALUE_CAS(var, oldval, val) ATOMIC_CAS(var, oldval, val)
172
181
  # endif
@@ -186,6 +195,7 @@ ruby_atomic_ptr_exchange(const void **ptr, const void *val)
186
195
  }
187
196
  # endif
188
197
  #endif
198
+
189
199
  #ifndef ATOMIC_PTR_CAS
190
200
  # if SIZEOF_VOIDP == SIZEOF_SIZE_T
191
201
  # define ATOMIC_PTR_CAS(var, oldval, val) (void *)ATOMIC_SIZE_CAS(*(size_t *)&(var), (size_t)(oldval), (size_t)(val))
@@ -215,6 +225,7 @@ ruby_atomic_value_exchange(VALUE *ptr, VALUE val)
215
225
  }
216
226
  # endif
217
227
  #endif
228
+
218
229
  #ifndef ATOMIC_VALUE_CAS
219
230
  # if SIZEOF_VALUE == SIZEOF_SIZE_T
220
231
  # define ATOMIC_VALUE_CAS(var, oldval, val) ATOMIC_SIZE_CAS(*(size_t *)&(var), (size_t)(oldval), (size_t)(val))
@@ -43,6 +43,6 @@ int sip_hash_digest_integer(sip_hash *h, const uint8_t *data, size_t data_len, u
43
43
  void sip_hash_free(sip_hash *h);
44
44
  void sip_hash_dump(sip_hash *h);
45
45
 
46
- uint64_t sip_hash13(const uint8_t key[16], const uint8_t *data, size_t len);
46
+ NO_SANITIZE("unsigned-integer-overflow", uint64_t sip_hash13(const uint8_t key[16], const uint8_t *data, size_t len));
47
47
 
48
48
  #endif
@@ -98,7 +98,7 @@ is_global_name_punct(const int c)
98
98
  return (ruby_global_name_punct_bits[(c - 0x20) / 32] >> (c % 32)) & 1;
99
99
  }
100
100
 
101
- ID rb_intern_cstr_without_pindown(const char *, long, rb_encoding *);
101
+ int rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int allowed_attrset);
102
102
 
103
103
  RUBY_SYMBOL_EXPORT_BEGIN
104
104
 
@@ -0,0 +1,75 @@
1
+ /**********************************************************************
2
+
3
+ thread_pthread.h -
4
+
5
+ $Author: normal $
6
+
7
+ Copyright (C) 2004-2007 Koichi Sasada
8
+
9
+ **********************************************************************/
10
+
11
+ #ifndef RUBY_THREAD_PTHREAD_H
12
+ #define RUBY_THREAD_PTHREAD_H
13
+
14
+ #ifdef HAVE_PTHREAD_NP_H
15
+ #include <pthread_np.h>
16
+ #endif
17
+
18
+ #define RB_NATIVETHREAD_LOCK_INIT PTHREAD_MUTEX_INITIALIZER
19
+ #define RB_NATIVETHREAD_COND_INIT PTHREAD_COND_INITIALIZER
20
+
21
+ typedef pthread_cond_t rb_nativethread_cond_t;
22
+
23
+ typedef struct native_thread_data_struct {
24
+ union {
25
+ struct list_node ubf;
26
+ struct list_node gvl;
27
+ } node;
28
+ #if defined(__GLIBC__) || defined(__FreeBSD__)
29
+ union
30
+ #else
31
+ /*
32
+ * assume the platform condvars are badly implemented and have a
33
+ * "memory" of which mutex they're associated with
34
+ */
35
+ struct
36
+ #endif
37
+ {
38
+ rb_nativethread_cond_t intr; /* th->interrupt_lock */
39
+ rb_nativethread_cond_t gvlq; /* vm->gvl.lock */
40
+ } cond;
41
+ } native_thread_data_t;
42
+
43
+ #undef except
44
+ #undef try
45
+ #undef leave
46
+ #undef finally
47
+
48
+ typedef struct rb_global_vm_lock_struct {
49
+ /* fast path */
50
+ const struct rb_thread_struct *owner;
51
+ rb_nativethread_lock_t lock; /* AKA vm->gvl.lock */
52
+
53
+ /*
54
+ * slow path, protected by vm->gvl.lock
55
+ * - @waitq - FIFO queue of threads waiting for GVL
56
+ * - @timer - it handles timeslices for @owner. It is any one thread
57
+ * in @waitq, there is no @timer if @waitq is empty, but always
58
+ * a @timer if @waitq has entries
59
+ * - @timer_err tracks timeslice limit, the timeslice only resets
60
+ * when pthread_cond_timedwait returns ETIMEDOUT, so frequent
61
+ * switching between contended/uncontended GVL won't reset the
62
+ * timer.
63
+ */
64
+ struct list_head waitq; /* <=> native_thread_data_t.node.ubf */
65
+ const struct rb_thread_struct *timer;
66
+ int timer_err;
67
+
68
+ /* yield */
69
+ rb_nativethread_cond_t switch_cond;
70
+ rb_nativethread_cond_t switch_wait_cond;
71
+ int need_yield;
72
+ int wait_yield;
73
+ } rb_global_vm_lock_t;
74
+
75
+ #endif /* RUBY_THREAD_PTHREAD_H */
@@ -0,0 +1,53 @@
1
+ #ifndef RUBY_TIMEV_H
2
+ #define RUBY_TIMEV_H
3
+
4
+ PACKED_STRUCT_UNALIGNED(struct vtm {
5
+ VALUE year; /* 2000 for example. Integer. */
6
+ VALUE subsecx; /* 0 <= subsecx < TIME_SCALE. possibly Rational. */
7
+ VALUE utc_offset; /* -3600 as -01:00 for example. possibly Rational. */
8
+ VALUE zone; /* "JST", "EST", "EDT", etc. as String */
9
+ unsigned int yday:9; /* 1..366 */
10
+ unsigned int mon:4; /* 1..12 */
11
+ unsigned int mday:5; /* 1..31 */
12
+ unsigned int hour:5; /* 0..23 */
13
+ unsigned int min:6; /* 0..59 */
14
+ unsigned int sec:6; /* 0..60 */
15
+ unsigned int wday:3; /* 0:Sunday, 1:Monday, ..., 6:Saturday 7:init */
16
+ unsigned int isdst:2; /* 0:StandardTime 1:DayLightSavingTime 3:init */
17
+ });
18
+
19
+ #define TIME_SCALE 1000000000
20
+
21
+ #ifndef TYPEOF_TIMEVAL_TV_SEC
22
+ # define TYPEOF_TIMEVAL_TV_SEC time_t
23
+ #endif
24
+ #ifndef TYPEOF_TIMEVAL_TV_USEC
25
+ # if INT_MAX >= 1000000
26
+ # define TYPEOF_TIMEVAL_TV_USEC int
27
+ # else
28
+ # define TYPEOF_TIMEVAL_TV_USEC long
29
+ # endif
30
+ #endif
31
+
32
+ #if SIZEOF_TIME_T == SIZEOF_LONG
33
+ typedef unsigned long unsigned_time_t;
34
+ #elif SIZEOF_TIME_T == SIZEOF_INT
35
+ typedef unsigned int unsigned_time_t;
36
+ #elif SIZEOF_TIME_T == SIZEOF_LONG_LONG
37
+ typedef unsigned LONG_LONG unsigned_time_t;
38
+ #else
39
+ # error cannot find integer type which size is same as time_t.
40
+ #endif
41
+
42
+ /* strftime.c */
43
+ #ifdef RUBY_ENCODING_H
44
+ VALUE rb_strftime_timespec(const char *format, size_t format_len, rb_encoding *enc,
45
+ VALUE time, const struct vtm *vtm, struct timespec *ts, int gmt);
46
+ VALUE rb_strftime(const char *format, size_t format_len, rb_encoding *enc,
47
+ VALUE time, const struct vtm *vtm, VALUE timev, int gmt);
48
+ #endif
49
+
50
+ /* time.c */
51
+ VALUE rb_time_zone_abbreviation(VALUE zone, VALUE time);
52
+
53
+ #endif
@@ -0,0 +1,60 @@
1
+ /**********************************************************************
2
+
3
+ transient_heap.h - declarations of transient_heap related APIs.
4
+
5
+ Copyright (C) 2018 Koichi Sasada
6
+
7
+ **********************************************************************/
8
+
9
+ #ifndef RUBY_TRANSIENT_HEAP_H
10
+ #define RUBY_TRANSIENT_HEAP_H
11
+
12
+ #include "internal.h"
13
+
14
+ #if USE_TRANSIENT_HEAP
15
+
16
+ /* public API */
17
+
18
+ /* Allocate req_size bytes from transient_heap.
19
+ Allocated memories are free-ed when next GC
20
+ if this memory is not marked by `rb_transient_heap_mark()`.
21
+ */
22
+ void *rb_transient_heap_alloc(VALUE obj, size_t req_size);
23
+
24
+ /* If `obj` uses a memory pointed by `ptr` from transient_heap,
25
+ you need to call `rb_transient_heap_mark(obj, ptr)`
26
+ to assert liveness of `obj` (and ptr). */
27
+ void rb_transient_heap_mark(VALUE obj, const void *ptr);
28
+
29
+ /* used by gc.c */
30
+ void rb_transient_heap_promote(VALUE obj);
31
+ void rb_transient_heap_start_marking(int full_marking);
32
+ void rb_transient_heap_finish_marking(void);
33
+
34
+ /* for debug API */
35
+ void rb_transient_heap_dump(void);
36
+ void rb_transient_heap_verify(void);
37
+ int rb_transient_heap_managed_ptr_p(const void *ptr);
38
+
39
+ /* evacuate functions for each type */
40
+ void rb_ary_transient_heap_evacuate(VALUE ary, int promote);
41
+ void rb_obj_transient_heap_evacuate(VALUE obj, int promote);
42
+ void rb_hash_transient_heap_evacuate(VALUE hash, int promote);
43
+ void rb_struct_transient_heap_evacuate(VALUE st, int promote);
44
+
45
+ #else /* USE_TRANSIENT_HEAP */
46
+
47
+ #define rb_transient_heap_alloc(o, s) NULL
48
+ #define rb_transient_heap_verify() ((void)0)
49
+ #define rb_transient_heap_promote(obj) ((void)0)
50
+ #define rb_transient_heap_start_marking(full_marking) ((void)0)
51
+ #define rb_transient_heap_finish_marking() ((void)0)
52
+ #define rb_transient_heap_mark(obj, ptr) ((void)0)
53
+
54
+ #define rb_ary_transient_heap_evacuate(x, y) ((void)0)
55
+ #define rb_obj_transient_heap_evacuate(x, y) ((void)0)
56
+ #define rb_hash_transient_heap_evacuate(x, y) ((void)0)
57
+ #define rb_struct_transient_heap_evacuate(x, y) ((void)0)
58
+
59
+ #endif /* USE_TRANSIENT_HEAP */
60
+ #endif
@@ -1,10 +1,10 @@
1
- #define RUBY_VERSION "2.5.0"
1
+ #define RUBY_VERSION "2.6.0"
2
2
  #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
3
- #define RUBY_PATCHLEVEL -1
3
+ #define RUBY_PATCHLEVEL 0
4
4
 
5
- #define RUBY_RELEASE_YEAR 2017
5
+ #define RUBY_RELEASE_YEAR 2018
6
6
  #define RUBY_RELEASE_MONTH 12
7
- #define RUBY_RELEASE_DAY 14
7
+ #define RUBY_RELEASE_DAY 25
8
8
 
9
9
  #include "ruby/version.h"
10
10
 
@@ -35,7 +35,7 @@
35
35
  #endif
36
36
 
37
37
  #if RUBY_PATCHLEVEL == -1
38
- #define RUBY_PATCHLEVEL_STR "rc1"
38
+ #define RUBY_PATCHLEVEL_STR "dev"
39
39
  #else
40
40
  #define RUBY_PATCHLEVEL_STR "p"STRINGIZE(RUBY_PATCHLEVEL)
41
41
  #endif
@@ -60,11 +60,11 @@
60
60
  # define RUBY_REVISION_STR ""
61
61
  #endif
62
62
 
63
- # define RUBY_DESCRIPTION \
63
+ # define RUBY_DESCRIPTION_WITH(opt) \
64
64
  "ruby "RUBY_VERSION \
65
65
  RUBY_PATCHLEVEL_STR \
66
66
  " ("RUBY_RELEASE_DATE \
67
- RUBY_REVISION_STR") " \
67
+ RUBY_REVISION_STR")"opt" " \
68
68
  "["RUBY_PLATFORM"]"
69
69
  # define RUBY_COPYRIGHT \
70
70
  "ruby - Copyright (C) " \
@@ -0,0 +1,4502 @@
1
+ /* -*- mode:c; style:ruby; coding: utf-8; indent-tabs-mode: nil -*- */
2
+
3
+ /* This is an auto-generated file and is a part of the programming language
4
+ * Ruby. The person who created a program to generate this file (``I''
5
+ * hereafter) would like to refrain from defining licensing of this generated
6
+ * source code.
7
+ *
8
+ * This file consist of many small parts of codes copyrighted by each authors,
9
+ * not only the ``I'' person. Those original authors agree with some
10
+ * open-source license. I believe that the license we agree is the condition
11
+ * mentioned in the file COPYING. It states "4. You may modify and include
12
+ * the part of the software into any other software ...". But the problem is,
13
+ * the license never makes it clear if such modified parts still remain in the
14
+ * same license, or not. The fact that we agree with the source code's
15
+ * licensing terms do not automatically define that of generated ones. This is
16
+ * the reason why this file is under unclear situation. All that I know is
17
+ * that above provision guarantees this file to exist.
18
+ *
19
+ * Please let me hesitate to declare something about this nuanced contract. I
20
+ * am not in the position to take over other authors' license to merge into my
21
+ * one. Changing them to (say) GPLv3 is not doable by myself. Perhaps someday
22
+ * it might turn out to be okay to say this file is under a license. I wish the
23
+ * situation would become more clear in the future. */
24
+
25
+ /*******************************************************************/
26
+ /*******************************************************************/
27
+ /*******************************************************************/
28
+ /**
29
+ This file is VM main loop.
30
+
31
+ ----
32
+ This file is auto generated by insns2vm.rb
33
+ DO NOT TOUCH!
34
+
35
+ If you want to fix something, you must edit "tool/ruby_vm/views/vm.inc.erb"
36
+ or tool/insns2vm.rb
37
+ */
38
+
39
+ #include "vm_insnhelper.h"
40
+
41
+ /* insn nop()()() */
42
+ INSN_ENTRY(nop)
43
+ {
44
+ # define NAME_OF_CURRENT_INSN nop
45
+ # define INSN_ATTR(x) attr_ ## x ## _nop()
46
+ bool leaf;
47
+ MAYBE_UNUSED(VALUE *) canary;
48
+ START_OF_ORIGINAL_INSN(nop);
49
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
50
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
51
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
52
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
53
+ INC_SP(INSN_ATTR(sp_inc));
54
+ if (leaf) ADD_PC(INSN_ATTR(width));
55
+ END_INSN(nop);
56
+ # undef INSN_ATTR
57
+ # undef NAME_OF_CURRENT_INSN
58
+ }
59
+
60
+ /* insn getlocal(idx, level)()(val) */
61
+ INSN_ENTRY(getlocal)
62
+ {
63
+ # define NAME_OF_CURRENT_INSN getlocal
64
+ # define INSN_ATTR(x) attr_ ## x ## _getlocal(idx, level)
65
+ bool leaf;
66
+ MAYBE_UNUSED(VALUE *) canary;
67
+ MAYBE_UNUSED(VALUE) val;
68
+ MAYBE_UNUSED(lindex_t) idx;
69
+ MAYBE_UNUSED(rb_num_t) level;
70
+
71
+ START_OF_ORIGINAL_INSN(getlocal);
72
+ idx = (lindex_t)GET_OPERAND(1);
73
+ level = (rb_num_t)GET_OPERAND(2);
74
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
75
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
76
+ SETUP_CANARY();
77
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
78
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
79
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, level);
80
+ #line 81 "insns.def"
81
+ {
82
+ val = *(vm_get_ep(GET_EP(), level) - idx);
83
+ RB_DEBUG_COUNTER_INC(lvar_get);
84
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
85
+ }
86
+ #line 87 "vm.inc"
87
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
88
+ CHECK_CANARY();
89
+ INC_SP(INSN_ATTR(sp_inc));
90
+ TOPN(0) = val;
91
+ if (leaf) ADD_PC(INSN_ATTR(width));
92
+ END_INSN(getlocal);
93
+ # undef INSN_ATTR
94
+ # undef NAME_OF_CURRENT_INSN
95
+ }
96
+
97
+ /* insn setlocal(idx, level)(val)() */
98
+ INSN_ENTRY(setlocal)
99
+ {
100
+ # define NAME_OF_CURRENT_INSN setlocal
101
+ # define INSN_ATTR(x) attr_ ## x ## _setlocal(idx, level)
102
+ bool leaf;
103
+ MAYBE_UNUSED(VALUE *) canary;
104
+ MAYBE_UNUSED(VALUE) val;
105
+ MAYBE_UNUSED(lindex_t) idx;
106
+ MAYBE_UNUSED(rb_num_t) level;
107
+
108
+ START_OF_ORIGINAL_INSN(setlocal);
109
+ idx = (lindex_t)GET_OPERAND(1);
110
+ level = (rb_num_t)GET_OPERAND(2);
111
+ val = TOPN(0);
112
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
113
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
114
+ SETUP_CANARY();
115
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
116
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
117
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, level);
118
+ #line 95 "insns.def"
119
+ {
120
+ vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val);
121
+ RB_DEBUG_COUNTER_INC(lvar_set);
122
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
123
+ }
124
+ #line 125 "vm.inc"
125
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
126
+ CHECK_CANARY();
127
+ INC_SP(INSN_ATTR(sp_inc));
128
+ if (leaf) ADD_PC(INSN_ATTR(width));
129
+ END_INSN(setlocal);
130
+ # undef INSN_ATTR
131
+ # undef NAME_OF_CURRENT_INSN
132
+ }
133
+
134
+ /* insn getblockparam(idx, level)()(val) */
135
+ INSN_ENTRY(getblockparam)
136
+ {
137
+ # define NAME_OF_CURRENT_INSN getblockparam
138
+ # define INSN_ATTR(x) attr_ ## x ## _getblockparam(idx, level)
139
+ bool leaf;
140
+ MAYBE_UNUSED(VALUE *) canary;
141
+ MAYBE_UNUSED(VALUE) val;
142
+ MAYBE_UNUSED(lindex_t) idx;
143
+ MAYBE_UNUSED(rb_num_t) level;
144
+
145
+ START_OF_ORIGINAL_INSN(getblockparam);
146
+ idx = (lindex_t)GET_OPERAND(1);
147
+ level = (rb_num_t)GET_OPERAND(2);
148
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
149
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
150
+ SETUP_CANARY();
151
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
152
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
153
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, level);
154
+ #line 107 "insns.def"
155
+ {
156
+ const VALUE *ep = vm_get_ep(GET_EP(), level);
157
+ VM_ASSERT(VM_ENV_LOCAL_P(ep));
158
+
159
+ if (!VM_ENV_FLAGS(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)) {
160
+ val = rb_vm_bh_to_procval(ec, VM_ENV_BLOCK_HANDLER(ep));
161
+ vm_env_write(ep, -(int)idx, val);
162
+ VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM);
163
+ }
164
+ else {
165
+ val = *(ep - idx);
166
+ RB_DEBUG_COUNTER_INC(lvar_get);
167
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
168
+ }
169
+ }
170
+ #line 171 "vm.inc"
171
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
172
+ CHECK_CANARY();
173
+ INC_SP(INSN_ATTR(sp_inc));
174
+ TOPN(0) = val;
175
+ if (leaf) ADD_PC(INSN_ATTR(width));
176
+ END_INSN(getblockparam);
177
+ # undef INSN_ATTR
178
+ # undef NAME_OF_CURRENT_INSN
179
+ }
180
+
181
+ /* insn setblockparam(idx, level)(val)() */
182
+ INSN_ENTRY(setblockparam)
183
+ {
184
+ # define NAME_OF_CURRENT_INSN setblockparam
185
+ # define INSN_ATTR(x) attr_ ## x ## _setblockparam(idx, level)
186
+ bool leaf;
187
+ MAYBE_UNUSED(VALUE *) canary;
188
+ MAYBE_UNUSED(VALUE) val;
189
+ MAYBE_UNUSED(lindex_t) idx;
190
+ MAYBE_UNUSED(rb_num_t) level;
191
+
192
+ START_OF_ORIGINAL_INSN(setblockparam);
193
+ idx = (lindex_t)GET_OPERAND(1);
194
+ level = (rb_num_t)GET_OPERAND(2);
195
+ val = TOPN(0);
196
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
197
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
198
+ SETUP_CANARY();
199
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
200
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
201
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, level);
202
+ #line 129 "insns.def"
203
+ {
204
+ const VALUE *ep = vm_get_ep(GET_EP(), level);
205
+ VM_ASSERT(VM_ENV_LOCAL_P(ep));
206
+
207
+ vm_env_write(ep, -(int)idx, val);
208
+ RB_DEBUG_COUNTER_INC(lvar_set);
209
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
210
+
211
+ VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM);
212
+ }
213
+ #line 214 "vm.inc"
214
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
215
+ CHECK_CANARY();
216
+ INC_SP(INSN_ATTR(sp_inc));
217
+ if (leaf) ADD_PC(INSN_ATTR(width));
218
+ END_INSN(setblockparam);
219
+ # undef INSN_ATTR
220
+ # undef NAME_OF_CURRENT_INSN
221
+ }
222
+
223
+ /* insn getblockparamproxy(idx, level)()(val) */
224
+ INSN_ENTRY(getblockparamproxy)
225
+ {
226
+ # define NAME_OF_CURRENT_INSN getblockparamproxy
227
+ # define INSN_ATTR(x) attr_ ## x ## _getblockparamproxy(idx, level)
228
+ bool leaf;
229
+ MAYBE_UNUSED(VALUE *) canary;
230
+ MAYBE_UNUSED(VALUE) val;
231
+ MAYBE_UNUSED(lindex_t) idx;
232
+ MAYBE_UNUSED(rb_num_t) level;
233
+
234
+ START_OF_ORIGINAL_INSN(getblockparamproxy);
235
+ idx = (lindex_t)GET_OPERAND(1);
236
+ level = (rb_num_t)GET_OPERAND(2);
237
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
238
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
239
+ SETUP_CANARY();
240
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
241
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
242
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, level);
243
+ #line 148 "insns.def"
244
+ {
245
+ const VALUE *ep = vm_get_ep(GET_EP(), level);
246
+ VM_ASSERT(VM_ENV_LOCAL_P(ep));
247
+
248
+ if (!VM_ENV_FLAGS(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)) {
249
+ VALUE block_handler = VM_ENV_BLOCK_HANDLER(ep);
250
+
251
+ if (block_handler) {
252
+ switch (vm_block_handler_type(block_handler)) {
253
+ case block_handler_type_iseq:
254
+ case block_handler_type_ifunc:
255
+ val = rb_block_param_proxy;
256
+ break;
257
+ case block_handler_type_symbol:
258
+ val = rb_sym_to_proc(VM_BH_TO_SYMBOL(block_handler));
259
+ goto INSN_LABEL(set);
260
+ case block_handler_type_proc:
261
+ val = VM_BH_TO_PROC(block_handler);
262
+ goto INSN_LABEL(set);
263
+ default:
264
+ VM_UNREACHABLE(getblockparamproxy);
265
+ }
266
+ }
267
+ else {
268
+ val = Qnil;
269
+ INSN_LABEL(set):
270
+ vm_env_write(ep, -(int)idx, val);
271
+ VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM);
272
+ }
273
+ }
274
+ else {
275
+ val = *(ep - idx);
276
+ RB_DEBUG_COUNTER_INC(lvar_get);
277
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
278
+ }
279
+ }
280
+ #line 281 "vm.inc"
281
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
282
+ CHECK_CANARY();
283
+ INC_SP(INSN_ATTR(sp_inc));
284
+ TOPN(0) = val;
285
+ if (leaf) ADD_PC(INSN_ATTR(width));
286
+ END_INSN(getblockparamproxy);
287
+ # undef INSN_ATTR
288
+ # undef NAME_OF_CURRENT_INSN
289
+ }
290
+
291
+ /* insn getspecial(key, type)()(val) */
292
+ INSN_ENTRY(getspecial)
293
+ {
294
+ # define NAME_OF_CURRENT_INSN getspecial
295
+ # define INSN_ATTR(x) attr_ ## x ## _getspecial(key, type)
296
+ bool leaf;
297
+ MAYBE_UNUSED(VALUE *) canary;
298
+ MAYBE_UNUSED(VALUE) val;
299
+ MAYBE_UNUSED(rb_num_t) key, type;
300
+
301
+ START_OF_ORIGINAL_INSN(getspecial);
302
+ key = (rb_num_t)GET_OPERAND(1);
303
+ type = (rb_num_t)GET_OPERAND(2);
304
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
305
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
306
+ SETUP_CANARY();
307
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
308
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, key);
309
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, type);
310
+ #line 191 "insns.def"
311
+ {
312
+ val = vm_getspecial(ec, GET_LEP(), key, type);
313
+ }
314
+ #line 315 "vm.inc"
315
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
316
+ CHECK_CANARY();
317
+ INC_SP(INSN_ATTR(sp_inc));
318
+ TOPN(0) = val;
319
+ if (leaf) ADD_PC(INSN_ATTR(width));
320
+ END_INSN(getspecial);
321
+ # undef INSN_ATTR
322
+ # undef NAME_OF_CURRENT_INSN
323
+ }
324
+
325
+ /* insn setspecial(key)(obj)() */
326
+ INSN_ENTRY(setspecial)
327
+ {
328
+ # define NAME_OF_CURRENT_INSN setspecial
329
+ # define INSN_ATTR(x) attr_ ## x ## _setspecial(key)
330
+ bool leaf;
331
+ MAYBE_UNUSED(VALUE *) canary;
332
+ MAYBE_UNUSED(VALUE) obj;
333
+ MAYBE_UNUSED(rb_num_t) key;
334
+
335
+ START_OF_ORIGINAL_INSN(setspecial);
336
+ key = (rb_num_t)GET_OPERAND(1);
337
+ obj = TOPN(0);
338
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
339
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
340
+ SETUP_CANARY();
341
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
342
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, key);
343
+ #line 201 "insns.def"
344
+ {
345
+ lep_svar_set(ec, GET_LEP(), key, obj);
346
+ }
347
+ #line 348 "vm.inc"
348
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
349
+ CHECK_CANARY();
350
+ INC_SP(INSN_ATTR(sp_inc));
351
+ if (leaf) ADD_PC(INSN_ATTR(width));
352
+ END_INSN(setspecial);
353
+ # undef INSN_ATTR
354
+ # undef NAME_OF_CURRENT_INSN
355
+ }
356
+
357
+ /* insn getinstancevariable(id, ic)()(val) */
358
+ INSN_ENTRY(getinstancevariable)
359
+ {
360
+ # define NAME_OF_CURRENT_INSN getinstancevariable
361
+ # define INSN_ATTR(x) attr_ ## x ## _getinstancevariable(id, ic)
362
+ bool leaf;
363
+ MAYBE_UNUSED(VALUE *) canary;
364
+ MAYBE_UNUSED(IC) ic;
365
+ MAYBE_UNUSED(ID) id;
366
+ MAYBE_UNUSED(VALUE) val;
367
+
368
+ START_OF_ORIGINAL_INSN(getinstancevariable);
369
+ id = (ID)GET_OPERAND(1);
370
+ ic = (IC)GET_OPERAND(2);
371
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
372
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
373
+ SETUP_CANARY();
374
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
375
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
376
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, ic);
377
+ #line 213 "insns.def"
378
+ {
379
+ val = vm_getinstancevariable(GET_SELF(), id, ic);
380
+ }
381
+ #line 382 "vm.inc"
382
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
383
+ CHECK_CANARY();
384
+ INC_SP(INSN_ATTR(sp_inc));
385
+ TOPN(0) = val;
386
+ if (leaf) ADD_PC(INSN_ATTR(width));
387
+ END_INSN(getinstancevariable);
388
+ # undef INSN_ATTR
389
+ # undef NAME_OF_CURRENT_INSN
390
+ }
391
+
392
+ /* insn setinstancevariable(id, ic)(val)() */
393
+ INSN_ENTRY(setinstancevariable)
394
+ {
395
+ # define NAME_OF_CURRENT_INSN setinstancevariable
396
+ # define INSN_ATTR(x) attr_ ## x ## _setinstancevariable(id, ic)
397
+ bool leaf;
398
+ MAYBE_UNUSED(VALUE *) canary;
399
+ MAYBE_UNUSED(IC) ic;
400
+ MAYBE_UNUSED(ID) id;
401
+ MAYBE_UNUSED(VALUE) val;
402
+
403
+ START_OF_ORIGINAL_INSN(setinstancevariable);
404
+ id = (ID)GET_OPERAND(1);
405
+ ic = (IC)GET_OPERAND(2);
406
+ val = TOPN(0);
407
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
408
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
409
+ SETUP_CANARY();
410
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
411
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
412
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, ic);
413
+ #line 223 "insns.def"
414
+ {
415
+ vm_setinstancevariable(GET_SELF(), id, val, ic);
416
+ }
417
+ #line 418 "vm.inc"
418
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
419
+ CHECK_CANARY();
420
+ INC_SP(INSN_ATTR(sp_inc));
421
+ if (leaf) ADD_PC(INSN_ATTR(width));
422
+ END_INSN(setinstancevariable);
423
+ # undef INSN_ATTR
424
+ # undef NAME_OF_CURRENT_INSN
425
+ }
426
+
427
+ /* insn getclassvariable(id)()(val) */
428
+ INSN_ENTRY(getclassvariable)
429
+ {
430
+ # define NAME_OF_CURRENT_INSN getclassvariable
431
+ # define INSN_ATTR(x) attr_ ## x ## _getclassvariable(id)
432
+ bool leaf;
433
+ MAYBE_UNUSED(VALUE *) canary;
434
+ MAYBE_UNUSED(ID) id;
435
+ MAYBE_UNUSED(VALUE) val;
436
+
437
+ START_OF_ORIGINAL_INSN(getclassvariable);
438
+ id = (ID)GET_OPERAND(1);
439
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
440
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
441
+ SETUP_CANARY();
442
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
443
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
444
+ #line 235 "insns.def"
445
+ {
446
+ val = rb_cvar_get(vm_get_cvar_base(rb_vm_get_cref(GET_EP()), GET_CFP()), id);
447
+ }
448
+ #line 449 "vm.inc"
449
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
450
+ CHECK_CANARY();
451
+ INC_SP(INSN_ATTR(sp_inc));
452
+ TOPN(0) = val;
453
+ if (leaf) ADD_PC(INSN_ATTR(width));
454
+ END_INSN(getclassvariable);
455
+ # undef INSN_ATTR
456
+ # undef NAME_OF_CURRENT_INSN
457
+ }
458
+
459
+ /* insn setclassvariable(id)(val)() */
460
+ INSN_ENTRY(setclassvariable)
461
+ {
462
+ # define NAME_OF_CURRENT_INSN setclassvariable
463
+ # define INSN_ATTR(x) attr_ ## x ## _setclassvariable(id)
464
+ bool leaf;
465
+ MAYBE_UNUSED(VALUE *) canary;
466
+ MAYBE_UNUSED(ID) id;
467
+ MAYBE_UNUSED(VALUE) val;
468
+
469
+ START_OF_ORIGINAL_INSN(setclassvariable);
470
+ id = (ID)GET_OPERAND(1);
471
+ val = TOPN(0);
472
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
473
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
474
+ SETUP_CANARY();
475
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
476
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
477
+ #line 247 "insns.def"
478
+ {
479
+ vm_ensure_not_refinement_module(GET_SELF());
480
+ rb_cvar_set(vm_get_cvar_base(rb_vm_get_cref(GET_EP()), GET_CFP()), id, val);
481
+ }
482
+ #line 483 "vm.inc"
483
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
484
+ CHECK_CANARY();
485
+ INC_SP(INSN_ATTR(sp_inc));
486
+ if (leaf) ADD_PC(INSN_ATTR(width));
487
+ END_INSN(setclassvariable);
488
+ # undef INSN_ATTR
489
+ # undef NAME_OF_CURRENT_INSN
490
+ }
491
+
492
+ /* insn getconstant(id)(klass)(val) */
493
+ INSN_ENTRY(getconstant)
494
+ {
495
+ # define NAME_OF_CURRENT_INSN getconstant
496
+ # define INSN_ATTR(x) attr_ ## x ## _getconstant(id)
497
+ bool leaf;
498
+ MAYBE_UNUSED(VALUE *) canary;
499
+ MAYBE_UNUSED(ID) id;
500
+ MAYBE_UNUSED(VALUE) klass, val;
501
+
502
+ START_OF_ORIGINAL_INSN(getconstant);
503
+ id = (ID)GET_OPERAND(1);
504
+ klass = TOPN(0);
505
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
506
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
507
+ SETUP_CANARY();
508
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
509
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
510
+ #line 263 "insns.def"
511
+ {
512
+ val = vm_get_ev_const(ec, klass, id, 0);
513
+ }
514
+ #line 515 "vm.inc"
515
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
516
+ CHECK_CANARY();
517
+ INC_SP(INSN_ATTR(sp_inc));
518
+ TOPN(0) = val;
519
+ if (leaf) ADD_PC(INSN_ATTR(width));
520
+ END_INSN(getconstant);
521
+ # undef INSN_ATTR
522
+ # undef NAME_OF_CURRENT_INSN
523
+ }
524
+
525
+ /* insn setconstant(id)(val, cbase)() */
526
+ INSN_ENTRY(setconstant)
527
+ {
528
+ # define NAME_OF_CURRENT_INSN setconstant
529
+ # define INSN_ATTR(x) attr_ ## x ## _setconstant(id)
530
+ bool leaf;
531
+ MAYBE_UNUSED(VALUE *) canary;
532
+ MAYBE_UNUSED(ID) id;
533
+ MAYBE_UNUSED(VALUE) cbase, val;
534
+
535
+ START_OF_ORIGINAL_INSN(setconstant);
536
+ id = (ID)GET_OPERAND(1);
537
+ val = TOPN(1);
538
+ cbase = TOPN(0);
539
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
540
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
541
+ SETUP_CANARY();
542
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
543
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
544
+ #line 279 "insns.def"
545
+ {
546
+ vm_check_if_namespace(cbase);
547
+ vm_ensure_not_refinement_module(GET_SELF());
548
+ rb_const_set(cbase, id, val);
549
+ }
550
+ #line 551 "vm.inc"
551
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
552
+ CHECK_CANARY();
553
+ INC_SP(INSN_ATTR(sp_inc));
554
+ if (leaf) ADD_PC(INSN_ATTR(width));
555
+ END_INSN(setconstant);
556
+ # undef INSN_ATTR
557
+ # undef NAME_OF_CURRENT_INSN
558
+ }
559
+
560
+ /* insn getglobal(entry)()(val) */
561
+ INSN_ENTRY(getglobal)
562
+ {
563
+ # define NAME_OF_CURRENT_INSN getglobal
564
+ # define INSN_ATTR(x) attr_ ## x ## _getglobal(entry)
565
+ bool leaf;
566
+ MAYBE_UNUSED(VALUE *) canary;
567
+ MAYBE_UNUSED(GENTRY) entry;
568
+ MAYBE_UNUSED(VALUE) val;
569
+
570
+ START_OF_ORIGINAL_INSN(getglobal);
571
+ entry = (GENTRY)GET_OPERAND(1);
572
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
573
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
574
+ SETUP_CANARY();
575
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
576
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, entry);
577
+ #line 292 "insns.def"
578
+ {
579
+ val = GET_GLOBAL((VALUE)entry);
580
+ }
581
+ #line 582 "vm.inc"
582
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
583
+ CHECK_CANARY();
584
+ INC_SP(INSN_ATTR(sp_inc));
585
+ TOPN(0) = val;
586
+ if (leaf) ADD_PC(INSN_ATTR(width));
587
+ END_INSN(getglobal);
588
+ # undef INSN_ATTR
589
+ # undef NAME_OF_CURRENT_INSN
590
+ }
591
+
592
+ /* insn setglobal(entry)(val)() */
593
+ INSN_ENTRY(setglobal)
594
+ {
595
+ # define NAME_OF_CURRENT_INSN setglobal
596
+ # define INSN_ATTR(x) attr_ ## x ## _setglobal(entry)
597
+ bool leaf;
598
+ MAYBE_UNUSED(VALUE *) canary;
599
+ MAYBE_UNUSED(GENTRY) entry;
600
+ MAYBE_UNUSED(VALUE) val;
601
+
602
+ START_OF_ORIGINAL_INSN(setglobal);
603
+ entry = (GENTRY)GET_OPERAND(1);
604
+ val = TOPN(0);
605
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
606
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
607
+ SETUP_CANARY();
608
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
609
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, entry);
610
+ #line 303 "insns.def"
611
+ {
612
+ SET_GLOBAL((VALUE)entry, val);
613
+ }
614
+ #line 615 "vm.inc"
615
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
616
+ CHECK_CANARY();
617
+ INC_SP(INSN_ATTR(sp_inc));
618
+ if (leaf) ADD_PC(INSN_ATTR(width));
619
+ END_INSN(setglobal);
620
+ # undef INSN_ATTR
621
+ # undef NAME_OF_CURRENT_INSN
622
+ }
623
+
624
+ /* insn putnil()()(val) */
625
+ INSN_ENTRY(putnil)
626
+ {
627
+ # define NAME_OF_CURRENT_INSN putnil
628
+ # define INSN_ATTR(x) attr_ ## x ## _putnil()
629
+ bool leaf;
630
+ MAYBE_UNUSED(VALUE *) canary;
631
+ MAYBE_UNUSED(VALUE) val;
632
+
633
+ START_OF_ORIGINAL_INSN(putnil);
634
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
635
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
636
+ SETUP_CANARY();
637
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
638
+ #line 317 "insns.def"
639
+ {
640
+ val = Qnil;
641
+ }
642
+ #line 643 "vm.inc"
643
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
644
+ CHECK_CANARY();
645
+ INC_SP(INSN_ATTR(sp_inc));
646
+ TOPN(0) = val;
647
+ if (leaf) ADD_PC(INSN_ATTR(width));
648
+ END_INSN(putnil);
649
+ # undef INSN_ATTR
650
+ # undef NAME_OF_CURRENT_INSN
651
+ }
652
+
653
+ /* insn putself()()(val) */
654
+ INSN_ENTRY(putself)
655
+ {
656
+ # define NAME_OF_CURRENT_INSN putself
657
+ # define INSN_ATTR(x) attr_ ## x ## _putself()
658
+ bool leaf;
659
+ MAYBE_UNUSED(VALUE *) canary;
660
+ MAYBE_UNUSED(VALUE) val;
661
+
662
+ START_OF_ORIGINAL_INSN(putself);
663
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
664
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
665
+ SETUP_CANARY();
666
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
667
+ #line 327 "insns.def"
668
+ {
669
+ val = GET_SELF();
670
+ }
671
+ #line 672 "vm.inc"
672
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
673
+ CHECK_CANARY();
674
+ INC_SP(INSN_ATTR(sp_inc));
675
+ TOPN(0) = val;
676
+ if (leaf) ADD_PC(INSN_ATTR(width));
677
+ END_INSN(putself);
678
+ # undef INSN_ATTR
679
+ # undef NAME_OF_CURRENT_INSN
680
+ }
681
+
682
+ /* insn putobject(val)()(val) */
683
+ INSN_ENTRY(putobject)
684
+ {
685
+ # define NAME_OF_CURRENT_INSN putobject
686
+ # define INSN_ATTR(x) attr_ ## x ## _putobject(val)
687
+ bool leaf;
688
+ MAYBE_UNUSED(VALUE *) canary;
689
+ MAYBE_UNUSED(VALUE) val;
690
+
691
+ START_OF_ORIGINAL_INSN(putobject);
692
+ val = (VALUE)GET_OPERAND(1);
693
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
694
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
695
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
696
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, val);
697
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
698
+ INC_SP(INSN_ATTR(sp_inc));
699
+ TOPN(0) = val;
700
+ if (leaf) ADD_PC(INSN_ATTR(width));
701
+ END_INSN(putobject);
702
+ # undef INSN_ATTR
703
+ # undef NAME_OF_CURRENT_INSN
704
+ }
705
+
706
+ /* insn putspecialobject(value_type)()(val) */
707
+ INSN_ENTRY(putspecialobject)
708
+ {
709
+ # define NAME_OF_CURRENT_INSN putspecialobject
710
+ # define INSN_ATTR(x) attr_ ## x ## _putspecialobject(value_type)
711
+ bool leaf;
712
+ MAYBE_UNUSED(VALUE *) canary;
713
+ MAYBE_UNUSED(VALUE) val;
714
+ MAYBE_UNUSED(rb_num_t) value_type;
715
+
716
+ START_OF_ORIGINAL_INSN(putspecialobject);
717
+ value_type = (rb_num_t)GET_OPERAND(1);
718
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
719
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
720
+ SETUP_CANARY();
721
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
722
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, value_type);
723
+ #line 349 "insns.def"
724
+ {
725
+ enum vm_special_object_type type;
726
+
727
+ type = (enum vm_special_object_type)value_type;
728
+ val = vm_get_special_object(GET_EP(), type);
729
+ }
730
+ #line 731 "vm.inc"
731
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
732
+ CHECK_CANARY();
733
+ INC_SP(INSN_ATTR(sp_inc));
734
+ TOPN(0) = val;
735
+ if (leaf) ADD_PC(INSN_ATTR(width));
736
+ END_INSN(putspecialobject);
737
+ # undef INSN_ATTR
738
+ # undef NAME_OF_CURRENT_INSN
739
+ }
740
+
741
+ /* insn putiseq(iseq)()(ret) */
742
+ INSN_ENTRY(putiseq)
743
+ {
744
+ # define NAME_OF_CURRENT_INSN putiseq
745
+ # define INSN_ATTR(x) attr_ ## x ## _putiseq(iseq)
746
+ bool leaf;
747
+ MAYBE_UNUSED(VALUE *) canary;
748
+ MAYBE_UNUSED(ISEQ) iseq;
749
+ MAYBE_UNUSED(VALUE) ret;
750
+
751
+ START_OF_ORIGINAL_INSN(putiseq);
752
+ iseq = (ISEQ)GET_OPERAND(1);
753
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
754
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
755
+ SETUP_CANARY();
756
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
757
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, iseq);
758
+ #line 363 "insns.def"
759
+ {
760
+ ret = (VALUE)iseq;
761
+ }
762
+ #line 763 "vm.inc"
763
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
764
+ CHECK_CANARY();
765
+ INC_SP(INSN_ATTR(sp_inc));
766
+ TOPN(0) = ret;
767
+ if (leaf) ADD_PC(INSN_ATTR(width));
768
+ END_INSN(putiseq);
769
+ # undef INSN_ATTR
770
+ # undef NAME_OF_CURRENT_INSN
771
+ }
772
+
773
+ /* insn putstring(str)()(val) */
774
+ INSN_ENTRY(putstring)
775
+ {
776
+ # define NAME_OF_CURRENT_INSN putstring
777
+ # define INSN_ATTR(x) attr_ ## x ## _putstring(str)
778
+ bool leaf;
779
+ MAYBE_UNUSED(VALUE *) canary;
780
+ MAYBE_UNUSED(VALUE) str, val;
781
+
782
+ START_OF_ORIGINAL_INSN(putstring);
783
+ str = (VALUE)GET_OPERAND(1);
784
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
785
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
786
+ SETUP_CANARY();
787
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
788
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, str);
789
+ #line 373 "insns.def"
790
+ {
791
+ val = rb_str_resurrect(str);
792
+ }
793
+ #line 794 "vm.inc"
794
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
795
+ CHECK_CANARY();
796
+ INC_SP(INSN_ATTR(sp_inc));
797
+ TOPN(0) = val;
798
+ if (leaf) ADD_PC(INSN_ATTR(width));
799
+ END_INSN(putstring);
800
+ # undef INSN_ATTR
801
+ # undef NAME_OF_CURRENT_INSN
802
+ }
803
+
804
+ /* insn concatstrings(num)(...)(val) */
805
+ INSN_ENTRY(concatstrings)
806
+ {
807
+ # define NAME_OF_CURRENT_INSN concatstrings
808
+ # define INSN_ATTR(x) attr_ ## x ## _concatstrings(num)
809
+ bool leaf;
810
+ MAYBE_UNUSED(VALUE *) canary;
811
+ MAYBE_UNUSED(VALUE) val;
812
+ MAYBE_UNUSED(rb_num_t) num;
813
+
814
+ START_OF_ORIGINAL_INSN(concatstrings);
815
+ num = (rb_num_t)GET_OPERAND(1);
816
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
817
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
818
+ SETUP_CANARY();
819
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
820
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
821
+ #line 384 "insns.def"
822
+ {
823
+ val = rb_str_concat_literals(num, STACK_ADDR_FROM_TOP(num));
824
+ }
825
+ #line 826 "vm.inc"
826
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
827
+ CHECK_CANARY();
828
+ INC_SP(INSN_ATTR(sp_inc));
829
+ TOPN(0) = val;
830
+ if (leaf) ADD_PC(INSN_ATTR(width));
831
+ END_INSN(concatstrings);
832
+ # undef INSN_ATTR
833
+ # undef NAME_OF_CURRENT_INSN
834
+ }
835
+
836
+ /* insn tostring()(val, str)(val) */
837
+ INSN_ENTRY(tostring)
838
+ {
839
+ # define NAME_OF_CURRENT_INSN tostring
840
+ # define INSN_ATTR(x) attr_ ## x ## _tostring()
841
+ bool leaf;
842
+ MAYBE_UNUSED(VALUE *) canary;
843
+ MAYBE_UNUSED(VALUE) str, val;
844
+
845
+ START_OF_ORIGINAL_INSN(tostring);
846
+ val = TOPN(1);
847
+ str = TOPN(0);
848
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
849
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
850
+ SETUP_CANARY();
851
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
852
+ #line 394 "insns.def"
853
+ {
854
+ val = rb_obj_as_string_result(str, val);
855
+ }
856
+ #line 857 "vm.inc"
857
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
858
+ CHECK_CANARY();
859
+ INC_SP(INSN_ATTR(sp_inc));
860
+ TOPN(0) = val;
861
+ if (leaf) ADD_PC(INSN_ATTR(width));
862
+ END_INSN(tostring);
863
+ # undef INSN_ATTR
864
+ # undef NAME_OF_CURRENT_INSN
865
+ }
866
+
867
+ /* insn freezestring(debug_info)(str)(str) */
868
+ INSN_ENTRY(freezestring)
869
+ {
870
+ # define NAME_OF_CURRENT_INSN freezestring
871
+ # define INSN_ATTR(x) attr_ ## x ## _freezestring(debug_info)
872
+ bool leaf;
873
+ MAYBE_UNUSED(VALUE *) canary;
874
+ MAYBE_UNUSED(VALUE) debug_info, str;
875
+
876
+ START_OF_ORIGINAL_INSN(freezestring);
877
+ debug_info = (VALUE)GET_OPERAND(1);
878
+ str = TOPN(0);
879
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
880
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
881
+ SETUP_CANARY();
882
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
883
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, debug_info);
884
+ #line 404 "insns.def"
885
+ {
886
+ vm_freezestring(str, debug_info);
887
+ }
888
+ #line 889 "vm.inc"
889
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
890
+ CHECK_CANARY();
891
+ INC_SP(INSN_ATTR(sp_inc));
892
+ TOPN(0) = str;
893
+ if (leaf) ADD_PC(INSN_ATTR(width));
894
+ END_INSN(freezestring);
895
+ # undef INSN_ATTR
896
+ # undef NAME_OF_CURRENT_INSN
897
+ }
898
+
899
+ /* insn toregexp(opt, cnt)(...)(val) */
900
+ INSN_ENTRY(toregexp)
901
+ {
902
+ # define NAME_OF_CURRENT_INSN toregexp
903
+ # define INSN_ATTR(x) attr_ ## x ## _toregexp(opt, cnt)
904
+ bool leaf;
905
+ MAYBE_UNUSED(VALUE *) canary;
906
+ MAYBE_UNUSED(VALUE) val;
907
+ MAYBE_UNUSED(rb_num_t) cnt, opt;
908
+
909
+ START_OF_ORIGINAL_INSN(toregexp);
910
+ opt = (rb_num_t)GET_OPERAND(1);
911
+ cnt = (rb_num_t)GET_OPERAND(2);
912
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
913
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
914
+ SETUP_CANARY();
915
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
916
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, opt);
917
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cnt);
918
+ #line 420 "insns.def"
919
+ {
920
+ const VALUE ary = rb_ary_tmp_new_from_values(0, cnt, STACK_ADDR_FROM_TOP(cnt));
921
+ val = rb_reg_new_ary(ary, (int)opt);
922
+ rb_ary_clear(ary);
923
+ }
924
+ #line 925 "vm.inc"
925
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
926
+ CHECK_CANARY();
927
+ INC_SP(INSN_ATTR(sp_inc));
928
+ TOPN(0) = val;
929
+ if (leaf) ADD_PC(INSN_ATTR(width));
930
+ END_INSN(toregexp);
931
+ # undef INSN_ATTR
932
+ # undef NAME_OF_CURRENT_INSN
933
+ }
934
+
935
+ /* insn intern()(str)(sym) */
936
+ INSN_ENTRY(intern)
937
+ {
938
+ # define NAME_OF_CURRENT_INSN intern
939
+ # define INSN_ATTR(x) attr_ ## x ## _intern()
940
+ bool leaf;
941
+ MAYBE_UNUSED(VALUE *) canary;
942
+ MAYBE_UNUSED(VALUE) str, sym;
943
+
944
+ START_OF_ORIGINAL_INSN(intern);
945
+ str = TOPN(0);
946
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
947
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
948
+ SETUP_CANARY();
949
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
950
+ #line 432 "insns.def"
951
+ {
952
+ sym = rb_str_intern(str);
953
+ }
954
+ #line 955 "vm.inc"
955
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
956
+ CHECK_CANARY();
957
+ INC_SP(INSN_ATTR(sp_inc));
958
+ TOPN(0) = sym;
959
+ if (leaf) ADD_PC(INSN_ATTR(width));
960
+ END_INSN(intern);
961
+ # undef INSN_ATTR
962
+ # undef NAME_OF_CURRENT_INSN
963
+ }
964
+
965
+ /* insn newarray(num)(...)(val) */
966
+ INSN_ENTRY(newarray)
967
+ {
968
+ # define NAME_OF_CURRENT_INSN newarray
969
+ # define INSN_ATTR(x) attr_ ## x ## _newarray(num)
970
+ bool leaf;
971
+ MAYBE_UNUSED(VALUE *) canary;
972
+ MAYBE_UNUSED(VALUE) val;
973
+ MAYBE_UNUSED(rb_num_t) num;
974
+
975
+ START_OF_ORIGINAL_INSN(newarray);
976
+ num = (rb_num_t)GET_OPERAND(1);
977
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
978
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
979
+ SETUP_CANARY();
980
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
981
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
982
+ #line 443 "insns.def"
983
+ {
984
+ val = rb_ary_new4(num, STACK_ADDR_FROM_TOP(num));
985
+ }
986
+ #line 987 "vm.inc"
987
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
988
+ CHECK_CANARY();
989
+ INC_SP(INSN_ATTR(sp_inc));
990
+ TOPN(0) = val;
991
+ if (leaf) ADD_PC(INSN_ATTR(width));
992
+ END_INSN(newarray);
993
+ # undef INSN_ATTR
994
+ # undef NAME_OF_CURRENT_INSN
995
+ }
996
+
997
+ /* insn duparray(ary)()(val) */
998
+ INSN_ENTRY(duparray)
999
+ {
1000
+ # define NAME_OF_CURRENT_INSN duparray
1001
+ # define INSN_ATTR(x) attr_ ## x ## _duparray(ary)
1002
+ bool leaf;
1003
+ MAYBE_UNUSED(VALUE *) canary;
1004
+ MAYBE_UNUSED(VALUE) ary, val;
1005
+
1006
+ START_OF_ORIGINAL_INSN(duparray);
1007
+ ary = (VALUE)GET_OPERAND(1);
1008
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1009
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1010
+ SETUP_CANARY();
1011
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1012
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ary);
1013
+ #line 453 "insns.def"
1014
+ {
1015
+ val = rb_ary_resurrect(ary);
1016
+ }
1017
+ #line 1018 "vm.inc"
1018
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1019
+ CHECK_CANARY();
1020
+ INC_SP(INSN_ATTR(sp_inc));
1021
+ TOPN(0) = val;
1022
+ if (leaf) ADD_PC(INSN_ATTR(width));
1023
+ END_INSN(duparray);
1024
+ # undef INSN_ATTR
1025
+ # undef NAME_OF_CURRENT_INSN
1026
+ }
1027
+
1028
+ /* insn duphash(hash)()(val) */
1029
+ INSN_ENTRY(duphash)
1030
+ {
1031
+ # define NAME_OF_CURRENT_INSN duphash
1032
+ # define INSN_ATTR(x) attr_ ## x ## _duphash(hash)
1033
+ bool leaf;
1034
+ MAYBE_UNUSED(VALUE *) canary;
1035
+ MAYBE_UNUSED(VALUE) hash, val;
1036
+
1037
+ START_OF_ORIGINAL_INSN(duphash);
1038
+ hash = (VALUE)GET_OPERAND(1);
1039
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1040
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1041
+ SETUP_CANARY();
1042
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1043
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, hash);
1044
+ #line 463 "insns.def"
1045
+ {
1046
+ val = rb_hash_resurrect(hash);
1047
+ }
1048
+ #line 1049 "vm.inc"
1049
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1050
+ CHECK_CANARY();
1051
+ INC_SP(INSN_ATTR(sp_inc));
1052
+ TOPN(0) = val;
1053
+ if (leaf) ADD_PC(INSN_ATTR(width));
1054
+ END_INSN(duphash);
1055
+ # undef INSN_ATTR
1056
+ # undef NAME_OF_CURRENT_INSN
1057
+ }
1058
+
1059
+ /* insn expandarray(num, flag)(..., ary)(...) */
1060
+ INSN_ENTRY(expandarray)
1061
+ {
1062
+ # define NAME_OF_CURRENT_INSN expandarray
1063
+ # define INSN_ATTR(x) attr_ ## x ## _expandarray(num, flag)
1064
+ bool leaf;
1065
+ MAYBE_UNUSED(VALUE *) canary;
1066
+ MAYBE_UNUSED(VALUE) ary;
1067
+ MAYBE_UNUSED(rb_num_t) flag, num;
1068
+
1069
+ START_OF_ORIGINAL_INSN(expandarray);
1070
+ num = (rb_num_t)GET_OPERAND(1);
1071
+ flag = (rb_num_t)GET_OPERAND(2);
1072
+ ary = TOPN(0);
1073
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1074
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1075
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1076
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
1077
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, flag);
1078
+ #line 483 "insns.def"
1079
+ {
1080
+ vm_expandarray(GET_SP(), ary, num, (int)flag);
1081
+ }
1082
+ #line 1083 "vm.inc"
1083
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1084
+ INC_SP(INSN_ATTR(sp_inc));
1085
+ if (leaf) ADD_PC(INSN_ATTR(width));
1086
+ END_INSN(expandarray);
1087
+ # undef INSN_ATTR
1088
+ # undef NAME_OF_CURRENT_INSN
1089
+ }
1090
+
1091
+ /* insn concatarray()(ary1, ary2)(ary) */
1092
+ INSN_ENTRY(concatarray)
1093
+ {
1094
+ # define NAME_OF_CURRENT_INSN concatarray
1095
+ # define INSN_ATTR(x) attr_ ## x ## _concatarray()
1096
+ bool leaf;
1097
+ MAYBE_UNUSED(VALUE *) canary;
1098
+ MAYBE_UNUSED(VALUE) ary, ary1, ary2;
1099
+
1100
+ START_OF_ORIGINAL_INSN(concatarray);
1101
+ ary1 = TOPN(1);
1102
+ ary2 = TOPN(0);
1103
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1104
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1105
+ SETUP_CANARY();
1106
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1107
+ #line 494 "insns.def"
1108
+ {
1109
+ ary = vm_concat_array(ary1, ary2);
1110
+ }
1111
+ #line 1112 "vm.inc"
1112
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1113
+ CHECK_CANARY();
1114
+ INC_SP(INSN_ATTR(sp_inc));
1115
+ TOPN(0) = ary;
1116
+ if (leaf) ADD_PC(INSN_ATTR(width));
1117
+ END_INSN(concatarray);
1118
+ # undef INSN_ATTR
1119
+ # undef NAME_OF_CURRENT_INSN
1120
+ }
1121
+
1122
+ /* insn splatarray(flag)(ary)(obj) */
1123
+ INSN_ENTRY(splatarray)
1124
+ {
1125
+ # define NAME_OF_CURRENT_INSN splatarray
1126
+ # define INSN_ATTR(x) attr_ ## x ## _splatarray(flag)
1127
+ bool leaf;
1128
+ MAYBE_UNUSED(VALUE *) canary;
1129
+ MAYBE_UNUSED(VALUE) ary, flag, obj;
1130
+
1131
+ START_OF_ORIGINAL_INSN(splatarray);
1132
+ flag = (VALUE)GET_OPERAND(1);
1133
+ ary = TOPN(0);
1134
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1135
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1136
+ SETUP_CANARY();
1137
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1138
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, flag);
1139
+ #line 505 "insns.def"
1140
+ {
1141
+ obj = vm_splat_array(flag, ary);
1142
+ }
1143
+ #line 1144 "vm.inc"
1144
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1145
+ CHECK_CANARY();
1146
+ INC_SP(INSN_ATTR(sp_inc));
1147
+ TOPN(0) = obj;
1148
+ if (leaf) ADD_PC(INSN_ATTR(width));
1149
+ END_INSN(splatarray);
1150
+ # undef INSN_ATTR
1151
+ # undef NAME_OF_CURRENT_INSN
1152
+ }
1153
+
1154
+ /* insn newhash(num)(...)(val) */
1155
+ INSN_ENTRY(newhash)
1156
+ {
1157
+ # define NAME_OF_CURRENT_INSN newhash
1158
+ # define INSN_ATTR(x) attr_ ## x ## _newhash(num)
1159
+ bool leaf;
1160
+ MAYBE_UNUSED(VALUE *) canary;
1161
+ MAYBE_UNUSED(VALUE) val;
1162
+ MAYBE_UNUSED(rb_num_t) num;
1163
+
1164
+ START_OF_ORIGINAL_INSN(newhash);
1165
+ num = (rb_num_t)GET_OPERAND(1);
1166
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1167
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1168
+ SETUP_CANARY();
1169
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1170
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
1171
+ #line 517 "insns.def"
1172
+ {
1173
+ RUBY_DTRACE_CREATE_HOOK(HASH, num);
1174
+
1175
+ val = rb_hash_new_with_size(num / 2);
1176
+
1177
+ if (num) {
1178
+ rb_hash_bulk_insert(num, STACK_ADDR_FROM_TOP(num), val);
1179
+ }
1180
+ }
1181
+ #line 1182 "vm.inc"
1182
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1183
+ CHECK_CANARY();
1184
+ INC_SP(INSN_ATTR(sp_inc));
1185
+ TOPN(0) = val;
1186
+ if (leaf) ADD_PC(INSN_ATTR(width));
1187
+ END_INSN(newhash);
1188
+ # undef INSN_ATTR
1189
+ # undef NAME_OF_CURRENT_INSN
1190
+ }
1191
+
1192
+ /* insn newrange(flag)(low, high)(val) */
1193
+ INSN_ENTRY(newrange)
1194
+ {
1195
+ # define NAME_OF_CURRENT_INSN newrange
1196
+ # define INSN_ATTR(x) attr_ ## x ## _newrange(flag)
1197
+ bool leaf;
1198
+ MAYBE_UNUSED(VALUE *) canary;
1199
+ MAYBE_UNUSED(VALUE) high, low, val;
1200
+ MAYBE_UNUSED(rb_num_t) flag;
1201
+
1202
+ START_OF_ORIGINAL_INSN(newrange);
1203
+ flag = (rb_num_t)GET_OPERAND(1);
1204
+ low = TOPN(1);
1205
+ high = TOPN(0);
1206
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1207
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1208
+ SETUP_CANARY();
1209
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1210
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, flag);
1211
+ #line 535 "insns.def"
1212
+ {
1213
+ val = rb_range_new(low, high, (int)flag);
1214
+ }
1215
+ #line 1216 "vm.inc"
1216
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1217
+ CHECK_CANARY();
1218
+ INC_SP(INSN_ATTR(sp_inc));
1219
+ TOPN(0) = val;
1220
+ if (leaf) ADD_PC(INSN_ATTR(width));
1221
+ END_INSN(newrange);
1222
+ # undef INSN_ATTR
1223
+ # undef NAME_OF_CURRENT_INSN
1224
+ }
1225
+
1226
+ /* insn pop()(val)() */
1227
+ INSN_ENTRY(pop)
1228
+ {
1229
+ # define NAME_OF_CURRENT_INSN pop
1230
+ # define INSN_ATTR(x) attr_ ## x ## _pop()
1231
+ bool leaf;
1232
+ MAYBE_UNUSED(VALUE *) canary;
1233
+ MAYBE_UNUSED(VALUE) val;
1234
+
1235
+ START_OF_ORIGINAL_INSN(pop);
1236
+ val = TOPN(0);
1237
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1238
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1239
+ SETUP_CANARY();
1240
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1241
+ #line 549 "insns.def"
1242
+ {
1243
+ (void)val;
1244
+ /* none */
1245
+ }
1246
+ #line 1247 "vm.inc"
1247
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1248
+ CHECK_CANARY();
1249
+ INC_SP(INSN_ATTR(sp_inc));
1250
+ if (leaf) ADD_PC(INSN_ATTR(width));
1251
+ END_INSN(pop);
1252
+ # undef INSN_ATTR
1253
+ # undef NAME_OF_CURRENT_INSN
1254
+ }
1255
+
1256
+ /* insn dup()(val)(val1, val2) */
1257
+ INSN_ENTRY(dup)
1258
+ {
1259
+ # define NAME_OF_CURRENT_INSN dup
1260
+ # define INSN_ATTR(x) attr_ ## x ## _dup()
1261
+ bool leaf;
1262
+ MAYBE_UNUSED(VALUE *) canary;
1263
+ MAYBE_UNUSED(VALUE) val, val1, val2;
1264
+
1265
+ START_OF_ORIGINAL_INSN(dup);
1266
+ val = TOPN(0);
1267
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1268
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1269
+ SETUP_CANARY();
1270
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1271
+ #line 560 "insns.def"
1272
+ {
1273
+ val1 = val2 = val;
1274
+ }
1275
+ #line 1276 "vm.inc"
1276
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1277
+ CHECK_CANARY();
1278
+ INC_SP(INSN_ATTR(sp_inc));
1279
+ TOPN(0) = val2;
1280
+ TOPN(1) = val1;
1281
+ if (leaf) ADD_PC(INSN_ATTR(width));
1282
+ END_INSN(dup);
1283
+ # undef INSN_ATTR
1284
+ # undef NAME_OF_CURRENT_INSN
1285
+ }
1286
+
1287
+ /* insn dupn(n)(...)(...) */
1288
+ INSN_ENTRY(dupn)
1289
+ {
1290
+ # define NAME_OF_CURRENT_INSN dupn
1291
+ # define INSN_ATTR(x) attr_ ## x ## _dupn(n)
1292
+ bool leaf;
1293
+ MAYBE_UNUSED(VALUE *) canary;
1294
+ MAYBE_UNUSED(rb_num_t) n;
1295
+
1296
+ START_OF_ORIGINAL_INSN(dupn);
1297
+ n = (rb_num_t)GET_OPERAND(1);
1298
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1299
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1300
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1301
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, n);
1302
+ #line 571 "insns.def"
1303
+ {
1304
+ void *dst = GET_SP();
1305
+ void *src = STACK_ADDR_FROM_TOP(n);
1306
+
1307
+ MEMCPY(dst, src, VALUE, n);
1308
+ }
1309
+ #line 1310 "vm.inc"
1310
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1311
+ INC_SP(INSN_ATTR(sp_inc));
1312
+ if (leaf) ADD_PC(INSN_ATTR(width));
1313
+ END_INSN(dupn);
1314
+ # undef INSN_ATTR
1315
+ # undef NAME_OF_CURRENT_INSN
1316
+ }
1317
+
1318
+ /* insn swap()(val, obj)(obj, val) */
1319
+ INSN_ENTRY(swap)
1320
+ {
1321
+ # define NAME_OF_CURRENT_INSN swap
1322
+ # define INSN_ATTR(x) attr_ ## x ## _swap()
1323
+ bool leaf;
1324
+ MAYBE_UNUSED(VALUE *) canary;
1325
+ MAYBE_UNUSED(VALUE) obj, val;
1326
+
1327
+ START_OF_ORIGINAL_INSN(swap);
1328
+ val = TOPN(1);
1329
+ obj = TOPN(0);
1330
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1331
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1332
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1333
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1334
+ INC_SP(INSN_ATTR(sp_inc));
1335
+ TOPN(0) = val;
1336
+ TOPN(1) = obj;
1337
+ if (leaf) ADD_PC(INSN_ATTR(width));
1338
+ END_INSN(swap);
1339
+ # undef INSN_ATTR
1340
+ # undef NAME_OF_CURRENT_INSN
1341
+ }
1342
+
1343
+ /* insn reverse(n)(...)(...) */
1344
+ INSN_ENTRY(reverse)
1345
+ {
1346
+ # define NAME_OF_CURRENT_INSN reverse
1347
+ # define INSN_ATTR(x) attr_ ## x ## _reverse(n)
1348
+ bool leaf;
1349
+ MAYBE_UNUSED(VALUE *) canary;
1350
+ MAYBE_UNUSED(rb_num_t) n;
1351
+
1352
+ START_OF_ORIGINAL_INSN(reverse);
1353
+ n = (rb_num_t)GET_OPERAND(1);
1354
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1355
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1356
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1357
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, n);
1358
+ #line 595 "insns.def"
1359
+ {
1360
+ rb_num_t i;
1361
+ VALUE *sp = STACK_ADDR_FROM_TOP(n);
1362
+
1363
+ for (i=0; i<n/2; i++) {
1364
+ VALUE v0 = sp[i];
1365
+ VALUE v1 = TOPN(i);
1366
+ sp[i] = v1;
1367
+ TOPN(i) = v0;
1368
+ }
1369
+ }
1370
+ #line 1371 "vm.inc"
1371
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1372
+ INC_SP(INSN_ATTR(sp_inc));
1373
+ if (leaf) ADD_PC(INSN_ATTR(width));
1374
+ END_INSN(reverse);
1375
+ # undef INSN_ATTR
1376
+ # undef NAME_OF_CURRENT_INSN
1377
+ }
1378
+
1379
+ /* insn reput()(..., val)(val) */
1380
+ INSN_ENTRY(reput)
1381
+ {
1382
+ # define NAME_OF_CURRENT_INSN reput
1383
+ # define INSN_ATTR(x) attr_ ## x ## _reput()
1384
+ bool leaf;
1385
+ MAYBE_UNUSED(VALUE *) canary;
1386
+ MAYBE_UNUSED(VALUE) val;
1387
+
1388
+ START_OF_ORIGINAL_INSN(reput);
1389
+ val = TOPN(0);
1390
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1391
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1392
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1393
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1394
+ INC_SP(INSN_ATTR(sp_inc));
1395
+ TOPN(0) = val;
1396
+ if (leaf) ADD_PC(INSN_ATTR(width));
1397
+ END_INSN(reput);
1398
+ # undef INSN_ATTR
1399
+ # undef NAME_OF_CURRENT_INSN
1400
+ }
1401
+
1402
+ /* insn topn(n)(...)(val) */
1403
+ INSN_ENTRY(topn)
1404
+ {
1405
+ # define NAME_OF_CURRENT_INSN topn
1406
+ # define INSN_ATTR(x) attr_ ## x ## _topn(n)
1407
+ bool leaf;
1408
+ MAYBE_UNUSED(VALUE *) canary;
1409
+ MAYBE_UNUSED(VALUE) val;
1410
+ MAYBE_UNUSED(rb_num_t) n;
1411
+
1412
+ START_OF_ORIGINAL_INSN(topn);
1413
+ n = (rb_num_t)GET_OPERAND(1);
1414
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1415
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1416
+ SETUP_CANARY();
1417
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1418
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, n);
1419
+ #line 625 "insns.def"
1420
+ {
1421
+ val = TOPN(n);
1422
+ }
1423
+ #line 1424 "vm.inc"
1424
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1425
+ CHECK_CANARY();
1426
+ INC_SP(INSN_ATTR(sp_inc));
1427
+ TOPN(0) = val;
1428
+ if (leaf) ADD_PC(INSN_ATTR(width));
1429
+ END_INSN(topn);
1430
+ # undef INSN_ATTR
1431
+ # undef NAME_OF_CURRENT_INSN
1432
+ }
1433
+
1434
+ /* insn setn(n)(..., val)(val) */
1435
+ INSN_ENTRY(setn)
1436
+ {
1437
+ # define NAME_OF_CURRENT_INSN setn
1438
+ # define INSN_ATTR(x) attr_ ## x ## _setn(n)
1439
+ bool leaf;
1440
+ MAYBE_UNUSED(VALUE *) canary;
1441
+ MAYBE_UNUSED(VALUE) val;
1442
+ MAYBE_UNUSED(rb_num_t) n;
1443
+
1444
+ START_OF_ORIGINAL_INSN(setn);
1445
+ n = (rb_num_t)GET_OPERAND(1);
1446
+ val = TOPN(0);
1447
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1448
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1449
+ SETUP_CANARY();
1450
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1451
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, n);
1452
+ #line 636 "insns.def"
1453
+ {
1454
+ TOPN(n) = val;
1455
+ }
1456
+ #line 1457 "vm.inc"
1457
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1458
+ CHECK_CANARY();
1459
+ INC_SP(INSN_ATTR(sp_inc));
1460
+ TOPN(0) = val;
1461
+ if (leaf) ADD_PC(INSN_ATTR(width));
1462
+ END_INSN(setn);
1463
+ # undef INSN_ATTR
1464
+ # undef NAME_OF_CURRENT_INSN
1465
+ }
1466
+
1467
+ /* insn adjuststack(n)(...)(...) */
1468
+ INSN_ENTRY(adjuststack)
1469
+ {
1470
+ # define NAME_OF_CURRENT_INSN adjuststack
1471
+ # define INSN_ATTR(x) attr_ ## x ## _adjuststack(n)
1472
+ bool leaf;
1473
+ MAYBE_UNUSED(VALUE *) canary;
1474
+ MAYBE_UNUSED(rb_num_t) n;
1475
+
1476
+ START_OF_ORIGINAL_INSN(adjuststack);
1477
+ n = (rb_num_t)GET_OPERAND(1);
1478
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1479
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1480
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1481
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, n);
1482
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1483
+ INC_SP(INSN_ATTR(sp_inc));
1484
+ if (leaf) ADD_PC(INSN_ATTR(width));
1485
+ END_INSN(adjuststack);
1486
+ # undef INSN_ATTR
1487
+ # undef NAME_OF_CURRENT_INSN
1488
+ }
1489
+
1490
+ /* insn defined(op_type, obj, needstr)(v)(val) */
1491
+ INSN_ENTRY(defined)
1492
+ {
1493
+ # define NAME_OF_CURRENT_INSN defined
1494
+ # define INSN_ATTR(x) attr_ ## x ## _defined(op_type, obj, needstr)
1495
+ bool leaf;
1496
+ MAYBE_UNUSED(VALUE *) canary;
1497
+ MAYBE_UNUSED(VALUE) needstr, obj, v, val;
1498
+ MAYBE_UNUSED(rb_num_t) op_type;
1499
+
1500
+ START_OF_ORIGINAL_INSN(defined);
1501
+ op_type = (rb_num_t)GET_OPERAND(1);
1502
+ obj = (VALUE)GET_OPERAND(2);
1503
+ needstr = (VALUE)GET_OPERAND(3);
1504
+ v = TOPN(0);
1505
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1506
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1507
+ SETUP_CANARY();
1508
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1509
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, op_type);
1510
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, obj);
1511
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 2, needstr);
1512
+ #line 662 "insns.def"
1513
+ {
1514
+ val = vm_defined(ec, GET_CFP(), op_type, obj, needstr, v);
1515
+ }
1516
+ #line 1517 "vm.inc"
1517
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1518
+ CHECK_CANARY();
1519
+ INC_SP(INSN_ATTR(sp_inc));
1520
+ TOPN(0) = val;
1521
+ if (leaf) ADD_PC(INSN_ATTR(width));
1522
+ END_INSN(defined);
1523
+ # undef INSN_ATTR
1524
+ # undef NAME_OF_CURRENT_INSN
1525
+ }
1526
+
1527
+ /* insn checkmatch(flag)(target, pattern)(result) */
1528
+ INSN_ENTRY(checkmatch)
1529
+ {
1530
+ # define NAME_OF_CURRENT_INSN checkmatch
1531
+ # define INSN_ATTR(x) attr_ ## x ## _checkmatch(flag)
1532
+ bool leaf;
1533
+ MAYBE_UNUSED(VALUE *) canary;
1534
+ MAYBE_UNUSED(VALUE) pattern, result, target;
1535
+ MAYBE_UNUSED(rb_num_t) flag;
1536
+
1537
+ START_OF_ORIGINAL_INSN(checkmatch);
1538
+ flag = (rb_num_t)GET_OPERAND(1);
1539
+ target = TOPN(1);
1540
+ pattern = TOPN(0);
1541
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1542
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1543
+ SETUP_CANARY();
1544
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1545
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, flag);
1546
+ #line 679 "insns.def"
1547
+ {
1548
+ result = vm_check_match(ec, target, pattern, flag);
1549
+ }
1550
+ #line 1551 "vm.inc"
1551
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1552
+ CHECK_CANARY();
1553
+ INC_SP(INSN_ATTR(sp_inc));
1554
+ TOPN(0) = result;
1555
+ if (leaf) ADD_PC(INSN_ATTR(width));
1556
+ END_INSN(checkmatch);
1557
+ # undef INSN_ATTR
1558
+ # undef NAME_OF_CURRENT_INSN
1559
+ }
1560
+
1561
+ /* insn checkkeyword(kw_bits_index, keyword_index)()(ret) */
1562
+ INSN_ENTRY(checkkeyword)
1563
+ {
1564
+ # define NAME_OF_CURRENT_INSN checkkeyword
1565
+ # define INSN_ATTR(x) attr_ ## x ## _checkkeyword(kw_bits_index, keyword_index)
1566
+ bool leaf;
1567
+ MAYBE_UNUSED(VALUE *) canary;
1568
+ MAYBE_UNUSED(VALUE) ret;
1569
+ MAYBE_UNUSED(lindex_t) keyword_index, kw_bits_index;
1570
+
1571
+ START_OF_ORIGINAL_INSN(checkkeyword);
1572
+ kw_bits_index = (lindex_t)GET_OPERAND(1);
1573
+ keyword_index = (lindex_t)GET_OPERAND(2);
1574
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1575
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1576
+ SETUP_CANARY();
1577
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1578
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, kw_bits_index);
1579
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, keyword_index);
1580
+ #line 689 "insns.def"
1581
+ {
1582
+ ret = vm_check_keyword(kw_bits_index, keyword_index, GET_EP());
1583
+ }
1584
+ #line 1585 "vm.inc"
1585
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1586
+ CHECK_CANARY();
1587
+ INC_SP(INSN_ATTR(sp_inc));
1588
+ TOPN(0) = ret;
1589
+ if (leaf) ADD_PC(INSN_ATTR(width));
1590
+ END_INSN(checkkeyword);
1591
+ # undef INSN_ATTR
1592
+ # undef NAME_OF_CURRENT_INSN
1593
+ }
1594
+
1595
+ /* insn checktype(type)(val)(ret) */
1596
+ INSN_ENTRY(checktype)
1597
+ {
1598
+ # define NAME_OF_CURRENT_INSN checktype
1599
+ # define INSN_ATTR(x) attr_ ## x ## _checktype(type)
1600
+ bool leaf;
1601
+ MAYBE_UNUSED(VALUE *) canary;
1602
+ MAYBE_UNUSED(VALUE) ret, val;
1603
+ MAYBE_UNUSED(rb_num_t) type;
1604
+
1605
+ START_OF_ORIGINAL_INSN(checktype);
1606
+ type = (rb_num_t)GET_OPERAND(1);
1607
+ val = TOPN(0);
1608
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1609
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1610
+ SETUP_CANARY();
1611
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1612
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, type);
1613
+ #line 699 "insns.def"
1614
+ {
1615
+ ret = (TYPE(val) == (int)type) ? Qtrue : Qfalse;
1616
+ }
1617
+ #line 1618 "vm.inc"
1618
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1619
+ CHECK_CANARY();
1620
+ INC_SP(INSN_ATTR(sp_inc));
1621
+ TOPN(0) = ret;
1622
+ if (leaf) ADD_PC(INSN_ATTR(width));
1623
+ END_INSN(checktype);
1624
+ # undef INSN_ATTR
1625
+ # undef NAME_OF_CURRENT_INSN
1626
+ }
1627
+
1628
+ /* insn defineclass(id, class_iseq, flags)(cbase, super)(val) */
1629
+ INSN_ENTRY(defineclass)
1630
+ {
1631
+ # define NAME_OF_CURRENT_INSN defineclass
1632
+ # define INSN_ATTR(x) attr_ ## x ## _defineclass(id, class_iseq, flags)
1633
+ bool leaf;
1634
+ MAYBE_UNUSED(VALUE *) canary;
1635
+ MAYBE_UNUSED(ID) id;
1636
+ MAYBE_UNUSED(ISEQ) class_iseq;
1637
+ MAYBE_UNUSED(VALUE) cbase, super, val;
1638
+ MAYBE_UNUSED(rb_num_t) flags;
1639
+
1640
+ START_OF_ORIGINAL_INSN(defineclass);
1641
+ id = (ID)GET_OPERAND(1);
1642
+ class_iseq = (ISEQ)GET_OPERAND(2);
1643
+ flags = (rb_num_t)GET_OPERAND(3);
1644
+ cbase = TOPN(1);
1645
+ super = TOPN(0);
1646
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1647
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1648
+ POPN(INSN_ATTR(popn));
1649
+ SETUP_CANARY();
1650
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1651
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
1652
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, class_iseq);
1653
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 2, flags);
1654
+ #line 715 "insns.def"
1655
+ {
1656
+ VALUE klass = vm_find_or_create_class_by_id(id, flags, cbase, super);
1657
+
1658
+ rb_iseq_check(class_iseq);
1659
+
1660
+ /* enter scope */
1661
+ vm_push_frame(ec, class_iseq, VM_FRAME_MAGIC_CLASS | VM_ENV_FLAG_LOCAL, klass,
1662
+ GET_BLOCK_HANDLER(),
1663
+ (VALUE)vm_cref_push(ec, klass, NULL, FALSE),
1664
+ class_iseq->body->iseq_encoded, GET_SP(),
1665
+ class_iseq->body->local_table_size,
1666
+ class_iseq->body->stack_max);
1667
+ RESTORE_REGS();
1668
+ NEXT_INSN();
1669
+ }
1670
+ #line 1671 "vm.inc"
1671
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1672
+ CHECK_CANARY();
1673
+ PUSH(val);
1674
+ if (leaf) ADD_PC(INSN_ATTR(width));
1675
+ END_INSN(defineclass);
1676
+ # undef INSN_ATTR
1677
+ # undef NAME_OF_CURRENT_INSN
1678
+ }
1679
+
1680
+ /* insn send(ci, cc, blockiseq)(...)(val) */
1681
+ INSN_ENTRY(send)
1682
+ {
1683
+ # define NAME_OF_CURRENT_INSN send
1684
+ # define INSN_ATTR(x) attr_ ## x ## _send(ci, cc, blockiseq)
1685
+ bool leaf;
1686
+ MAYBE_UNUSED(VALUE *) canary;
1687
+ MAYBE_UNUSED(CALL_CACHE) cc;
1688
+ MAYBE_UNUSED(CALL_INFO) ci;
1689
+ MAYBE_UNUSED(ISEQ) blockiseq;
1690
+ MAYBE_UNUSED(VALUE) val;
1691
+
1692
+ START_OF_ORIGINAL_INSN(send);
1693
+ ci = (CALL_INFO)GET_OPERAND(1);
1694
+ cc = (CALL_CACHE)GET_OPERAND(2);
1695
+ blockiseq = (ISEQ)GET_OPERAND(3);
1696
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1697
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1698
+ POPN(INSN_ATTR(popn));
1699
+ SETUP_CANARY();
1700
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1701
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
1702
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
1703
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 2, blockiseq);
1704
+ #line 742 "insns.def"
1705
+ {
1706
+ struct rb_calling_info calling;
1707
+
1708
+ calling.block_handler = vm_caller_setup_arg_block(ec, reg_cfp, ci, blockiseq, FALSE);
1709
+ calling.recv = TOPN(calling.argc = ci->orig_argc);
1710
+ vm_search_method(ci, cc, calling.recv);
1711
+ CALL_METHOD(&calling, ci, cc);
1712
+ }
1713
+ #line 1714 "vm.inc"
1714
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1715
+ CHECK_CANARY();
1716
+ PUSH(val);
1717
+ if (leaf) ADD_PC(INSN_ATTR(width));
1718
+ END_INSN(send);
1719
+ # undef INSN_ATTR
1720
+ # undef NAME_OF_CURRENT_INSN
1721
+ }
1722
+
1723
+ /* insn opt_send_without_block(ci, cc)(...)(val) */
1724
+ INSN_ENTRY(opt_send_without_block)
1725
+ {
1726
+ # define NAME_OF_CURRENT_INSN opt_send_without_block
1727
+ # define INSN_ATTR(x) attr_ ## x ## _opt_send_without_block(ci, cc)
1728
+ bool leaf;
1729
+ MAYBE_UNUSED(VALUE *) canary;
1730
+ MAYBE_UNUSED(CALL_CACHE) cc;
1731
+ MAYBE_UNUSED(CALL_INFO) ci;
1732
+ MAYBE_UNUSED(VALUE) val;
1733
+
1734
+ START_OF_ORIGINAL_INSN(opt_send_without_block);
1735
+ ci = (CALL_INFO)GET_OPERAND(1);
1736
+ cc = (CALL_CACHE)GET_OPERAND(2);
1737
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1738
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1739
+ POPN(INSN_ATTR(popn));
1740
+ SETUP_CANARY();
1741
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1742
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
1743
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
1744
+ #line 759 "insns.def"
1745
+ {
1746
+ struct rb_calling_info calling;
1747
+ calling.block_handler = VM_BLOCK_HANDLER_NONE;
1748
+ vm_search_method(ci, cc, calling.recv = TOPN(calling.argc = ci->orig_argc));
1749
+ CALL_METHOD(&calling, ci, cc);
1750
+ }
1751
+ #line 1752 "vm.inc"
1752
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1753
+ CHECK_CANARY();
1754
+ PUSH(val);
1755
+ if (leaf) ADD_PC(INSN_ATTR(width));
1756
+ END_INSN(opt_send_without_block);
1757
+ # undef INSN_ATTR
1758
+ # undef NAME_OF_CURRENT_INSN
1759
+ }
1760
+
1761
+ /* insn opt_str_freeze(str, ci, cc)()(val) */
1762
+ INSN_ENTRY(opt_str_freeze)
1763
+ {
1764
+ # define NAME_OF_CURRENT_INSN opt_str_freeze
1765
+ # define INSN_ATTR(x) attr_ ## x ## _opt_str_freeze(str, ci, cc)
1766
+ bool leaf;
1767
+ MAYBE_UNUSED(VALUE *) canary;
1768
+ MAYBE_UNUSED(CALL_CACHE) cc;
1769
+ MAYBE_UNUSED(CALL_INFO) ci;
1770
+ MAYBE_UNUSED(VALUE) str, val;
1771
+
1772
+ START_OF_ORIGINAL_INSN(opt_str_freeze);
1773
+ str = (VALUE)GET_OPERAND(1);
1774
+ ci = (CALL_INFO)GET_OPERAND(2);
1775
+ cc = (CALL_CACHE)GET_OPERAND(3);
1776
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1777
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1778
+ SETUP_CANARY();
1779
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1780
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, str);
1781
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, ci);
1782
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 2, cc);
1783
+ #line 771 "insns.def"
1784
+ {
1785
+ val = vm_opt_str_freeze(str, BOP_FREEZE, idFreeze);
1786
+
1787
+ if (val == Qundef) {
1788
+ PUSH(rb_str_resurrect(str));
1789
+ CALL_SIMPLE_METHOD();
1790
+ }
1791
+ }
1792
+ #line 1793 "vm.inc"
1793
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1794
+ CHECK_CANARY();
1795
+ INC_SP(INSN_ATTR(sp_inc));
1796
+ TOPN(0) = val;
1797
+ if (leaf) ADD_PC(INSN_ATTR(width));
1798
+ END_INSN(opt_str_freeze);
1799
+ # undef INSN_ATTR
1800
+ # undef NAME_OF_CURRENT_INSN
1801
+ }
1802
+
1803
+ /* insn opt_str_uminus(str, ci, cc)()(val) */
1804
+ INSN_ENTRY(opt_str_uminus)
1805
+ {
1806
+ # define NAME_OF_CURRENT_INSN opt_str_uminus
1807
+ # define INSN_ATTR(x) attr_ ## x ## _opt_str_uminus(str, ci, cc)
1808
+ bool leaf;
1809
+ MAYBE_UNUSED(VALUE *) canary;
1810
+ MAYBE_UNUSED(CALL_CACHE) cc;
1811
+ MAYBE_UNUSED(CALL_INFO) ci;
1812
+ MAYBE_UNUSED(VALUE) str, val;
1813
+
1814
+ START_OF_ORIGINAL_INSN(opt_str_uminus);
1815
+ str = (VALUE)GET_OPERAND(1);
1816
+ ci = (CALL_INFO)GET_OPERAND(2);
1817
+ cc = (CALL_CACHE)GET_OPERAND(3);
1818
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1819
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1820
+ SETUP_CANARY();
1821
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1822
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, str);
1823
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, ci);
1824
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 2, cc);
1825
+ #line 785 "insns.def"
1826
+ {
1827
+ val = vm_opt_str_freeze(str, BOP_UMINUS, idUMinus);
1828
+
1829
+ if (val == Qundef) {
1830
+ PUSH(rb_str_resurrect(str));
1831
+ CALL_SIMPLE_METHOD();
1832
+ }
1833
+ }
1834
+ #line 1835 "vm.inc"
1835
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1836
+ CHECK_CANARY();
1837
+ INC_SP(INSN_ATTR(sp_inc));
1838
+ TOPN(0) = val;
1839
+ if (leaf) ADD_PC(INSN_ATTR(width));
1840
+ END_INSN(opt_str_uminus);
1841
+ # undef INSN_ATTR
1842
+ # undef NAME_OF_CURRENT_INSN
1843
+ }
1844
+
1845
+ /* insn opt_newarray_max(num)(...)(val) */
1846
+ INSN_ENTRY(opt_newarray_max)
1847
+ {
1848
+ # define NAME_OF_CURRENT_INSN opt_newarray_max
1849
+ # define INSN_ATTR(x) attr_ ## x ## _opt_newarray_max(num)
1850
+ bool leaf;
1851
+ MAYBE_UNUSED(VALUE *) canary;
1852
+ MAYBE_UNUSED(VALUE) val;
1853
+ MAYBE_UNUSED(rb_num_t) num;
1854
+
1855
+ START_OF_ORIGINAL_INSN(opt_newarray_max);
1856
+ num = (rb_num_t)GET_OPERAND(1);
1857
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1858
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1859
+ SETUP_CANARY();
1860
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1861
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
1862
+ #line 805 "insns.def"
1863
+ {
1864
+ val = vm_opt_newarray_max(num, STACK_ADDR_FROM_TOP(num));
1865
+ }
1866
+ #line 1867 "vm.inc"
1867
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1868
+ CHECK_CANARY();
1869
+ INC_SP(INSN_ATTR(sp_inc));
1870
+ TOPN(0) = val;
1871
+ if (leaf) ADD_PC(INSN_ATTR(width));
1872
+ END_INSN(opt_newarray_max);
1873
+ # undef INSN_ATTR
1874
+ # undef NAME_OF_CURRENT_INSN
1875
+ }
1876
+
1877
+ /* insn opt_newarray_min(num)(...)(val) */
1878
+ INSN_ENTRY(opt_newarray_min)
1879
+ {
1880
+ # define NAME_OF_CURRENT_INSN opt_newarray_min
1881
+ # define INSN_ATTR(x) attr_ ## x ## _opt_newarray_min(num)
1882
+ bool leaf;
1883
+ MAYBE_UNUSED(VALUE *) canary;
1884
+ MAYBE_UNUSED(VALUE) val;
1885
+ MAYBE_UNUSED(rb_num_t) num;
1886
+
1887
+ START_OF_ORIGINAL_INSN(opt_newarray_min);
1888
+ num = (rb_num_t)GET_OPERAND(1);
1889
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1890
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1891
+ SETUP_CANARY();
1892
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1893
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
1894
+ #line 817 "insns.def"
1895
+ {
1896
+ val = vm_opt_newarray_min(num, STACK_ADDR_FROM_TOP(num));
1897
+ }
1898
+ #line 1899 "vm.inc"
1899
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1900
+ CHECK_CANARY();
1901
+ INC_SP(INSN_ATTR(sp_inc));
1902
+ TOPN(0) = val;
1903
+ if (leaf) ADD_PC(INSN_ATTR(width));
1904
+ END_INSN(opt_newarray_min);
1905
+ # undef INSN_ATTR
1906
+ # undef NAME_OF_CURRENT_INSN
1907
+ }
1908
+
1909
+ /* insn invokesuper(ci, cc, blockiseq)(...)(val) */
1910
+ INSN_ENTRY(invokesuper)
1911
+ {
1912
+ # define NAME_OF_CURRENT_INSN invokesuper
1913
+ # define INSN_ATTR(x) attr_ ## x ## _invokesuper(ci, cc, blockiseq)
1914
+ bool leaf;
1915
+ MAYBE_UNUSED(VALUE *) canary;
1916
+ MAYBE_UNUSED(CALL_CACHE) cc;
1917
+ MAYBE_UNUSED(CALL_INFO) ci;
1918
+ MAYBE_UNUSED(ISEQ) blockiseq;
1919
+ MAYBE_UNUSED(VALUE) val;
1920
+
1921
+ START_OF_ORIGINAL_INSN(invokesuper);
1922
+ ci = (CALL_INFO)GET_OPERAND(1);
1923
+ cc = (CALL_CACHE)GET_OPERAND(2);
1924
+ blockiseq = (ISEQ)GET_OPERAND(3);
1925
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1926
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1927
+ POPN(INSN_ATTR(popn));
1928
+ SETUP_CANARY();
1929
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1930
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
1931
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
1932
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 2, blockiseq);
1933
+ #line 828 "insns.def"
1934
+ {
1935
+ struct rb_calling_info calling;
1936
+
1937
+ calling.block_handler = vm_caller_setup_arg_block(ec, reg_cfp, ci, blockiseq, TRUE);
1938
+ calling.recv = TOPN(calling.argc = ci->orig_argc);
1939
+ vm_search_super_method(ec, GET_CFP(), &calling, ci, cc);
1940
+ CALL_METHOD(&calling, ci, cc);
1941
+ }
1942
+ #line 1943 "vm.inc"
1943
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1944
+ CHECK_CANARY();
1945
+ PUSH(val);
1946
+ if (leaf) ADD_PC(INSN_ATTR(width));
1947
+ END_INSN(invokesuper);
1948
+ # undef INSN_ATTR
1949
+ # undef NAME_OF_CURRENT_INSN
1950
+ }
1951
+
1952
+ /* insn invokeblock(ci)(...)(val) */
1953
+ INSN_ENTRY(invokeblock)
1954
+ {
1955
+ # define NAME_OF_CURRENT_INSN invokeblock
1956
+ # define INSN_ATTR(x) attr_ ## x ## _invokeblock(ci)
1957
+ bool leaf;
1958
+ MAYBE_UNUSED(VALUE *) canary;
1959
+ MAYBE_UNUSED(CALL_INFO) ci;
1960
+ MAYBE_UNUSED(VALUE) val;
1961
+
1962
+ START_OF_ORIGINAL_INSN(invokeblock);
1963
+ ci = (CALL_INFO)GET_OPERAND(1);
1964
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
1965
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
1966
+ POPN(INSN_ATTR(popn));
1967
+ SETUP_CANARY();
1968
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
1969
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
1970
+ #line 845 "insns.def"
1971
+ {
1972
+ struct rb_calling_info calling;
1973
+ VALUE block_handler;
1974
+
1975
+ calling.argc = ci->orig_argc;
1976
+ calling.block_handler = VM_BLOCK_HANDLER_NONE;
1977
+ calling.recv = Qundef; /* should not be used */
1978
+
1979
+ block_handler = VM_CF_BLOCK_HANDLER(GET_CFP());
1980
+ if (block_handler == VM_BLOCK_HANDLER_NONE) {
1981
+ rb_vm_localjump_error("no block given (yield)", Qnil, 0);
1982
+ }
1983
+
1984
+ val = vm_invoke_block(ec, GET_CFP(), &calling, ci, block_handler);
1985
+ if (val == Qundef) {
1986
+ EXEC_EC_CFP(val);
1987
+ }
1988
+ }
1989
+ #line 1990 "vm.inc"
1990
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1991
+ CHECK_CANARY();
1992
+ PUSH(val);
1993
+ if (leaf) ADD_PC(INSN_ATTR(width));
1994
+ END_INSN(invokeblock);
1995
+ # undef INSN_ATTR
1996
+ # undef NAME_OF_CURRENT_INSN
1997
+ }
1998
+
1999
+ /* insn leave()(val)(val) */
2000
+ INSN_ENTRY(leave)
2001
+ {
2002
+ # define NAME_OF_CURRENT_INSN leave
2003
+ # define INSN_ATTR(x) attr_ ## x ## _leave()
2004
+ bool leaf;
2005
+ MAYBE_UNUSED(VALUE *) canary;
2006
+ MAYBE_UNUSED(VALUE) val;
2007
+
2008
+ START_OF_ORIGINAL_INSN(leave);
2009
+ val = TOPN(0);
2010
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2011
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2012
+ POPN(INSN_ATTR(popn));
2013
+ SETUP_CANARY();
2014
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2015
+ #line 875 "insns.def"
2016
+ {
2017
+ if (OPT_CHECKED_RUN) {
2018
+ const VALUE *const bp = vm_base_ptr(reg_cfp);
2019
+ if (reg_cfp->sp != bp) {
2020
+ vm_stack_consistency_error(ec, reg_cfp, bp);
2021
+ }
2022
+ }
2023
+
2024
+ RUBY_VM_CHECK_INTS(ec);
2025
+
2026
+ if (vm_pop_frame(ec, GET_CFP(), GET_EP())) {
2027
+ #if OPT_CALL_THREADED_CODE
2028
+ rb_ec_thread_ptr(ec)->retval = val;
2029
+ return 0;
2030
+ #else
2031
+ return val;
2032
+ #endif
2033
+ }
2034
+ else {
2035
+ RESTORE_REGS();
2036
+ }
2037
+ }
2038
+ #line 2039 "vm.inc"
2039
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2040
+ CHECK_CANARY();
2041
+ PUSH(val);
2042
+ if (leaf) ADD_PC(INSN_ATTR(width));
2043
+ END_INSN(leave);
2044
+ # undef INSN_ATTR
2045
+ # undef NAME_OF_CURRENT_INSN
2046
+ }
2047
+
2048
+ /* insn throw(throw_state)(throwobj)(val) */
2049
+ INSN_ENTRY(throw)
2050
+ {
2051
+ # define NAME_OF_CURRENT_INSN throw
2052
+ # define INSN_ATTR(x) attr_ ## x ## _throw(throw_state)
2053
+ bool leaf;
2054
+ MAYBE_UNUSED(VALUE *) canary;
2055
+ MAYBE_UNUSED(VALUE) throwobj, val;
2056
+ MAYBE_UNUSED(rb_num_t) throw_state;
2057
+
2058
+ START_OF_ORIGINAL_INSN(throw);
2059
+ throw_state = (rb_num_t)GET_OPERAND(1);
2060
+ throwobj = TOPN(0);
2061
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2062
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2063
+ SETUP_CANARY();
2064
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2065
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, throw_state);
2066
+ #line 910 "insns.def"
2067
+ {
2068
+ RUBY_VM_CHECK_INTS(ec);
2069
+ val = vm_throw(ec, GET_CFP(), throw_state, throwobj);
2070
+ THROW_EXCEPTION(val);
2071
+ /* unreachable */
2072
+ }
2073
+ #line 2074 "vm.inc"
2074
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2075
+ CHECK_CANARY();
2076
+ INC_SP(INSN_ATTR(sp_inc));
2077
+ TOPN(0) = val;
2078
+ if (leaf) ADD_PC(INSN_ATTR(width));
2079
+ END_INSN(throw);
2080
+ # undef INSN_ATTR
2081
+ # undef NAME_OF_CURRENT_INSN
2082
+ }
2083
+
2084
+ /* insn jump(dst)()() */
2085
+ INSN_ENTRY(jump)
2086
+ {
2087
+ # define NAME_OF_CURRENT_INSN jump
2088
+ # define INSN_ATTR(x) attr_ ## x ## _jump(dst)
2089
+ bool leaf;
2090
+ MAYBE_UNUSED(VALUE *) canary;
2091
+ MAYBE_UNUSED(OFFSET) dst;
2092
+
2093
+ START_OF_ORIGINAL_INSN(jump);
2094
+ dst = (OFFSET)GET_OPERAND(1);
2095
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2096
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2097
+ SETUP_CANARY();
2098
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2099
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2100
+ #line 929 "insns.def"
2101
+ {
2102
+ RUBY_VM_CHECK_INTS(ec);
2103
+ JUMP(dst);
2104
+ }
2105
+ #line 2106 "vm.inc"
2106
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2107
+ CHECK_CANARY();
2108
+ INC_SP(INSN_ATTR(sp_inc));
2109
+ if (leaf) ADD_PC(INSN_ATTR(width));
2110
+ END_INSN(jump);
2111
+ # undef INSN_ATTR
2112
+ # undef NAME_OF_CURRENT_INSN
2113
+ }
2114
+
2115
+ /* insn branchif(dst)(val)() */
2116
+ INSN_ENTRY(branchif)
2117
+ {
2118
+ # define NAME_OF_CURRENT_INSN branchif
2119
+ # define INSN_ATTR(x) attr_ ## x ## _branchif(dst)
2120
+ bool leaf;
2121
+ MAYBE_UNUSED(VALUE *) canary;
2122
+ MAYBE_UNUSED(OFFSET) dst;
2123
+ MAYBE_UNUSED(VALUE) val;
2124
+
2125
+ START_OF_ORIGINAL_INSN(branchif);
2126
+ dst = (OFFSET)GET_OPERAND(1);
2127
+ val = TOPN(0);
2128
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2129
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2130
+ SETUP_CANARY();
2131
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2132
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2133
+ #line 942 "insns.def"
2134
+ {
2135
+ if (RTEST(val)) {
2136
+ RUBY_VM_CHECK_INTS(ec);
2137
+ JUMP(dst);
2138
+ }
2139
+ }
2140
+ #line 2141 "vm.inc"
2141
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2142
+ CHECK_CANARY();
2143
+ INC_SP(INSN_ATTR(sp_inc));
2144
+ if (leaf) ADD_PC(INSN_ATTR(width));
2145
+ END_INSN(branchif);
2146
+ # undef INSN_ATTR
2147
+ # undef NAME_OF_CURRENT_INSN
2148
+ }
2149
+
2150
+ /* insn branchunless(dst)(val)() */
2151
+ INSN_ENTRY(branchunless)
2152
+ {
2153
+ # define NAME_OF_CURRENT_INSN branchunless
2154
+ # define INSN_ATTR(x) attr_ ## x ## _branchunless(dst)
2155
+ bool leaf;
2156
+ MAYBE_UNUSED(VALUE *) canary;
2157
+ MAYBE_UNUSED(OFFSET) dst;
2158
+ MAYBE_UNUSED(VALUE) val;
2159
+
2160
+ START_OF_ORIGINAL_INSN(branchunless);
2161
+ dst = (OFFSET)GET_OPERAND(1);
2162
+ val = TOPN(0);
2163
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2164
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2165
+ SETUP_CANARY();
2166
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2167
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2168
+ #line 957 "insns.def"
2169
+ {
2170
+ if (!RTEST(val)) {
2171
+ RUBY_VM_CHECK_INTS(ec);
2172
+ JUMP(dst);
2173
+ }
2174
+ }
2175
+ #line 2176 "vm.inc"
2176
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2177
+ CHECK_CANARY();
2178
+ INC_SP(INSN_ATTR(sp_inc));
2179
+ if (leaf) ADD_PC(INSN_ATTR(width));
2180
+ END_INSN(branchunless);
2181
+ # undef INSN_ATTR
2182
+ # undef NAME_OF_CURRENT_INSN
2183
+ }
2184
+
2185
+ /* insn branchnil(dst)(val)() */
2186
+ INSN_ENTRY(branchnil)
2187
+ {
2188
+ # define NAME_OF_CURRENT_INSN branchnil
2189
+ # define INSN_ATTR(x) attr_ ## x ## _branchnil(dst)
2190
+ bool leaf;
2191
+ MAYBE_UNUSED(VALUE *) canary;
2192
+ MAYBE_UNUSED(OFFSET) dst;
2193
+ MAYBE_UNUSED(VALUE) val;
2194
+
2195
+ START_OF_ORIGINAL_INSN(branchnil);
2196
+ dst = (OFFSET)GET_OPERAND(1);
2197
+ val = TOPN(0);
2198
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2199
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2200
+ SETUP_CANARY();
2201
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2202
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2203
+ #line 972 "insns.def"
2204
+ {
2205
+ if (NIL_P(val)) {
2206
+ RUBY_VM_CHECK_INTS(ec);
2207
+ JUMP(dst);
2208
+ }
2209
+ }
2210
+ #line 2211 "vm.inc"
2211
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2212
+ CHECK_CANARY();
2213
+ INC_SP(INSN_ATTR(sp_inc));
2214
+ if (leaf) ADD_PC(INSN_ATTR(width));
2215
+ END_INSN(branchnil);
2216
+ # undef INSN_ATTR
2217
+ # undef NAME_OF_CURRENT_INSN
2218
+ }
2219
+
2220
+ /* insn opt_getinlinecache(dst, ic)()(val) */
2221
+ INSN_ENTRY(opt_getinlinecache)
2222
+ {
2223
+ # define NAME_OF_CURRENT_INSN opt_getinlinecache
2224
+ # define INSN_ATTR(x) attr_ ## x ## _opt_getinlinecache(dst, ic)
2225
+ bool leaf;
2226
+ MAYBE_UNUSED(VALUE *) canary;
2227
+ MAYBE_UNUSED(IC) ic;
2228
+ MAYBE_UNUSED(OFFSET) dst;
2229
+ MAYBE_UNUSED(VALUE) val;
2230
+
2231
+ START_OF_ORIGINAL_INSN(opt_getinlinecache);
2232
+ dst = (OFFSET)GET_OPERAND(1);
2233
+ ic = (IC)GET_OPERAND(2);
2234
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2235
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2236
+ SETUP_CANARY();
2237
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2238
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2239
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, ic);
2240
+ #line 989 "insns.def"
2241
+ {
2242
+ if (vm_ic_hit_p(ic, GET_EP())) {
2243
+ val = ic->ic_value.value;
2244
+ JUMP(dst);
2245
+ }
2246
+ else {
2247
+ val = Qnil;
2248
+ }
2249
+ }
2250
+ #line 2251 "vm.inc"
2251
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2252
+ CHECK_CANARY();
2253
+ INC_SP(INSN_ATTR(sp_inc));
2254
+ TOPN(0) = val;
2255
+ if (leaf) ADD_PC(INSN_ATTR(width));
2256
+ END_INSN(opt_getinlinecache);
2257
+ # undef INSN_ATTR
2258
+ # undef NAME_OF_CURRENT_INSN
2259
+ }
2260
+
2261
+ /* insn opt_setinlinecache(ic)(val)(val) */
2262
+ INSN_ENTRY(opt_setinlinecache)
2263
+ {
2264
+ # define NAME_OF_CURRENT_INSN opt_setinlinecache
2265
+ # define INSN_ATTR(x) attr_ ## x ## _opt_setinlinecache(ic)
2266
+ bool leaf;
2267
+ MAYBE_UNUSED(VALUE *) canary;
2268
+ MAYBE_UNUSED(IC) ic;
2269
+ MAYBE_UNUSED(VALUE) val;
2270
+
2271
+ START_OF_ORIGINAL_INSN(opt_setinlinecache);
2272
+ ic = (IC)GET_OPERAND(1);
2273
+ val = TOPN(0);
2274
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2275
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2276
+ SETUP_CANARY();
2277
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2278
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ic);
2279
+ #line 1005 "insns.def"
2280
+ {
2281
+ vm_ic_update(ic, val, GET_EP());
2282
+ }
2283
+ #line 2284 "vm.inc"
2284
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2285
+ CHECK_CANARY();
2286
+ INC_SP(INSN_ATTR(sp_inc));
2287
+ TOPN(0) = val;
2288
+ if (leaf) ADD_PC(INSN_ATTR(width));
2289
+ END_INSN(opt_setinlinecache);
2290
+ # undef INSN_ATTR
2291
+ # undef NAME_OF_CURRENT_INSN
2292
+ }
2293
+
2294
+ /* insn once(iseq, ise)()(val) */
2295
+ INSN_ENTRY(once)
2296
+ {
2297
+ # define NAME_OF_CURRENT_INSN once
2298
+ # define INSN_ATTR(x) attr_ ## x ## _once(iseq, ise)
2299
+ bool leaf;
2300
+ MAYBE_UNUSED(VALUE *) canary;
2301
+ MAYBE_UNUSED(ISE) ise;
2302
+ MAYBE_UNUSED(ISEQ) iseq;
2303
+ MAYBE_UNUSED(VALUE) val;
2304
+
2305
+ START_OF_ORIGINAL_INSN(once);
2306
+ iseq = (ISEQ)GET_OPERAND(1);
2307
+ ise = (ISE)GET_OPERAND(2);
2308
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2309
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2310
+ POPN(INSN_ATTR(popn));
2311
+ SETUP_CANARY();
2312
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2313
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, iseq);
2314
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, ise);
2315
+ #line 1015 "insns.def"
2316
+ {
2317
+ val = vm_once_dispatch(ec, iseq, ise);
2318
+ }
2319
+ #line 2320 "vm.inc"
2320
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2321
+ CHECK_CANARY();
2322
+ PUSH(val);
2323
+ if (leaf) ADD_PC(INSN_ATTR(width));
2324
+ END_INSN(once);
2325
+ # undef INSN_ATTR
2326
+ # undef NAME_OF_CURRENT_INSN
2327
+ }
2328
+
2329
+ /* insn opt_case_dispatch(hash, else_offset)(..., key)() */
2330
+ INSN_ENTRY(opt_case_dispatch)
2331
+ {
2332
+ # define NAME_OF_CURRENT_INSN opt_case_dispatch
2333
+ # define INSN_ATTR(x) attr_ ## x ## _opt_case_dispatch(hash, else_offset)
2334
+ bool leaf;
2335
+ MAYBE_UNUSED(VALUE *) canary;
2336
+ MAYBE_UNUSED(CDHASH) hash;
2337
+ MAYBE_UNUSED(OFFSET) else_offset;
2338
+ MAYBE_UNUSED(VALUE) key;
2339
+
2340
+ START_OF_ORIGINAL_INSN(opt_case_dispatch);
2341
+ hash = (CDHASH)GET_OPERAND(1);
2342
+ else_offset = (OFFSET)GET_OPERAND(2);
2343
+ key = TOPN(0);
2344
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2345
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2346
+ SETUP_CANARY();
2347
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2348
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, hash);
2349
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, else_offset);
2350
+ #line 1026 "insns.def"
2351
+ {
2352
+ OFFSET dst = vm_case_dispatch(hash, else_offset, key);
2353
+
2354
+ if (dst) {
2355
+ JUMP(dst);
2356
+ }
2357
+ }
2358
+ #line 2359 "vm.inc"
2359
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2360
+ CHECK_CANARY();
2361
+ INC_SP(INSN_ATTR(sp_inc));
2362
+ if (leaf) ADD_PC(INSN_ATTR(width));
2363
+ END_INSN(opt_case_dispatch);
2364
+ # undef INSN_ATTR
2365
+ # undef NAME_OF_CURRENT_INSN
2366
+ }
2367
+
2368
+ /* insn opt_plus(ci, cc)(recv, obj)(val) */
2369
+ INSN_ENTRY(opt_plus)
2370
+ {
2371
+ # define NAME_OF_CURRENT_INSN opt_plus
2372
+ # define INSN_ATTR(x) attr_ ## x ## _opt_plus(ci, cc)
2373
+ bool leaf;
2374
+ MAYBE_UNUSED(VALUE *) canary;
2375
+ MAYBE_UNUSED(CALL_CACHE) cc;
2376
+ MAYBE_UNUSED(CALL_INFO) ci;
2377
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2378
+
2379
+ START_OF_ORIGINAL_INSN(opt_plus);
2380
+ ci = (CALL_INFO)GET_OPERAND(1);
2381
+ cc = (CALL_CACHE)GET_OPERAND(2);
2382
+ recv = TOPN(1);
2383
+ obj = TOPN(0);
2384
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2385
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2386
+ SETUP_CANARY();
2387
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2388
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2389
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2390
+ #line 1045 "insns.def"
2391
+ {
2392
+ val = vm_opt_plus(recv, obj);
2393
+
2394
+ if (val == Qundef) {
2395
+ CALL_SIMPLE_METHOD();
2396
+ }
2397
+ }
2398
+ #line 2399 "vm.inc"
2399
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2400
+ CHECK_CANARY();
2401
+ INC_SP(INSN_ATTR(sp_inc));
2402
+ TOPN(0) = val;
2403
+ if (leaf) ADD_PC(INSN_ATTR(width));
2404
+ END_INSN(opt_plus);
2405
+ # undef INSN_ATTR
2406
+ # undef NAME_OF_CURRENT_INSN
2407
+ }
2408
+
2409
+ /* insn opt_minus(ci, cc)(recv, obj)(val) */
2410
+ INSN_ENTRY(opt_minus)
2411
+ {
2412
+ # define NAME_OF_CURRENT_INSN opt_minus
2413
+ # define INSN_ATTR(x) attr_ ## x ## _opt_minus(ci, cc)
2414
+ bool leaf;
2415
+ MAYBE_UNUSED(VALUE *) canary;
2416
+ MAYBE_UNUSED(CALL_CACHE) cc;
2417
+ MAYBE_UNUSED(CALL_INFO) ci;
2418
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2419
+
2420
+ START_OF_ORIGINAL_INSN(opt_minus);
2421
+ ci = (CALL_INFO)GET_OPERAND(1);
2422
+ cc = (CALL_CACHE)GET_OPERAND(2);
2423
+ recv = TOPN(1);
2424
+ obj = TOPN(0);
2425
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2426
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2427
+ SETUP_CANARY();
2428
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2429
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2430
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2431
+ #line 1059 "insns.def"
2432
+ {
2433
+ val = vm_opt_minus(recv, obj);
2434
+
2435
+ if (val == Qundef) {
2436
+ CALL_SIMPLE_METHOD();
2437
+ }
2438
+ }
2439
+ #line 2440 "vm.inc"
2440
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2441
+ CHECK_CANARY();
2442
+ INC_SP(INSN_ATTR(sp_inc));
2443
+ TOPN(0) = val;
2444
+ if (leaf) ADD_PC(INSN_ATTR(width));
2445
+ END_INSN(opt_minus);
2446
+ # undef INSN_ATTR
2447
+ # undef NAME_OF_CURRENT_INSN
2448
+ }
2449
+
2450
+ /* insn opt_mult(ci, cc)(recv, obj)(val) */
2451
+ INSN_ENTRY(opt_mult)
2452
+ {
2453
+ # define NAME_OF_CURRENT_INSN opt_mult
2454
+ # define INSN_ATTR(x) attr_ ## x ## _opt_mult(ci, cc)
2455
+ bool leaf;
2456
+ MAYBE_UNUSED(VALUE *) canary;
2457
+ MAYBE_UNUSED(CALL_CACHE) cc;
2458
+ MAYBE_UNUSED(CALL_INFO) ci;
2459
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2460
+
2461
+ START_OF_ORIGINAL_INSN(opt_mult);
2462
+ ci = (CALL_INFO)GET_OPERAND(1);
2463
+ cc = (CALL_CACHE)GET_OPERAND(2);
2464
+ recv = TOPN(1);
2465
+ obj = TOPN(0);
2466
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2467
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2468
+ SETUP_CANARY();
2469
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2470
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2471
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2472
+ #line 1073 "insns.def"
2473
+ {
2474
+ val = vm_opt_mult(recv, obj);
2475
+
2476
+ if (val == Qundef) {
2477
+ CALL_SIMPLE_METHOD();
2478
+ }
2479
+ }
2480
+ #line 2481 "vm.inc"
2481
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2482
+ CHECK_CANARY();
2483
+ INC_SP(INSN_ATTR(sp_inc));
2484
+ TOPN(0) = val;
2485
+ if (leaf) ADD_PC(INSN_ATTR(width));
2486
+ END_INSN(opt_mult);
2487
+ # undef INSN_ATTR
2488
+ # undef NAME_OF_CURRENT_INSN
2489
+ }
2490
+
2491
+ /* insn opt_div(ci, cc)(recv, obj)(val) */
2492
+ INSN_ENTRY(opt_div)
2493
+ {
2494
+ # define NAME_OF_CURRENT_INSN opt_div
2495
+ # define INSN_ATTR(x) attr_ ## x ## _opt_div(ci, cc)
2496
+ bool leaf;
2497
+ MAYBE_UNUSED(VALUE *) canary;
2498
+ MAYBE_UNUSED(CALL_CACHE) cc;
2499
+ MAYBE_UNUSED(CALL_INFO) ci;
2500
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2501
+
2502
+ START_OF_ORIGINAL_INSN(opt_div);
2503
+ ci = (CALL_INFO)GET_OPERAND(1);
2504
+ cc = (CALL_CACHE)GET_OPERAND(2);
2505
+ recv = TOPN(1);
2506
+ obj = TOPN(0);
2507
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2508
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2509
+ SETUP_CANARY();
2510
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2511
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2512
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2513
+ #line 1087 "insns.def"
2514
+ {
2515
+ val = vm_opt_div(recv, obj);
2516
+
2517
+ if (val == Qundef) {
2518
+ CALL_SIMPLE_METHOD();
2519
+ }
2520
+ }
2521
+ #line 2522 "vm.inc"
2522
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2523
+ CHECK_CANARY();
2524
+ INC_SP(INSN_ATTR(sp_inc));
2525
+ TOPN(0) = val;
2526
+ if (leaf) ADD_PC(INSN_ATTR(width));
2527
+ END_INSN(opt_div);
2528
+ # undef INSN_ATTR
2529
+ # undef NAME_OF_CURRENT_INSN
2530
+ }
2531
+
2532
+ /* insn opt_mod(ci, cc)(recv, obj)(val) */
2533
+ INSN_ENTRY(opt_mod)
2534
+ {
2535
+ # define NAME_OF_CURRENT_INSN opt_mod
2536
+ # define INSN_ATTR(x) attr_ ## x ## _opt_mod(ci, cc)
2537
+ bool leaf;
2538
+ MAYBE_UNUSED(VALUE *) canary;
2539
+ MAYBE_UNUSED(CALL_CACHE) cc;
2540
+ MAYBE_UNUSED(CALL_INFO) ci;
2541
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2542
+
2543
+ START_OF_ORIGINAL_INSN(opt_mod);
2544
+ ci = (CALL_INFO)GET_OPERAND(1);
2545
+ cc = (CALL_CACHE)GET_OPERAND(2);
2546
+ recv = TOPN(1);
2547
+ obj = TOPN(0);
2548
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2549
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2550
+ SETUP_CANARY();
2551
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2552
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2553
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2554
+ #line 1101 "insns.def"
2555
+ {
2556
+ val = vm_opt_mod(recv, obj);
2557
+
2558
+ if (val == Qundef) {
2559
+ CALL_SIMPLE_METHOD();
2560
+ }
2561
+ }
2562
+ #line 2563 "vm.inc"
2563
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2564
+ CHECK_CANARY();
2565
+ INC_SP(INSN_ATTR(sp_inc));
2566
+ TOPN(0) = val;
2567
+ if (leaf) ADD_PC(INSN_ATTR(width));
2568
+ END_INSN(opt_mod);
2569
+ # undef INSN_ATTR
2570
+ # undef NAME_OF_CURRENT_INSN
2571
+ }
2572
+
2573
+ /* insn opt_eq(ci, cc)(recv, obj)(val) */
2574
+ INSN_ENTRY(opt_eq)
2575
+ {
2576
+ # define NAME_OF_CURRENT_INSN opt_eq
2577
+ # define INSN_ATTR(x) attr_ ## x ## _opt_eq(ci, cc)
2578
+ bool leaf;
2579
+ MAYBE_UNUSED(VALUE *) canary;
2580
+ MAYBE_UNUSED(CALL_CACHE) cc;
2581
+ MAYBE_UNUSED(CALL_INFO) ci;
2582
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2583
+
2584
+ START_OF_ORIGINAL_INSN(opt_eq);
2585
+ ci = (CALL_INFO)GET_OPERAND(1);
2586
+ cc = (CALL_CACHE)GET_OPERAND(2);
2587
+ recv = TOPN(1);
2588
+ obj = TOPN(0);
2589
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2590
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2591
+ SETUP_CANARY();
2592
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2593
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2594
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2595
+ #line 1119 "insns.def"
2596
+ {
2597
+ val = opt_eq_func(recv, obj, ci, cc);
2598
+
2599
+ if (val == Qundef) {
2600
+ CALL_SIMPLE_METHOD();
2601
+ }
2602
+ }
2603
+ #line 2604 "vm.inc"
2604
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2605
+ CHECK_CANARY();
2606
+ INC_SP(INSN_ATTR(sp_inc));
2607
+ TOPN(0) = val;
2608
+ if (leaf) ADD_PC(INSN_ATTR(width));
2609
+ END_INSN(opt_eq);
2610
+ # undef INSN_ATTR
2611
+ # undef NAME_OF_CURRENT_INSN
2612
+ }
2613
+
2614
+ /* insn opt_neq(ci_eq, cc_eq, ci, cc)(recv, obj)(val) */
2615
+ INSN_ENTRY(opt_neq)
2616
+ {
2617
+ # define NAME_OF_CURRENT_INSN opt_neq
2618
+ # define INSN_ATTR(x) attr_ ## x ## _opt_neq(ci_eq, cc_eq, ci, cc)
2619
+ bool leaf;
2620
+ MAYBE_UNUSED(VALUE *) canary;
2621
+ MAYBE_UNUSED(CALL_CACHE) cc, cc_eq;
2622
+ MAYBE_UNUSED(CALL_INFO) ci, ci_eq;
2623
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2624
+
2625
+ START_OF_ORIGINAL_INSN(opt_neq);
2626
+ ci_eq = (CALL_INFO)GET_OPERAND(1);
2627
+ cc_eq = (CALL_CACHE)GET_OPERAND(2);
2628
+ ci = (CALL_INFO)GET_OPERAND(3);
2629
+ cc = (CALL_CACHE)GET_OPERAND(4);
2630
+ recv = TOPN(1);
2631
+ obj = TOPN(0);
2632
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2633
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2634
+ SETUP_CANARY();
2635
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2636
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci_eq);
2637
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc_eq);
2638
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 2, ci);
2639
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 3, cc);
2640
+ #line 1135 "insns.def"
2641
+ {
2642
+ val = vm_opt_neq(ci, cc, ci_eq, cc_eq, recv, obj);
2643
+
2644
+ if (val == Qundef) {
2645
+ CALL_SIMPLE_METHOD();
2646
+ }
2647
+ }
2648
+ #line 2649 "vm.inc"
2649
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2650
+ CHECK_CANARY();
2651
+ INC_SP(INSN_ATTR(sp_inc));
2652
+ TOPN(0) = val;
2653
+ if (leaf) ADD_PC(INSN_ATTR(width));
2654
+ END_INSN(opt_neq);
2655
+ # undef INSN_ATTR
2656
+ # undef NAME_OF_CURRENT_INSN
2657
+ }
2658
+
2659
+ /* insn opt_lt(ci, cc)(recv, obj)(val) */
2660
+ INSN_ENTRY(opt_lt)
2661
+ {
2662
+ # define NAME_OF_CURRENT_INSN opt_lt
2663
+ # define INSN_ATTR(x) attr_ ## x ## _opt_lt(ci, cc)
2664
+ bool leaf;
2665
+ MAYBE_UNUSED(VALUE *) canary;
2666
+ MAYBE_UNUSED(CALL_CACHE) cc;
2667
+ MAYBE_UNUSED(CALL_INFO) ci;
2668
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2669
+
2670
+ START_OF_ORIGINAL_INSN(opt_lt);
2671
+ ci = (CALL_INFO)GET_OPERAND(1);
2672
+ cc = (CALL_CACHE)GET_OPERAND(2);
2673
+ recv = TOPN(1);
2674
+ obj = TOPN(0);
2675
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2676
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2677
+ SETUP_CANARY();
2678
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2679
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2680
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2681
+ #line 1149 "insns.def"
2682
+ {
2683
+ val = vm_opt_lt(recv, obj);
2684
+
2685
+ if (val == Qundef) {
2686
+ CALL_SIMPLE_METHOD();
2687
+ }
2688
+ }
2689
+ #line 2690 "vm.inc"
2690
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2691
+ CHECK_CANARY();
2692
+ INC_SP(INSN_ATTR(sp_inc));
2693
+ TOPN(0) = val;
2694
+ if (leaf) ADD_PC(INSN_ATTR(width));
2695
+ END_INSN(opt_lt);
2696
+ # undef INSN_ATTR
2697
+ # undef NAME_OF_CURRENT_INSN
2698
+ }
2699
+
2700
+ /* insn opt_le(ci, cc)(recv, obj)(val) */
2701
+ INSN_ENTRY(opt_le)
2702
+ {
2703
+ # define NAME_OF_CURRENT_INSN opt_le
2704
+ # define INSN_ATTR(x) attr_ ## x ## _opt_le(ci, cc)
2705
+ bool leaf;
2706
+ MAYBE_UNUSED(VALUE *) canary;
2707
+ MAYBE_UNUSED(CALL_CACHE) cc;
2708
+ MAYBE_UNUSED(CALL_INFO) ci;
2709
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2710
+
2711
+ START_OF_ORIGINAL_INSN(opt_le);
2712
+ ci = (CALL_INFO)GET_OPERAND(1);
2713
+ cc = (CALL_CACHE)GET_OPERAND(2);
2714
+ recv = TOPN(1);
2715
+ obj = TOPN(0);
2716
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2717
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2718
+ SETUP_CANARY();
2719
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2720
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2721
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2722
+ #line 1163 "insns.def"
2723
+ {
2724
+ val = vm_opt_le(recv, obj);
2725
+
2726
+ if (val == Qundef) {
2727
+ CALL_SIMPLE_METHOD();
2728
+ }
2729
+ }
2730
+ #line 2731 "vm.inc"
2731
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2732
+ CHECK_CANARY();
2733
+ INC_SP(INSN_ATTR(sp_inc));
2734
+ TOPN(0) = val;
2735
+ if (leaf) ADD_PC(INSN_ATTR(width));
2736
+ END_INSN(opt_le);
2737
+ # undef INSN_ATTR
2738
+ # undef NAME_OF_CURRENT_INSN
2739
+ }
2740
+
2741
+ /* insn opt_gt(ci, cc)(recv, obj)(val) */
2742
+ INSN_ENTRY(opt_gt)
2743
+ {
2744
+ # define NAME_OF_CURRENT_INSN opt_gt
2745
+ # define INSN_ATTR(x) attr_ ## x ## _opt_gt(ci, cc)
2746
+ bool leaf;
2747
+ MAYBE_UNUSED(VALUE *) canary;
2748
+ MAYBE_UNUSED(CALL_CACHE) cc;
2749
+ MAYBE_UNUSED(CALL_INFO) ci;
2750
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2751
+
2752
+ START_OF_ORIGINAL_INSN(opt_gt);
2753
+ ci = (CALL_INFO)GET_OPERAND(1);
2754
+ cc = (CALL_CACHE)GET_OPERAND(2);
2755
+ recv = TOPN(1);
2756
+ obj = TOPN(0);
2757
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2758
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2759
+ SETUP_CANARY();
2760
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2761
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2762
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2763
+ #line 1177 "insns.def"
2764
+ {
2765
+ val = vm_opt_gt(recv, obj);
2766
+
2767
+ if (val == Qundef) {
2768
+ CALL_SIMPLE_METHOD();
2769
+ }
2770
+ }
2771
+ #line 2772 "vm.inc"
2772
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2773
+ CHECK_CANARY();
2774
+ INC_SP(INSN_ATTR(sp_inc));
2775
+ TOPN(0) = val;
2776
+ if (leaf) ADD_PC(INSN_ATTR(width));
2777
+ END_INSN(opt_gt);
2778
+ # undef INSN_ATTR
2779
+ # undef NAME_OF_CURRENT_INSN
2780
+ }
2781
+
2782
+ /* insn opt_ge(ci, cc)(recv, obj)(val) */
2783
+ INSN_ENTRY(opt_ge)
2784
+ {
2785
+ # define NAME_OF_CURRENT_INSN opt_ge
2786
+ # define INSN_ATTR(x) attr_ ## x ## _opt_ge(ci, cc)
2787
+ bool leaf;
2788
+ MAYBE_UNUSED(VALUE *) canary;
2789
+ MAYBE_UNUSED(CALL_CACHE) cc;
2790
+ MAYBE_UNUSED(CALL_INFO) ci;
2791
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2792
+
2793
+ START_OF_ORIGINAL_INSN(opt_ge);
2794
+ ci = (CALL_INFO)GET_OPERAND(1);
2795
+ cc = (CALL_CACHE)GET_OPERAND(2);
2796
+ recv = TOPN(1);
2797
+ obj = TOPN(0);
2798
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2799
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2800
+ SETUP_CANARY();
2801
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2802
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2803
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2804
+ #line 1191 "insns.def"
2805
+ {
2806
+ val = vm_opt_ge(recv, obj);
2807
+
2808
+ if (val == Qundef) {
2809
+ CALL_SIMPLE_METHOD();
2810
+ }
2811
+ }
2812
+ #line 2813 "vm.inc"
2813
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2814
+ CHECK_CANARY();
2815
+ INC_SP(INSN_ATTR(sp_inc));
2816
+ TOPN(0) = val;
2817
+ if (leaf) ADD_PC(INSN_ATTR(width));
2818
+ END_INSN(opt_ge);
2819
+ # undef INSN_ATTR
2820
+ # undef NAME_OF_CURRENT_INSN
2821
+ }
2822
+
2823
+ /* insn opt_ltlt(ci, cc)(recv, obj)(val) */
2824
+ INSN_ENTRY(opt_ltlt)
2825
+ {
2826
+ # define NAME_OF_CURRENT_INSN opt_ltlt
2827
+ # define INSN_ATTR(x) attr_ ## x ## _opt_ltlt(ci, cc)
2828
+ bool leaf;
2829
+ MAYBE_UNUSED(VALUE *) canary;
2830
+ MAYBE_UNUSED(CALL_CACHE) cc;
2831
+ MAYBE_UNUSED(CALL_INFO) ci;
2832
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2833
+
2834
+ START_OF_ORIGINAL_INSN(opt_ltlt);
2835
+ ci = (CALL_INFO)GET_OPERAND(1);
2836
+ cc = (CALL_CACHE)GET_OPERAND(2);
2837
+ recv = TOPN(1);
2838
+ obj = TOPN(0);
2839
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2840
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2841
+ SETUP_CANARY();
2842
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2843
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2844
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2845
+ #line 1205 "insns.def"
2846
+ {
2847
+ val = vm_opt_ltlt(recv, obj);
2848
+
2849
+ if (val == Qundef) {
2850
+ CALL_SIMPLE_METHOD();
2851
+ }
2852
+ }
2853
+ #line 2854 "vm.inc"
2854
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2855
+ CHECK_CANARY();
2856
+ INC_SP(INSN_ATTR(sp_inc));
2857
+ TOPN(0) = val;
2858
+ if (leaf) ADD_PC(INSN_ATTR(width));
2859
+ END_INSN(opt_ltlt);
2860
+ # undef INSN_ATTR
2861
+ # undef NAME_OF_CURRENT_INSN
2862
+ }
2863
+
2864
+ /* insn opt_and(ci, cc)(recv, obj)(val) */
2865
+ INSN_ENTRY(opt_and)
2866
+ {
2867
+ # define NAME_OF_CURRENT_INSN opt_and
2868
+ # define INSN_ATTR(x) attr_ ## x ## _opt_and(ci, cc)
2869
+ bool leaf;
2870
+ MAYBE_UNUSED(VALUE *) canary;
2871
+ MAYBE_UNUSED(CALL_CACHE) cc;
2872
+ MAYBE_UNUSED(CALL_INFO) ci;
2873
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2874
+
2875
+ START_OF_ORIGINAL_INSN(opt_and);
2876
+ ci = (CALL_INFO)GET_OPERAND(1);
2877
+ cc = (CALL_CACHE)GET_OPERAND(2);
2878
+ recv = TOPN(1);
2879
+ obj = TOPN(0);
2880
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2881
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2882
+ SETUP_CANARY();
2883
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2884
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2885
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2886
+ #line 1219 "insns.def"
2887
+ {
2888
+ val = vm_opt_and(recv, obj);
2889
+
2890
+ if (val == Qundef) {
2891
+ CALL_SIMPLE_METHOD();
2892
+ }
2893
+ }
2894
+ #line 2895 "vm.inc"
2895
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2896
+ CHECK_CANARY();
2897
+ INC_SP(INSN_ATTR(sp_inc));
2898
+ TOPN(0) = val;
2899
+ if (leaf) ADD_PC(INSN_ATTR(width));
2900
+ END_INSN(opt_and);
2901
+ # undef INSN_ATTR
2902
+ # undef NAME_OF_CURRENT_INSN
2903
+ }
2904
+
2905
+ /* insn opt_or(ci, cc)(recv, obj)(val) */
2906
+ INSN_ENTRY(opt_or)
2907
+ {
2908
+ # define NAME_OF_CURRENT_INSN opt_or
2909
+ # define INSN_ATTR(x) attr_ ## x ## _opt_or(ci, cc)
2910
+ bool leaf;
2911
+ MAYBE_UNUSED(VALUE *) canary;
2912
+ MAYBE_UNUSED(CALL_CACHE) cc;
2913
+ MAYBE_UNUSED(CALL_INFO) ci;
2914
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2915
+
2916
+ START_OF_ORIGINAL_INSN(opt_or);
2917
+ ci = (CALL_INFO)GET_OPERAND(1);
2918
+ cc = (CALL_CACHE)GET_OPERAND(2);
2919
+ recv = TOPN(1);
2920
+ obj = TOPN(0);
2921
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2922
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2923
+ SETUP_CANARY();
2924
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2925
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2926
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2927
+ #line 1233 "insns.def"
2928
+ {
2929
+ val = vm_opt_or(recv, obj);
2930
+
2931
+ if (val == Qundef) {
2932
+ CALL_SIMPLE_METHOD();
2933
+ }
2934
+ }
2935
+ #line 2936 "vm.inc"
2936
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2937
+ CHECK_CANARY();
2938
+ INC_SP(INSN_ATTR(sp_inc));
2939
+ TOPN(0) = val;
2940
+ if (leaf) ADD_PC(INSN_ATTR(width));
2941
+ END_INSN(opt_or);
2942
+ # undef INSN_ATTR
2943
+ # undef NAME_OF_CURRENT_INSN
2944
+ }
2945
+
2946
+ /* insn opt_aref(ci, cc)(recv, obj)(val) */
2947
+ INSN_ENTRY(opt_aref)
2948
+ {
2949
+ # define NAME_OF_CURRENT_INSN opt_aref
2950
+ # define INSN_ATTR(x) attr_ ## x ## _opt_aref(ci, cc)
2951
+ bool leaf;
2952
+ MAYBE_UNUSED(VALUE *) canary;
2953
+ MAYBE_UNUSED(CALL_CACHE) cc;
2954
+ MAYBE_UNUSED(CALL_INFO) ci;
2955
+ MAYBE_UNUSED(VALUE) obj, recv, val;
2956
+
2957
+ START_OF_ORIGINAL_INSN(opt_aref);
2958
+ ci = (CALL_INFO)GET_OPERAND(1);
2959
+ cc = (CALL_CACHE)GET_OPERAND(2);
2960
+ recv = TOPN(1);
2961
+ obj = TOPN(0);
2962
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
2963
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
2964
+ SETUP_CANARY();
2965
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
2966
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
2967
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
2968
+ #line 1252 "insns.def"
2969
+ {
2970
+ val = vm_opt_aref(recv, obj);
2971
+
2972
+ if (val == Qundef) {
2973
+ CALL_SIMPLE_METHOD();
2974
+ }
2975
+ }
2976
+ #line 2977 "vm.inc"
2977
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2978
+ CHECK_CANARY();
2979
+ INC_SP(INSN_ATTR(sp_inc));
2980
+ TOPN(0) = val;
2981
+ if (leaf) ADD_PC(INSN_ATTR(width));
2982
+ END_INSN(opt_aref);
2983
+ # undef INSN_ATTR
2984
+ # undef NAME_OF_CURRENT_INSN
2985
+ }
2986
+
2987
+ /* insn opt_aset(ci, cc)(recv, obj, set)(val) */
2988
+ INSN_ENTRY(opt_aset)
2989
+ {
2990
+ # define NAME_OF_CURRENT_INSN opt_aset
2991
+ # define INSN_ATTR(x) attr_ ## x ## _opt_aset(ci, cc)
2992
+ bool leaf;
2993
+ MAYBE_UNUSED(VALUE *) canary;
2994
+ MAYBE_UNUSED(CALL_CACHE) cc;
2995
+ MAYBE_UNUSED(CALL_INFO) ci;
2996
+ MAYBE_UNUSED(VALUE) obj, recv, set, val;
2997
+
2998
+ START_OF_ORIGINAL_INSN(opt_aset);
2999
+ ci = (CALL_INFO)GET_OPERAND(1);
3000
+ cc = (CALL_CACHE)GET_OPERAND(2);
3001
+ recv = TOPN(2);
3002
+ obj = TOPN(1);
3003
+ set = TOPN(0);
3004
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3005
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3006
+ SETUP_CANARY();
3007
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3008
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
3009
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
3010
+ #line 1269 "insns.def"
3011
+ {
3012
+ val = vm_opt_aset(recv, obj, set);
3013
+
3014
+ if (val == Qundef) {
3015
+ CALL_SIMPLE_METHOD();
3016
+ }
3017
+ }
3018
+ #line 3019 "vm.inc"
3019
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3020
+ CHECK_CANARY();
3021
+ INC_SP(INSN_ATTR(sp_inc));
3022
+ TOPN(0) = val;
3023
+ if (leaf) ADD_PC(INSN_ATTR(width));
3024
+ END_INSN(opt_aset);
3025
+ # undef INSN_ATTR
3026
+ # undef NAME_OF_CURRENT_INSN
3027
+ }
3028
+
3029
+ /* insn opt_aset_with(key, ci, cc)(recv, val)(val) */
3030
+ INSN_ENTRY(opt_aset_with)
3031
+ {
3032
+ # define NAME_OF_CURRENT_INSN opt_aset_with
3033
+ # define INSN_ATTR(x) attr_ ## x ## _opt_aset_with(key, ci, cc)
3034
+ bool leaf;
3035
+ MAYBE_UNUSED(VALUE *) canary;
3036
+ MAYBE_UNUSED(CALL_CACHE) cc;
3037
+ MAYBE_UNUSED(CALL_INFO) ci;
3038
+ MAYBE_UNUSED(VALUE) key, recv, val;
3039
+
3040
+ START_OF_ORIGINAL_INSN(opt_aset_with);
3041
+ key = (VALUE)GET_OPERAND(1);
3042
+ ci = (CALL_INFO)GET_OPERAND(2);
3043
+ cc = (CALL_CACHE)GET_OPERAND(3);
3044
+ recv = TOPN(1);
3045
+ val = TOPN(0);
3046
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3047
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3048
+ SETUP_CANARY();
3049
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3050
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, key);
3051
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, ci);
3052
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 2, cc);
3053
+ #line 1285 "insns.def"
3054
+ {
3055
+ VALUE tmp = vm_opt_aset_with(recv, key, val);
3056
+
3057
+ if (tmp != Qundef) {
3058
+ val = tmp;
3059
+ }
3060
+ else {
3061
+ #ifndef MJIT_HEADER
3062
+ TOPN(0) = rb_str_resurrect(key);
3063
+ PUSH(val);
3064
+ #endif
3065
+ CALL_SIMPLE_METHOD();
3066
+ }
3067
+ }
3068
+ #line 3069 "vm.inc"
3069
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3070
+ CHECK_CANARY();
3071
+ INC_SP(INSN_ATTR(sp_inc));
3072
+ TOPN(0) = val;
3073
+ if (leaf) ADD_PC(INSN_ATTR(width));
3074
+ END_INSN(opt_aset_with);
3075
+ # undef INSN_ATTR
3076
+ # undef NAME_OF_CURRENT_INSN
3077
+ }
3078
+
3079
+ /* insn opt_aref_with(key, ci, cc)(recv)(val) */
3080
+ INSN_ENTRY(opt_aref_with)
3081
+ {
3082
+ # define NAME_OF_CURRENT_INSN opt_aref_with
3083
+ # define INSN_ATTR(x) attr_ ## x ## _opt_aref_with(key, ci, cc)
3084
+ bool leaf;
3085
+ MAYBE_UNUSED(VALUE *) canary;
3086
+ MAYBE_UNUSED(CALL_CACHE) cc;
3087
+ MAYBE_UNUSED(CALL_INFO) ci;
3088
+ MAYBE_UNUSED(VALUE) key, recv, val;
3089
+
3090
+ START_OF_ORIGINAL_INSN(opt_aref_with);
3091
+ key = (VALUE)GET_OPERAND(1);
3092
+ ci = (CALL_INFO)GET_OPERAND(2);
3093
+ cc = (CALL_CACHE)GET_OPERAND(3);
3094
+ recv = TOPN(0);
3095
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3096
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3097
+ SETUP_CANARY();
3098
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3099
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, key);
3100
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, ci);
3101
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 2, cc);
3102
+ #line 1308 "insns.def"
3103
+ {
3104
+ val = vm_opt_aref_with(recv, key);
3105
+
3106
+ if (val == Qundef) {
3107
+ #ifndef MJIT_HEADER
3108
+ PUSH(rb_str_resurrect(key));
3109
+ #endif
3110
+ CALL_SIMPLE_METHOD();
3111
+ }
3112
+ }
3113
+ #line 3114 "vm.inc"
3114
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3115
+ CHECK_CANARY();
3116
+ INC_SP(INSN_ATTR(sp_inc));
3117
+ TOPN(0) = val;
3118
+ if (leaf) ADD_PC(INSN_ATTR(width));
3119
+ END_INSN(opt_aref_with);
3120
+ # undef INSN_ATTR
3121
+ # undef NAME_OF_CURRENT_INSN
3122
+ }
3123
+
3124
+ /* insn opt_length(ci, cc)(recv)(val) */
3125
+ INSN_ENTRY(opt_length)
3126
+ {
3127
+ # define NAME_OF_CURRENT_INSN opt_length
3128
+ # define INSN_ATTR(x) attr_ ## x ## _opt_length(ci, cc)
3129
+ bool leaf;
3130
+ MAYBE_UNUSED(VALUE *) canary;
3131
+ MAYBE_UNUSED(CALL_CACHE) cc;
3132
+ MAYBE_UNUSED(CALL_INFO) ci;
3133
+ MAYBE_UNUSED(VALUE) recv, val;
3134
+
3135
+ START_OF_ORIGINAL_INSN(opt_length);
3136
+ ci = (CALL_INFO)GET_OPERAND(1);
3137
+ cc = (CALL_CACHE)GET_OPERAND(2);
3138
+ recv = TOPN(0);
3139
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3140
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3141
+ SETUP_CANARY();
3142
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3143
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
3144
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
3145
+ #line 1325 "insns.def"
3146
+ {
3147
+ val = vm_opt_length(recv, BOP_LENGTH);
3148
+
3149
+ if (val == Qundef) {
3150
+ CALL_SIMPLE_METHOD();
3151
+ }
3152
+ }
3153
+ #line 3154 "vm.inc"
3154
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3155
+ CHECK_CANARY();
3156
+ INC_SP(INSN_ATTR(sp_inc));
3157
+ TOPN(0) = val;
3158
+ if (leaf) ADD_PC(INSN_ATTR(width));
3159
+ END_INSN(opt_length);
3160
+ # undef INSN_ATTR
3161
+ # undef NAME_OF_CURRENT_INSN
3162
+ }
3163
+
3164
+ /* insn opt_size(ci, cc)(recv)(val) */
3165
+ INSN_ENTRY(opt_size)
3166
+ {
3167
+ # define NAME_OF_CURRENT_INSN opt_size
3168
+ # define INSN_ATTR(x) attr_ ## x ## _opt_size(ci, cc)
3169
+ bool leaf;
3170
+ MAYBE_UNUSED(VALUE *) canary;
3171
+ MAYBE_UNUSED(CALL_CACHE) cc;
3172
+ MAYBE_UNUSED(CALL_INFO) ci;
3173
+ MAYBE_UNUSED(VALUE) recv, val;
3174
+
3175
+ START_OF_ORIGINAL_INSN(opt_size);
3176
+ ci = (CALL_INFO)GET_OPERAND(1);
3177
+ cc = (CALL_CACHE)GET_OPERAND(2);
3178
+ recv = TOPN(0);
3179
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3180
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3181
+ SETUP_CANARY();
3182
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3183
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
3184
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
3185
+ #line 1339 "insns.def"
3186
+ {
3187
+ val = vm_opt_length(recv, BOP_SIZE);
3188
+
3189
+ if (val == Qundef) {
3190
+ CALL_SIMPLE_METHOD();
3191
+ }
3192
+ }
3193
+ #line 3194 "vm.inc"
3194
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3195
+ CHECK_CANARY();
3196
+ INC_SP(INSN_ATTR(sp_inc));
3197
+ TOPN(0) = val;
3198
+ if (leaf) ADD_PC(INSN_ATTR(width));
3199
+ END_INSN(opt_size);
3200
+ # undef INSN_ATTR
3201
+ # undef NAME_OF_CURRENT_INSN
3202
+ }
3203
+
3204
+ /* insn opt_empty_p(ci, cc)(recv)(val) */
3205
+ INSN_ENTRY(opt_empty_p)
3206
+ {
3207
+ # define NAME_OF_CURRENT_INSN opt_empty_p
3208
+ # define INSN_ATTR(x) attr_ ## x ## _opt_empty_p(ci, cc)
3209
+ bool leaf;
3210
+ MAYBE_UNUSED(VALUE *) canary;
3211
+ MAYBE_UNUSED(CALL_CACHE) cc;
3212
+ MAYBE_UNUSED(CALL_INFO) ci;
3213
+ MAYBE_UNUSED(VALUE) recv, val;
3214
+
3215
+ START_OF_ORIGINAL_INSN(opt_empty_p);
3216
+ ci = (CALL_INFO)GET_OPERAND(1);
3217
+ cc = (CALL_CACHE)GET_OPERAND(2);
3218
+ recv = TOPN(0);
3219
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3220
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3221
+ SETUP_CANARY();
3222
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3223
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
3224
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
3225
+ #line 1353 "insns.def"
3226
+ {
3227
+ val = vm_opt_empty_p(recv);
3228
+
3229
+ if (val == Qundef) {
3230
+ CALL_SIMPLE_METHOD();
3231
+ }
3232
+ }
3233
+ #line 3234 "vm.inc"
3234
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3235
+ CHECK_CANARY();
3236
+ INC_SP(INSN_ATTR(sp_inc));
3237
+ TOPN(0) = val;
3238
+ if (leaf) ADD_PC(INSN_ATTR(width));
3239
+ END_INSN(opt_empty_p);
3240
+ # undef INSN_ATTR
3241
+ # undef NAME_OF_CURRENT_INSN
3242
+ }
3243
+
3244
+ /* insn opt_succ(ci, cc)(recv)(val) */
3245
+ INSN_ENTRY(opt_succ)
3246
+ {
3247
+ # define NAME_OF_CURRENT_INSN opt_succ
3248
+ # define INSN_ATTR(x) attr_ ## x ## _opt_succ(ci, cc)
3249
+ bool leaf;
3250
+ MAYBE_UNUSED(VALUE *) canary;
3251
+ MAYBE_UNUSED(CALL_CACHE) cc;
3252
+ MAYBE_UNUSED(CALL_INFO) ci;
3253
+ MAYBE_UNUSED(VALUE) recv, val;
3254
+
3255
+ START_OF_ORIGINAL_INSN(opt_succ);
3256
+ ci = (CALL_INFO)GET_OPERAND(1);
3257
+ cc = (CALL_CACHE)GET_OPERAND(2);
3258
+ recv = TOPN(0);
3259
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3260
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3261
+ SETUP_CANARY();
3262
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3263
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
3264
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
3265
+ #line 1367 "insns.def"
3266
+ {
3267
+ val = vm_opt_succ(recv);
3268
+
3269
+ if (val == Qundef) {
3270
+ CALL_SIMPLE_METHOD();
3271
+ }
3272
+ }
3273
+ #line 3274 "vm.inc"
3274
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3275
+ CHECK_CANARY();
3276
+ INC_SP(INSN_ATTR(sp_inc));
3277
+ TOPN(0) = val;
3278
+ if (leaf) ADD_PC(INSN_ATTR(width));
3279
+ END_INSN(opt_succ);
3280
+ # undef INSN_ATTR
3281
+ # undef NAME_OF_CURRENT_INSN
3282
+ }
3283
+
3284
+ /* insn opt_not(ci, cc)(recv)(val) */
3285
+ INSN_ENTRY(opt_not)
3286
+ {
3287
+ # define NAME_OF_CURRENT_INSN opt_not
3288
+ # define INSN_ATTR(x) attr_ ## x ## _opt_not(ci, cc)
3289
+ bool leaf;
3290
+ MAYBE_UNUSED(VALUE *) canary;
3291
+ MAYBE_UNUSED(CALL_CACHE) cc;
3292
+ MAYBE_UNUSED(CALL_INFO) ci;
3293
+ MAYBE_UNUSED(VALUE) recv, val;
3294
+
3295
+ START_OF_ORIGINAL_INSN(opt_not);
3296
+ ci = (CALL_INFO)GET_OPERAND(1);
3297
+ cc = (CALL_CACHE)GET_OPERAND(2);
3298
+ recv = TOPN(0);
3299
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3300
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3301
+ SETUP_CANARY();
3302
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3303
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
3304
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
3305
+ #line 1381 "insns.def"
3306
+ {
3307
+ val = vm_opt_not(ci, cc, recv);
3308
+
3309
+ if (val == Qundef) {
3310
+ CALL_SIMPLE_METHOD();
3311
+ }
3312
+ }
3313
+ #line 3314 "vm.inc"
3314
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3315
+ CHECK_CANARY();
3316
+ INC_SP(INSN_ATTR(sp_inc));
3317
+ TOPN(0) = val;
3318
+ if (leaf) ADD_PC(INSN_ATTR(width));
3319
+ END_INSN(opt_not);
3320
+ # undef INSN_ATTR
3321
+ # undef NAME_OF_CURRENT_INSN
3322
+ }
3323
+
3324
+ /* insn opt_regexpmatch1(recv)(obj)(val) */
3325
+ INSN_ENTRY(opt_regexpmatch1)
3326
+ {
3327
+ # define NAME_OF_CURRENT_INSN opt_regexpmatch1
3328
+ # define INSN_ATTR(x) attr_ ## x ## _opt_regexpmatch1(recv)
3329
+ bool leaf;
3330
+ MAYBE_UNUSED(VALUE *) canary;
3331
+ MAYBE_UNUSED(VALUE) obj, recv, val;
3332
+
3333
+ START_OF_ORIGINAL_INSN(opt_regexpmatch1);
3334
+ recv = (VALUE)GET_OPERAND(1);
3335
+ obj = TOPN(0);
3336
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3337
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3338
+ SETUP_CANARY();
3339
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3340
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, recv);
3341
+ #line 1396 "insns.def"
3342
+ {
3343
+ val = vm_opt_regexpmatch1(recv, obj);
3344
+ }
3345
+ #line 3346 "vm.inc"
3346
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3347
+ CHECK_CANARY();
3348
+ INC_SP(INSN_ATTR(sp_inc));
3349
+ TOPN(0) = val;
3350
+ if (leaf) ADD_PC(INSN_ATTR(width));
3351
+ END_INSN(opt_regexpmatch1);
3352
+ # undef INSN_ATTR
3353
+ # undef NAME_OF_CURRENT_INSN
3354
+ }
3355
+
3356
+ /* insn opt_regexpmatch2(ci, cc)(obj2, obj1)(val) */
3357
+ INSN_ENTRY(opt_regexpmatch2)
3358
+ {
3359
+ # define NAME_OF_CURRENT_INSN opt_regexpmatch2
3360
+ # define INSN_ATTR(x) attr_ ## x ## _opt_regexpmatch2(ci, cc)
3361
+ bool leaf;
3362
+ MAYBE_UNUSED(VALUE *) canary;
3363
+ MAYBE_UNUSED(CALL_CACHE) cc;
3364
+ MAYBE_UNUSED(CALL_INFO) ci;
3365
+ MAYBE_UNUSED(VALUE) obj1, obj2, val;
3366
+
3367
+ START_OF_ORIGINAL_INSN(opt_regexpmatch2);
3368
+ ci = (CALL_INFO)GET_OPERAND(1);
3369
+ cc = (CALL_CACHE)GET_OPERAND(2);
3370
+ obj2 = TOPN(1);
3371
+ obj1 = TOPN(0);
3372
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3373
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3374
+ SETUP_CANARY();
3375
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3376
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ci);
3377
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, cc);
3378
+ #line 1406 "insns.def"
3379
+ {
3380
+ val = vm_opt_regexpmatch2(obj2, obj1);
3381
+
3382
+ if (val == Qundef) {
3383
+ CALL_SIMPLE_METHOD();
3384
+ }
3385
+ }
3386
+ #line 3387 "vm.inc"
3387
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3388
+ CHECK_CANARY();
3389
+ INC_SP(INSN_ATTR(sp_inc));
3390
+ TOPN(0) = val;
3391
+ if (leaf) ADD_PC(INSN_ATTR(width));
3392
+ END_INSN(opt_regexpmatch2);
3393
+ # undef INSN_ATTR
3394
+ # undef NAME_OF_CURRENT_INSN
3395
+ }
3396
+
3397
+ /* insn opt_call_c_function(funcptr)()() */
3398
+ INSN_ENTRY(opt_call_c_function)
3399
+ {
3400
+ # define NAME_OF_CURRENT_INSN opt_call_c_function
3401
+ # define INSN_ATTR(x) attr_ ## x ## _opt_call_c_function(funcptr)
3402
+ bool leaf;
3403
+ MAYBE_UNUSED(VALUE *) canary;
3404
+ MAYBE_UNUSED(rb_insn_func_t) funcptr;
3405
+
3406
+ START_OF_ORIGINAL_INSN(opt_call_c_function);
3407
+ funcptr = (rb_insn_func_t)GET_OPERAND(1);
3408
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3409
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3410
+ POPN(INSN_ATTR(popn));
3411
+ SETUP_CANARY();
3412
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3413
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, funcptr);
3414
+ #line 1422 "insns.def"
3415
+ {
3416
+ reg_cfp = (funcptr)(ec, reg_cfp);
3417
+
3418
+ if (reg_cfp == 0) {
3419
+ VALUE err = ec->errinfo;
3420
+ ec->errinfo = Qnil;
3421
+ THROW_EXCEPTION(err);
3422
+ }
3423
+
3424
+ RESTORE_REGS();
3425
+ NEXT_INSN();
3426
+ }
3427
+ #line 3428 "vm.inc"
3428
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3429
+ CHECK_CANARY();
3430
+ if (leaf) ADD_PC(INSN_ATTR(width));
3431
+ END_INSN(opt_call_c_function);
3432
+ # undef INSN_ATTR
3433
+ # undef NAME_OF_CURRENT_INSN
3434
+ }
3435
+
3436
+ /* insn bitblt()()(ret) */
3437
+ INSN_ENTRY(bitblt)
3438
+ {
3439
+ # define NAME_OF_CURRENT_INSN bitblt
3440
+ # define INSN_ATTR(x) attr_ ## x ## _bitblt()
3441
+ bool leaf;
3442
+ MAYBE_UNUSED(VALUE *) canary;
3443
+ MAYBE_UNUSED(VALUE) ret;
3444
+
3445
+ START_OF_ORIGINAL_INSN(bitblt);
3446
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3447
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3448
+ SETUP_CANARY();
3449
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3450
+ #line 1441 "insns.def"
3451
+ {
3452
+ ret = rb_str_new2("a bit of bacon, lettuce and tomato");
3453
+ }
3454
+ #line 3455 "vm.inc"
3455
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3456
+ CHECK_CANARY();
3457
+ INC_SP(INSN_ATTR(sp_inc));
3458
+ TOPN(0) = ret;
3459
+ if (leaf) ADD_PC(INSN_ATTR(width));
3460
+ END_INSN(bitblt);
3461
+ # undef INSN_ATTR
3462
+ # undef NAME_OF_CURRENT_INSN
3463
+ }
3464
+
3465
+ /* insn answer()()(ret) */
3466
+ INSN_ENTRY(answer)
3467
+ {
3468
+ # define NAME_OF_CURRENT_INSN answer
3469
+ # define INSN_ATTR(x) attr_ ## x ## _answer()
3470
+ bool leaf;
3471
+ MAYBE_UNUSED(VALUE *) canary;
3472
+ MAYBE_UNUSED(VALUE) ret;
3473
+
3474
+ START_OF_ORIGINAL_INSN(answer);
3475
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3476
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3477
+ SETUP_CANARY();
3478
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3479
+ #line 1451 "insns.def"
3480
+ {
3481
+ ret = INT2FIX(42);
3482
+ }
3483
+ #line 3484 "vm.inc"
3484
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3485
+ CHECK_CANARY();
3486
+ INC_SP(INSN_ATTR(sp_inc));
3487
+ TOPN(0) = ret;
3488
+ if (leaf) ADD_PC(INSN_ATTR(width));
3489
+ END_INSN(answer);
3490
+ # undef INSN_ATTR
3491
+ # undef NAME_OF_CURRENT_INSN
3492
+ }
3493
+
3494
+ /* insn getlocal_WC_0(idx)()(val) */
3495
+ INSN_ENTRY(getlocal_WC_0)
3496
+ {
3497
+ # define NAME_OF_CURRENT_INSN getlocal_WC_0
3498
+ # define INSN_ATTR(x) attr_ ## x ## _getlocal_WC_0(idx)
3499
+ bool leaf;
3500
+ MAYBE_UNUSED(VALUE *) canary;
3501
+ MAYBE_UNUSED(VALUE) val;
3502
+ MAYBE_UNUSED(lindex_t) idx;
3503
+ MAYBE_UNUSED(rb_num_t) level;
3504
+
3505
+ START_OF_ORIGINAL_INSN(getlocal_WC_0);
3506
+ #line 10 "defs/opt_operand.def"
3507
+ level = 0;
3508
+ #line 3509 "vm.inc"
3509
+ idx = (lindex_t)GET_OPERAND(1);
3510
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3511
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3512
+ SETUP_CANARY();
3513
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3514
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
3515
+ #line 81 "insns.def"
3516
+ {
3517
+ val = *(vm_get_ep(GET_EP(), level) - idx);
3518
+ RB_DEBUG_COUNTER_INC(lvar_get);
3519
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
3520
+ }
3521
+ #line 3522 "vm.inc"
3522
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3523
+ CHECK_CANARY();
3524
+ INC_SP(INSN_ATTR(sp_inc));
3525
+ TOPN(0) = val;
3526
+ if (leaf) ADD_PC(INSN_ATTR(width));
3527
+ END_INSN(getlocal_WC_0);
3528
+ # undef INSN_ATTR
3529
+ # undef NAME_OF_CURRENT_INSN
3530
+ }
3531
+
3532
+ /* insn getlocal_WC_1(idx)()(val) */
3533
+ INSN_ENTRY(getlocal_WC_1)
3534
+ {
3535
+ # define NAME_OF_CURRENT_INSN getlocal_WC_1
3536
+ # define INSN_ATTR(x) attr_ ## x ## _getlocal_WC_1(idx)
3537
+ bool leaf;
3538
+ MAYBE_UNUSED(VALUE *) canary;
3539
+ MAYBE_UNUSED(VALUE) val;
3540
+ MAYBE_UNUSED(lindex_t) idx;
3541
+ MAYBE_UNUSED(rb_num_t) level;
3542
+
3543
+ START_OF_ORIGINAL_INSN(getlocal_WC_1);
3544
+ #line 11 "defs/opt_operand.def"
3545
+ level = 1;
3546
+ #line 3547 "vm.inc"
3547
+ idx = (lindex_t)GET_OPERAND(1);
3548
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3549
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3550
+ SETUP_CANARY();
3551
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3552
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
3553
+ #line 81 "insns.def"
3554
+ {
3555
+ val = *(vm_get_ep(GET_EP(), level) - idx);
3556
+ RB_DEBUG_COUNTER_INC(lvar_get);
3557
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
3558
+ }
3559
+ #line 3560 "vm.inc"
3560
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3561
+ CHECK_CANARY();
3562
+ INC_SP(INSN_ATTR(sp_inc));
3563
+ TOPN(0) = val;
3564
+ if (leaf) ADD_PC(INSN_ATTR(width));
3565
+ END_INSN(getlocal_WC_1);
3566
+ # undef INSN_ATTR
3567
+ # undef NAME_OF_CURRENT_INSN
3568
+ }
3569
+
3570
+ /* insn setlocal_WC_0(idx)(val)() */
3571
+ INSN_ENTRY(setlocal_WC_0)
3572
+ {
3573
+ # define NAME_OF_CURRENT_INSN setlocal_WC_0
3574
+ # define INSN_ATTR(x) attr_ ## x ## _setlocal_WC_0(idx)
3575
+ bool leaf;
3576
+ MAYBE_UNUSED(VALUE *) canary;
3577
+ MAYBE_UNUSED(VALUE) val;
3578
+ MAYBE_UNUSED(lindex_t) idx;
3579
+ MAYBE_UNUSED(rb_num_t) level;
3580
+
3581
+ START_OF_ORIGINAL_INSN(setlocal_WC_0);
3582
+ #line 12 "defs/opt_operand.def"
3583
+ level = 0;
3584
+ #line 3585 "vm.inc"
3585
+ idx = (lindex_t)GET_OPERAND(1);
3586
+ val = TOPN(0);
3587
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3588
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3589
+ SETUP_CANARY();
3590
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3591
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
3592
+ #line 95 "insns.def"
3593
+ {
3594
+ vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val);
3595
+ RB_DEBUG_COUNTER_INC(lvar_set);
3596
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
3597
+ }
3598
+ #line 3599 "vm.inc"
3599
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3600
+ CHECK_CANARY();
3601
+ INC_SP(INSN_ATTR(sp_inc));
3602
+ if (leaf) ADD_PC(INSN_ATTR(width));
3603
+ END_INSN(setlocal_WC_0);
3604
+ # undef INSN_ATTR
3605
+ # undef NAME_OF_CURRENT_INSN
3606
+ }
3607
+
3608
+ /* insn setlocal_WC_1(idx)(val)() */
3609
+ INSN_ENTRY(setlocal_WC_1)
3610
+ {
3611
+ # define NAME_OF_CURRENT_INSN setlocal_WC_1
3612
+ # define INSN_ATTR(x) attr_ ## x ## _setlocal_WC_1(idx)
3613
+ bool leaf;
3614
+ MAYBE_UNUSED(VALUE *) canary;
3615
+ MAYBE_UNUSED(VALUE) val;
3616
+ MAYBE_UNUSED(lindex_t) idx;
3617
+ MAYBE_UNUSED(rb_num_t) level;
3618
+
3619
+ START_OF_ORIGINAL_INSN(setlocal_WC_1);
3620
+ #line 13 "defs/opt_operand.def"
3621
+ level = 1;
3622
+ #line 3623 "vm.inc"
3623
+ idx = (lindex_t)GET_OPERAND(1);
3624
+ val = TOPN(0);
3625
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3626
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3627
+ SETUP_CANARY();
3628
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3629
+ COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
3630
+ #line 95 "insns.def"
3631
+ {
3632
+ vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val);
3633
+ RB_DEBUG_COUNTER_INC(lvar_set);
3634
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
3635
+ }
3636
+ #line 3637 "vm.inc"
3637
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3638
+ CHECK_CANARY();
3639
+ INC_SP(INSN_ATTR(sp_inc));
3640
+ if (leaf) ADD_PC(INSN_ATTR(width));
3641
+ END_INSN(setlocal_WC_1);
3642
+ # undef INSN_ATTR
3643
+ # undef NAME_OF_CURRENT_INSN
3644
+ }
3645
+
3646
+ /* insn putobject_INT2FIX_0_()()(val) */
3647
+ INSN_ENTRY(putobject_INT2FIX_0_)
3648
+ {
3649
+ # define NAME_OF_CURRENT_INSN putobject_INT2FIX_0_
3650
+ # define INSN_ATTR(x) attr_ ## x ## _putobject_INT2FIX_0_()
3651
+ bool leaf;
3652
+ MAYBE_UNUSED(VALUE *) canary;
3653
+ MAYBE_UNUSED(VALUE) val;
3654
+
3655
+ START_OF_ORIGINAL_INSN(putobject_INT2FIX_0_);
3656
+ #line 15 "defs/opt_operand.def"
3657
+ val = INT2FIX(0);
3658
+ #line 3659 "vm.inc"
3659
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3660
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3661
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3662
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3663
+ INC_SP(INSN_ATTR(sp_inc));
3664
+ TOPN(0) = val;
3665
+ if (leaf) ADD_PC(INSN_ATTR(width));
3666
+ END_INSN(putobject_INT2FIX_0_);
3667
+ # undef INSN_ATTR
3668
+ # undef NAME_OF_CURRENT_INSN
3669
+ }
3670
+
3671
+ /* insn putobject_INT2FIX_1_()()(val) */
3672
+ INSN_ENTRY(putobject_INT2FIX_1_)
3673
+ {
3674
+ # define NAME_OF_CURRENT_INSN putobject_INT2FIX_1_
3675
+ # define INSN_ATTR(x) attr_ ## x ## _putobject_INT2FIX_1_()
3676
+ bool leaf;
3677
+ MAYBE_UNUSED(VALUE *) canary;
3678
+ MAYBE_UNUSED(VALUE) val;
3679
+
3680
+ START_OF_ORIGINAL_INSN(putobject_INT2FIX_1_);
3681
+ #line 16 "defs/opt_operand.def"
3682
+ val = INT2FIX(1);
3683
+ #line 3684 "vm.inc"
3684
+ DEBUG_ENTER_INSN(INSN_ATTR(name));
3685
+ if (! (leaf = INSN_ATTR(leaf))) ADD_PC(INSN_ATTR(width));
3686
+ COLLECT_USAGE_INSN(INSN_ATTR(bin));
3687
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3688
+ INC_SP(INSN_ATTR(sp_inc));
3689
+ TOPN(0) = val;
3690
+ if (leaf) ADD_PC(INSN_ATTR(width));
3691
+ END_INSN(putobject_INT2FIX_1_);
3692
+ # undef INSN_ATTR
3693
+ # undef NAME_OF_CURRENT_INSN
3694
+ }
3695
+
3696
+ /* insn trace_nop(...)(...)(...) */
3697
+ INSN_ENTRY(trace_nop)
3698
+ {
3699
+ vm_trace(ec, GET_CFP(), GET_PC());
3700
+ DISPATCH_ORIGINAL_INSN(nop);
3701
+ END_INSN(trace_nop);
3702
+ }
3703
+
3704
+ /* insn trace_getlocal(...)(...)(...) */
3705
+ INSN_ENTRY(trace_getlocal)
3706
+ {
3707
+ vm_trace(ec, GET_CFP(), GET_PC());
3708
+ DISPATCH_ORIGINAL_INSN(getlocal);
3709
+ END_INSN(trace_getlocal);
3710
+ }
3711
+
3712
+ /* insn trace_setlocal(...)(...)(...) */
3713
+ INSN_ENTRY(trace_setlocal)
3714
+ {
3715
+ vm_trace(ec, GET_CFP(), GET_PC());
3716
+ DISPATCH_ORIGINAL_INSN(setlocal);
3717
+ END_INSN(trace_setlocal);
3718
+ }
3719
+
3720
+ /* insn trace_getblockparam(...)(...)(...) */
3721
+ INSN_ENTRY(trace_getblockparam)
3722
+ {
3723
+ vm_trace(ec, GET_CFP(), GET_PC());
3724
+ DISPATCH_ORIGINAL_INSN(getblockparam);
3725
+ END_INSN(trace_getblockparam);
3726
+ }
3727
+
3728
+ /* insn trace_setblockparam(...)(...)(...) */
3729
+ INSN_ENTRY(trace_setblockparam)
3730
+ {
3731
+ vm_trace(ec, GET_CFP(), GET_PC());
3732
+ DISPATCH_ORIGINAL_INSN(setblockparam);
3733
+ END_INSN(trace_setblockparam);
3734
+ }
3735
+
3736
+ /* insn trace_getblockparamproxy(...)(...)(...) */
3737
+ INSN_ENTRY(trace_getblockparamproxy)
3738
+ {
3739
+ vm_trace(ec, GET_CFP(), GET_PC());
3740
+ DISPATCH_ORIGINAL_INSN(getblockparamproxy);
3741
+ END_INSN(trace_getblockparamproxy);
3742
+ }
3743
+
3744
+ /* insn trace_getspecial(...)(...)(...) */
3745
+ INSN_ENTRY(trace_getspecial)
3746
+ {
3747
+ vm_trace(ec, GET_CFP(), GET_PC());
3748
+ DISPATCH_ORIGINAL_INSN(getspecial);
3749
+ END_INSN(trace_getspecial);
3750
+ }
3751
+
3752
+ /* insn trace_setspecial(...)(...)(...) */
3753
+ INSN_ENTRY(trace_setspecial)
3754
+ {
3755
+ vm_trace(ec, GET_CFP(), GET_PC());
3756
+ DISPATCH_ORIGINAL_INSN(setspecial);
3757
+ END_INSN(trace_setspecial);
3758
+ }
3759
+
3760
+ /* insn trace_getinstancevariable(...)(...)(...) */
3761
+ INSN_ENTRY(trace_getinstancevariable)
3762
+ {
3763
+ vm_trace(ec, GET_CFP(), GET_PC());
3764
+ DISPATCH_ORIGINAL_INSN(getinstancevariable);
3765
+ END_INSN(trace_getinstancevariable);
3766
+ }
3767
+
3768
+ /* insn trace_setinstancevariable(...)(...)(...) */
3769
+ INSN_ENTRY(trace_setinstancevariable)
3770
+ {
3771
+ vm_trace(ec, GET_CFP(), GET_PC());
3772
+ DISPATCH_ORIGINAL_INSN(setinstancevariable);
3773
+ END_INSN(trace_setinstancevariable);
3774
+ }
3775
+
3776
+ /* insn trace_getclassvariable(...)(...)(...) */
3777
+ INSN_ENTRY(trace_getclassvariable)
3778
+ {
3779
+ vm_trace(ec, GET_CFP(), GET_PC());
3780
+ DISPATCH_ORIGINAL_INSN(getclassvariable);
3781
+ END_INSN(trace_getclassvariable);
3782
+ }
3783
+
3784
+ /* insn trace_setclassvariable(...)(...)(...) */
3785
+ INSN_ENTRY(trace_setclassvariable)
3786
+ {
3787
+ vm_trace(ec, GET_CFP(), GET_PC());
3788
+ DISPATCH_ORIGINAL_INSN(setclassvariable);
3789
+ END_INSN(trace_setclassvariable);
3790
+ }
3791
+
3792
+ /* insn trace_getconstant(...)(...)(...) */
3793
+ INSN_ENTRY(trace_getconstant)
3794
+ {
3795
+ vm_trace(ec, GET_CFP(), GET_PC());
3796
+ DISPATCH_ORIGINAL_INSN(getconstant);
3797
+ END_INSN(trace_getconstant);
3798
+ }
3799
+
3800
+ /* insn trace_setconstant(...)(...)(...) */
3801
+ INSN_ENTRY(trace_setconstant)
3802
+ {
3803
+ vm_trace(ec, GET_CFP(), GET_PC());
3804
+ DISPATCH_ORIGINAL_INSN(setconstant);
3805
+ END_INSN(trace_setconstant);
3806
+ }
3807
+
3808
+ /* insn trace_getglobal(...)(...)(...) */
3809
+ INSN_ENTRY(trace_getglobal)
3810
+ {
3811
+ vm_trace(ec, GET_CFP(), GET_PC());
3812
+ DISPATCH_ORIGINAL_INSN(getglobal);
3813
+ END_INSN(trace_getglobal);
3814
+ }
3815
+
3816
+ /* insn trace_setglobal(...)(...)(...) */
3817
+ INSN_ENTRY(trace_setglobal)
3818
+ {
3819
+ vm_trace(ec, GET_CFP(), GET_PC());
3820
+ DISPATCH_ORIGINAL_INSN(setglobal);
3821
+ END_INSN(trace_setglobal);
3822
+ }
3823
+
3824
+ /* insn trace_putnil(...)(...)(...) */
3825
+ INSN_ENTRY(trace_putnil)
3826
+ {
3827
+ vm_trace(ec, GET_CFP(), GET_PC());
3828
+ DISPATCH_ORIGINAL_INSN(putnil);
3829
+ END_INSN(trace_putnil);
3830
+ }
3831
+
3832
+ /* insn trace_putself(...)(...)(...) */
3833
+ INSN_ENTRY(trace_putself)
3834
+ {
3835
+ vm_trace(ec, GET_CFP(), GET_PC());
3836
+ DISPATCH_ORIGINAL_INSN(putself);
3837
+ END_INSN(trace_putself);
3838
+ }
3839
+
3840
+ /* insn trace_putobject(...)(...)(...) */
3841
+ INSN_ENTRY(trace_putobject)
3842
+ {
3843
+ vm_trace(ec, GET_CFP(), GET_PC());
3844
+ DISPATCH_ORIGINAL_INSN(putobject);
3845
+ END_INSN(trace_putobject);
3846
+ }
3847
+
3848
+ /* insn trace_putspecialobject(...)(...)(...) */
3849
+ INSN_ENTRY(trace_putspecialobject)
3850
+ {
3851
+ vm_trace(ec, GET_CFP(), GET_PC());
3852
+ DISPATCH_ORIGINAL_INSN(putspecialobject);
3853
+ END_INSN(trace_putspecialobject);
3854
+ }
3855
+
3856
+ /* insn trace_putiseq(...)(...)(...) */
3857
+ INSN_ENTRY(trace_putiseq)
3858
+ {
3859
+ vm_trace(ec, GET_CFP(), GET_PC());
3860
+ DISPATCH_ORIGINAL_INSN(putiseq);
3861
+ END_INSN(trace_putiseq);
3862
+ }
3863
+
3864
+ /* insn trace_putstring(...)(...)(...) */
3865
+ INSN_ENTRY(trace_putstring)
3866
+ {
3867
+ vm_trace(ec, GET_CFP(), GET_PC());
3868
+ DISPATCH_ORIGINAL_INSN(putstring);
3869
+ END_INSN(trace_putstring);
3870
+ }
3871
+
3872
+ /* insn trace_concatstrings(...)(...)(...) */
3873
+ INSN_ENTRY(trace_concatstrings)
3874
+ {
3875
+ vm_trace(ec, GET_CFP(), GET_PC());
3876
+ DISPATCH_ORIGINAL_INSN(concatstrings);
3877
+ END_INSN(trace_concatstrings);
3878
+ }
3879
+
3880
+ /* insn trace_tostring(...)(...)(...) */
3881
+ INSN_ENTRY(trace_tostring)
3882
+ {
3883
+ vm_trace(ec, GET_CFP(), GET_PC());
3884
+ DISPATCH_ORIGINAL_INSN(tostring);
3885
+ END_INSN(trace_tostring);
3886
+ }
3887
+
3888
+ /* insn trace_freezestring(...)(...)(...) */
3889
+ INSN_ENTRY(trace_freezestring)
3890
+ {
3891
+ vm_trace(ec, GET_CFP(), GET_PC());
3892
+ DISPATCH_ORIGINAL_INSN(freezestring);
3893
+ END_INSN(trace_freezestring);
3894
+ }
3895
+
3896
+ /* insn trace_toregexp(...)(...)(...) */
3897
+ INSN_ENTRY(trace_toregexp)
3898
+ {
3899
+ vm_trace(ec, GET_CFP(), GET_PC());
3900
+ DISPATCH_ORIGINAL_INSN(toregexp);
3901
+ END_INSN(trace_toregexp);
3902
+ }
3903
+
3904
+ /* insn trace_intern(...)(...)(...) */
3905
+ INSN_ENTRY(trace_intern)
3906
+ {
3907
+ vm_trace(ec, GET_CFP(), GET_PC());
3908
+ DISPATCH_ORIGINAL_INSN(intern);
3909
+ END_INSN(trace_intern);
3910
+ }
3911
+
3912
+ /* insn trace_newarray(...)(...)(...) */
3913
+ INSN_ENTRY(trace_newarray)
3914
+ {
3915
+ vm_trace(ec, GET_CFP(), GET_PC());
3916
+ DISPATCH_ORIGINAL_INSN(newarray);
3917
+ END_INSN(trace_newarray);
3918
+ }
3919
+
3920
+ /* insn trace_duparray(...)(...)(...) */
3921
+ INSN_ENTRY(trace_duparray)
3922
+ {
3923
+ vm_trace(ec, GET_CFP(), GET_PC());
3924
+ DISPATCH_ORIGINAL_INSN(duparray);
3925
+ END_INSN(trace_duparray);
3926
+ }
3927
+
3928
+ /* insn trace_duphash(...)(...)(...) */
3929
+ INSN_ENTRY(trace_duphash)
3930
+ {
3931
+ vm_trace(ec, GET_CFP(), GET_PC());
3932
+ DISPATCH_ORIGINAL_INSN(duphash);
3933
+ END_INSN(trace_duphash);
3934
+ }
3935
+
3936
+ /* insn trace_expandarray(...)(...)(...) */
3937
+ INSN_ENTRY(trace_expandarray)
3938
+ {
3939
+ vm_trace(ec, GET_CFP(), GET_PC());
3940
+ DISPATCH_ORIGINAL_INSN(expandarray);
3941
+ END_INSN(trace_expandarray);
3942
+ }
3943
+
3944
+ /* insn trace_concatarray(...)(...)(...) */
3945
+ INSN_ENTRY(trace_concatarray)
3946
+ {
3947
+ vm_trace(ec, GET_CFP(), GET_PC());
3948
+ DISPATCH_ORIGINAL_INSN(concatarray);
3949
+ END_INSN(trace_concatarray);
3950
+ }
3951
+
3952
+ /* insn trace_splatarray(...)(...)(...) */
3953
+ INSN_ENTRY(trace_splatarray)
3954
+ {
3955
+ vm_trace(ec, GET_CFP(), GET_PC());
3956
+ DISPATCH_ORIGINAL_INSN(splatarray);
3957
+ END_INSN(trace_splatarray);
3958
+ }
3959
+
3960
+ /* insn trace_newhash(...)(...)(...) */
3961
+ INSN_ENTRY(trace_newhash)
3962
+ {
3963
+ vm_trace(ec, GET_CFP(), GET_PC());
3964
+ DISPATCH_ORIGINAL_INSN(newhash);
3965
+ END_INSN(trace_newhash);
3966
+ }
3967
+
3968
+ /* insn trace_newrange(...)(...)(...) */
3969
+ INSN_ENTRY(trace_newrange)
3970
+ {
3971
+ vm_trace(ec, GET_CFP(), GET_PC());
3972
+ DISPATCH_ORIGINAL_INSN(newrange);
3973
+ END_INSN(trace_newrange);
3974
+ }
3975
+
3976
+ /* insn trace_pop(...)(...)(...) */
3977
+ INSN_ENTRY(trace_pop)
3978
+ {
3979
+ vm_trace(ec, GET_CFP(), GET_PC());
3980
+ DISPATCH_ORIGINAL_INSN(pop);
3981
+ END_INSN(trace_pop);
3982
+ }
3983
+
3984
+ /* insn trace_dup(...)(...)(...) */
3985
+ INSN_ENTRY(trace_dup)
3986
+ {
3987
+ vm_trace(ec, GET_CFP(), GET_PC());
3988
+ DISPATCH_ORIGINAL_INSN(dup);
3989
+ END_INSN(trace_dup);
3990
+ }
3991
+
3992
+ /* insn trace_dupn(...)(...)(...) */
3993
+ INSN_ENTRY(trace_dupn)
3994
+ {
3995
+ vm_trace(ec, GET_CFP(), GET_PC());
3996
+ DISPATCH_ORIGINAL_INSN(dupn);
3997
+ END_INSN(trace_dupn);
3998
+ }
3999
+
4000
+ /* insn trace_swap(...)(...)(...) */
4001
+ INSN_ENTRY(trace_swap)
4002
+ {
4003
+ vm_trace(ec, GET_CFP(), GET_PC());
4004
+ DISPATCH_ORIGINAL_INSN(swap);
4005
+ END_INSN(trace_swap);
4006
+ }
4007
+
4008
+ /* insn trace_reverse(...)(...)(...) */
4009
+ INSN_ENTRY(trace_reverse)
4010
+ {
4011
+ vm_trace(ec, GET_CFP(), GET_PC());
4012
+ DISPATCH_ORIGINAL_INSN(reverse);
4013
+ END_INSN(trace_reverse);
4014
+ }
4015
+
4016
+ /* insn trace_reput(...)(...)(...) */
4017
+ INSN_ENTRY(trace_reput)
4018
+ {
4019
+ vm_trace(ec, GET_CFP(), GET_PC());
4020
+ DISPATCH_ORIGINAL_INSN(reput);
4021
+ END_INSN(trace_reput);
4022
+ }
4023
+
4024
+ /* insn trace_topn(...)(...)(...) */
4025
+ INSN_ENTRY(trace_topn)
4026
+ {
4027
+ vm_trace(ec, GET_CFP(), GET_PC());
4028
+ DISPATCH_ORIGINAL_INSN(topn);
4029
+ END_INSN(trace_topn);
4030
+ }
4031
+
4032
+ /* insn trace_setn(...)(...)(...) */
4033
+ INSN_ENTRY(trace_setn)
4034
+ {
4035
+ vm_trace(ec, GET_CFP(), GET_PC());
4036
+ DISPATCH_ORIGINAL_INSN(setn);
4037
+ END_INSN(trace_setn);
4038
+ }
4039
+
4040
+ /* insn trace_adjuststack(...)(...)(...) */
4041
+ INSN_ENTRY(trace_adjuststack)
4042
+ {
4043
+ vm_trace(ec, GET_CFP(), GET_PC());
4044
+ DISPATCH_ORIGINAL_INSN(adjuststack);
4045
+ END_INSN(trace_adjuststack);
4046
+ }
4047
+
4048
+ /* insn trace_defined(...)(...)(...) */
4049
+ INSN_ENTRY(trace_defined)
4050
+ {
4051
+ vm_trace(ec, GET_CFP(), GET_PC());
4052
+ DISPATCH_ORIGINAL_INSN(defined);
4053
+ END_INSN(trace_defined);
4054
+ }
4055
+
4056
+ /* insn trace_checkmatch(...)(...)(...) */
4057
+ INSN_ENTRY(trace_checkmatch)
4058
+ {
4059
+ vm_trace(ec, GET_CFP(), GET_PC());
4060
+ DISPATCH_ORIGINAL_INSN(checkmatch);
4061
+ END_INSN(trace_checkmatch);
4062
+ }
4063
+
4064
+ /* insn trace_checkkeyword(...)(...)(...) */
4065
+ INSN_ENTRY(trace_checkkeyword)
4066
+ {
4067
+ vm_trace(ec, GET_CFP(), GET_PC());
4068
+ DISPATCH_ORIGINAL_INSN(checkkeyword);
4069
+ END_INSN(trace_checkkeyword);
4070
+ }
4071
+
4072
+ /* insn trace_checktype(...)(...)(...) */
4073
+ INSN_ENTRY(trace_checktype)
4074
+ {
4075
+ vm_trace(ec, GET_CFP(), GET_PC());
4076
+ DISPATCH_ORIGINAL_INSN(checktype);
4077
+ END_INSN(trace_checktype);
4078
+ }
4079
+
4080
+ /* insn trace_defineclass(...)(...)(...) */
4081
+ INSN_ENTRY(trace_defineclass)
4082
+ {
4083
+ vm_trace(ec, GET_CFP(), GET_PC());
4084
+ DISPATCH_ORIGINAL_INSN(defineclass);
4085
+ END_INSN(trace_defineclass);
4086
+ }
4087
+
4088
+ /* insn trace_send(...)(...)(...) */
4089
+ INSN_ENTRY(trace_send)
4090
+ {
4091
+ vm_trace(ec, GET_CFP(), GET_PC());
4092
+ DISPATCH_ORIGINAL_INSN(send);
4093
+ END_INSN(trace_send);
4094
+ }
4095
+
4096
+ /* insn trace_opt_send_without_block(...)(...)(...) */
4097
+ INSN_ENTRY(trace_opt_send_without_block)
4098
+ {
4099
+ vm_trace(ec, GET_CFP(), GET_PC());
4100
+ DISPATCH_ORIGINAL_INSN(opt_send_without_block);
4101
+ END_INSN(trace_opt_send_without_block);
4102
+ }
4103
+
4104
+ /* insn trace_opt_str_freeze(...)(...)(...) */
4105
+ INSN_ENTRY(trace_opt_str_freeze)
4106
+ {
4107
+ vm_trace(ec, GET_CFP(), GET_PC());
4108
+ DISPATCH_ORIGINAL_INSN(opt_str_freeze);
4109
+ END_INSN(trace_opt_str_freeze);
4110
+ }
4111
+
4112
+ /* insn trace_opt_str_uminus(...)(...)(...) */
4113
+ INSN_ENTRY(trace_opt_str_uminus)
4114
+ {
4115
+ vm_trace(ec, GET_CFP(), GET_PC());
4116
+ DISPATCH_ORIGINAL_INSN(opt_str_uminus);
4117
+ END_INSN(trace_opt_str_uminus);
4118
+ }
4119
+
4120
+ /* insn trace_opt_newarray_max(...)(...)(...) */
4121
+ INSN_ENTRY(trace_opt_newarray_max)
4122
+ {
4123
+ vm_trace(ec, GET_CFP(), GET_PC());
4124
+ DISPATCH_ORIGINAL_INSN(opt_newarray_max);
4125
+ END_INSN(trace_opt_newarray_max);
4126
+ }
4127
+
4128
+ /* insn trace_opt_newarray_min(...)(...)(...) */
4129
+ INSN_ENTRY(trace_opt_newarray_min)
4130
+ {
4131
+ vm_trace(ec, GET_CFP(), GET_PC());
4132
+ DISPATCH_ORIGINAL_INSN(opt_newarray_min);
4133
+ END_INSN(trace_opt_newarray_min);
4134
+ }
4135
+
4136
+ /* insn trace_invokesuper(...)(...)(...) */
4137
+ INSN_ENTRY(trace_invokesuper)
4138
+ {
4139
+ vm_trace(ec, GET_CFP(), GET_PC());
4140
+ DISPATCH_ORIGINAL_INSN(invokesuper);
4141
+ END_INSN(trace_invokesuper);
4142
+ }
4143
+
4144
+ /* insn trace_invokeblock(...)(...)(...) */
4145
+ INSN_ENTRY(trace_invokeblock)
4146
+ {
4147
+ vm_trace(ec, GET_CFP(), GET_PC());
4148
+ DISPATCH_ORIGINAL_INSN(invokeblock);
4149
+ END_INSN(trace_invokeblock);
4150
+ }
4151
+
4152
+ /* insn trace_leave(...)(...)(...) */
4153
+ INSN_ENTRY(trace_leave)
4154
+ {
4155
+ vm_trace(ec, GET_CFP(), GET_PC());
4156
+ DISPATCH_ORIGINAL_INSN(leave);
4157
+ END_INSN(trace_leave);
4158
+ }
4159
+
4160
+ /* insn trace_throw(...)(...)(...) */
4161
+ INSN_ENTRY(trace_throw)
4162
+ {
4163
+ vm_trace(ec, GET_CFP(), GET_PC());
4164
+ DISPATCH_ORIGINAL_INSN(throw);
4165
+ END_INSN(trace_throw);
4166
+ }
4167
+
4168
+ /* insn trace_jump(...)(...)(...) */
4169
+ INSN_ENTRY(trace_jump)
4170
+ {
4171
+ vm_trace(ec, GET_CFP(), GET_PC());
4172
+ DISPATCH_ORIGINAL_INSN(jump);
4173
+ END_INSN(trace_jump);
4174
+ }
4175
+
4176
+ /* insn trace_branchif(...)(...)(...) */
4177
+ INSN_ENTRY(trace_branchif)
4178
+ {
4179
+ vm_trace(ec, GET_CFP(), GET_PC());
4180
+ DISPATCH_ORIGINAL_INSN(branchif);
4181
+ END_INSN(trace_branchif);
4182
+ }
4183
+
4184
+ /* insn trace_branchunless(...)(...)(...) */
4185
+ INSN_ENTRY(trace_branchunless)
4186
+ {
4187
+ vm_trace(ec, GET_CFP(), GET_PC());
4188
+ DISPATCH_ORIGINAL_INSN(branchunless);
4189
+ END_INSN(trace_branchunless);
4190
+ }
4191
+
4192
+ /* insn trace_branchnil(...)(...)(...) */
4193
+ INSN_ENTRY(trace_branchnil)
4194
+ {
4195
+ vm_trace(ec, GET_CFP(), GET_PC());
4196
+ DISPATCH_ORIGINAL_INSN(branchnil);
4197
+ END_INSN(trace_branchnil);
4198
+ }
4199
+
4200
+ /* insn trace_opt_getinlinecache(...)(...)(...) */
4201
+ INSN_ENTRY(trace_opt_getinlinecache)
4202
+ {
4203
+ vm_trace(ec, GET_CFP(), GET_PC());
4204
+ DISPATCH_ORIGINAL_INSN(opt_getinlinecache);
4205
+ END_INSN(trace_opt_getinlinecache);
4206
+ }
4207
+
4208
+ /* insn trace_opt_setinlinecache(...)(...)(...) */
4209
+ INSN_ENTRY(trace_opt_setinlinecache)
4210
+ {
4211
+ vm_trace(ec, GET_CFP(), GET_PC());
4212
+ DISPATCH_ORIGINAL_INSN(opt_setinlinecache);
4213
+ END_INSN(trace_opt_setinlinecache);
4214
+ }
4215
+
4216
+ /* insn trace_once(...)(...)(...) */
4217
+ INSN_ENTRY(trace_once)
4218
+ {
4219
+ vm_trace(ec, GET_CFP(), GET_PC());
4220
+ DISPATCH_ORIGINAL_INSN(once);
4221
+ END_INSN(trace_once);
4222
+ }
4223
+
4224
+ /* insn trace_opt_case_dispatch(...)(...)(...) */
4225
+ INSN_ENTRY(trace_opt_case_dispatch)
4226
+ {
4227
+ vm_trace(ec, GET_CFP(), GET_PC());
4228
+ DISPATCH_ORIGINAL_INSN(opt_case_dispatch);
4229
+ END_INSN(trace_opt_case_dispatch);
4230
+ }
4231
+
4232
+ /* insn trace_opt_plus(...)(...)(...) */
4233
+ INSN_ENTRY(trace_opt_plus)
4234
+ {
4235
+ vm_trace(ec, GET_CFP(), GET_PC());
4236
+ DISPATCH_ORIGINAL_INSN(opt_plus);
4237
+ END_INSN(trace_opt_plus);
4238
+ }
4239
+
4240
+ /* insn trace_opt_minus(...)(...)(...) */
4241
+ INSN_ENTRY(trace_opt_minus)
4242
+ {
4243
+ vm_trace(ec, GET_CFP(), GET_PC());
4244
+ DISPATCH_ORIGINAL_INSN(opt_minus);
4245
+ END_INSN(trace_opt_minus);
4246
+ }
4247
+
4248
+ /* insn trace_opt_mult(...)(...)(...) */
4249
+ INSN_ENTRY(trace_opt_mult)
4250
+ {
4251
+ vm_trace(ec, GET_CFP(), GET_PC());
4252
+ DISPATCH_ORIGINAL_INSN(opt_mult);
4253
+ END_INSN(trace_opt_mult);
4254
+ }
4255
+
4256
+ /* insn trace_opt_div(...)(...)(...) */
4257
+ INSN_ENTRY(trace_opt_div)
4258
+ {
4259
+ vm_trace(ec, GET_CFP(), GET_PC());
4260
+ DISPATCH_ORIGINAL_INSN(opt_div);
4261
+ END_INSN(trace_opt_div);
4262
+ }
4263
+
4264
+ /* insn trace_opt_mod(...)(...)(...) */
4265
+ INSN_ENTRY(trace_opt_mod)
4266
+ {
4267
+ vm_trace(ec, GET_CFP(), GET_PC());
4268
+ DISPATCH_ORIGINAL_INSN(opt_mod);
4269
+ END_INSN(trace_opt_mod);
4270
+ }
4271
+
4272
+ /* insn trace_opt_eq(...)(...)(...) */
4273
+ INSN_ENTRY(trace_opt_eq)
4274
+ {
4275
+ vm_trace(ec, GET_CFP(), GET_PC());
4276
+ DISPATCH_ORIGINAL_INSN(opt_eq);
4277
+ END_INSN(trace_opt_eq);
4278
+ }
4279
+
4280
+ /* insn trace_opt_neq(...)(...)(...) */
4281
+ INSN_ENTRY(trace_opt_neq)
4282
+ {
4283
+ vm_trace(ec, GET_CFP(), GET_PC());
4284
+ DISPATCH_ORIGINAL_INSN(opt_neq);
4285
+ END_INSN(trace_opt_neq);
4286
+ }
4287
+
4288
+ /* insn trace_opt_lt(...)(...)(...) */
4289
+ INSN_ENTRY(trace_opt_lt)
4290
+ {
4291
+ vm_trace(ec, GET_CFP(), GET_PC());
4292
+ DISPATCH_ORIGINAL_INSN(opt_lt);
4293
+ END_INSN(trace_opt_lt);
4294
+ }
4295
+
4296
+ /* insn trace_opt_le(...)(...)(...) */
4297
+ INSN_ENTRY(trace_opt_le)
4298
+ {
4299
+ vm_trace(ec, GET_CFP(), GET_PC());
4300
+ DISPATCH_ORIGINAL_INSN(opt_le);
4301
+ END_INSN(trace_opt_le);
4302
+ }
4303
+
4304
+ /* insn trace_opt_gt(...)(...)(...) */
4305
+ INSN_ENTRY(trace_opt_gt)
4306
+ {
4307
+ vm_trace(ec, GET_CFP(), GET_PC());
4308
+ DISPATCH_ORIGINAL_INSN(opt_gt);
4309
+ END_INSN(trace_opt_gt);
4310
+ }
4311
+
4312
+ /* insn trace_opt_ge(...)(...)(...) */
4313
+ INSN_ENTRY(trace_opt_ge)
4314
+ {
4315
+ vm_trace(ec, GET_CFP(), GET_PC());
4316
+ DISPATCH_ORIGINAL_INSN(opt_ge);
4317
+ END_INSN(trace_opt_ge);
4318
+ }
4319
+
4320
+ /* insn trace_opt_ltlt(...)(...)(...) */
4321
+ INSN_ENTRY(trace_opt_ltlt)
4322
+ {
4323
+ vm_trace(ec, GET_CFP(), GET_PC());
4324
+ DISPATCH_ORIGINAL_INSN(opt_ltlt);
4325
+ END_INSN(trace_opt_ltlt);
4326
+ }
4327
+
4328
+ /* insn trace_opt_and(...)(...)(...) */
4329
+ INSN_ENTRY(trace_opt_and)
4330
+ {
4331
+ vm_trace(ec, GET_CFP(), GET_PC());
4332
+ DISPATCH_ORIGINAL_INSN(opt_and);
4333
+ END_INSN(trace_opt_and);
4334
+ }
4335
+
4336
+ /* insn trace_opt_or(...)(...)(...) */
4337
+ INSN_ENTRY(trace_opt_or)
4338
+ {
4339
+ vm_trace(ec, GET_CFP(), GET_PC());
4340
+ DISPATCH_ORIGINAL_INSN(opt_or);
4341
+ END_INSN(trace_opt_or);
4342
+ }
4343
+
4344
+ /* insn trace_opt_aref(...)(...)(...) */
4345
+ INSN_ENTRY(trace_opt_aref)
4346
+ {
4347
+ vm_trace(ec, GET_CFP(), GET_PC());
4348
+ DISPATCH_ORIGINAL_INSN(opt_aref);
4349
+ END_INSN(trace_opt_aref);
4350
+ }
4351
+
4352
+ /* insn trace_opt_aset(...)(...)(...) */
4353
+ INSN_ENTRY(trace_opt_aset)
4354
+ {
4355
+ vm_trace(ec, GET_CFP(), GET_PC());
4356
+ DISPATCH_ORIGINAL_INSN(opt_aset);
4357
+ END_INSN(trace_opt_aset);
4358
+ }
4359
+
4360
+ /* insn trace_opt_aset_with(...)(...)(...) */
4361
+ INSN_ENTRY(trace_opt_aset_with)
4362
+ {
4363
+ vm_trace(ec, GET_CFP(), GET_PC());
4364
+ DISPATCH_ORIGINAL_INSN(opt_aset_with);
4365
+ END_INSN(trace_opt_aset_with);
4366
+ }
4367
+
4368
+ /* insn trace_opt_aref_with(...)(...)(...) */
4369
+ INSN_ENTRY(trace_opt_aref_with)
4370
+ {
4371
+ vm_trace(ec, GET_CFP(), GET_PC());
4372
+ DISPATCH_ORIGINAL_INSN(opt_aref_with);
4373
+ END_INSN(trace_opt_aref_with);
4374
+ }
4375
+
4376
+ /* insn trace_opt_length(...)(...)(...) */
4377
+ INSN_ENTRY(trace_opt_length)
4378
+ {
4379
+ vm_trace(ec, GET_CFP(), GET_PC());
4380
+ DISPATCH_ORIGINAL_INSN(opt_length);
4381
+ END_INSN(trace_opt_length);
4382
+ }
4383
+
4384
+ /* insn trace_opt_size(...)(...)(...) */
4385
+ INSN_ENTRY(trace_opt_size)
4386
+ {
4387
+ vm_trace(ec, GET_CFP(), GET_PC());
4388
+ DISPATCH_ORIGINAL_INSN(opt_size);
4389
+ END_INSN(trace_opt_size);
4390
+ }
4391
+
4392
+ /* insn trace_opt_empty_p(...)(...)(...) */
4393
+ INSN_ENTRY(trace_opt_empty_p)
4394
+ {
4395
+ vm_trace(ec, GET_CFP(), GET_PC());
4396
+ DISPATCH_ORIGINAL_INSN(opt_empty_p);
4397
+ END_INSN(trace_opt_empty_p);
4398
+ }
4399
+
4400
+ /* insn trace_opt_succ(...)(...)(...) */
4401
+ INSN_ENTRY(trace_opt_succ)
4402
+ {
4403
+ vm_trace(ec, GET_CFP(), GET_PC());
4404
+ DISPATCH_ORIGINAL_INSN(opt_succ);
4405
+ END_INSN(trace_opt_succ);
4406
+ }
4407
+
4408
+ /* insn trace_opt_not(...)(...)(...) */
4409
+ INSN_ENTRY(trace_opt_not)
4410
+ {
4411
+ vm_trace(ec, GET_CFP(), GET_PC());
4412
+ DISPATCH_ORIGINAL_INSN(opt_not);
4413
+ END_INSN(trace_opt_not);
4414
+ }
4415
+
4416
+ /* insn trace_opt_regexpmatch1(...)(...)(...) */
4417
+ INSN_ENTRY(trace_opt_regexpmatch1)
4418
+ {
4419
+ vm_trace(ec, GET_CFP(), GET_PC());
4420
+ DISPATCH_ORIGINAL_INSN(opt_regexpmatch1);
4421
+ END_INSN(trace_opt_regexpmatch1);
4422
+ }
4423
+
4424
+ /* insn trace_opt_regexpmatch2(...)(...)(...) */
4425
+ INSN_ENTRY(trace_opt_regexpmatch2)
4426
+ {
4427
+ vm_trace(ec, GET_CFP(), GET_PC());
4428
+ DISPATCH_ORIGINAL_INSN(opt_regexpmatch2);
4429
+ END_INSN(trace_opt_regexpmatch2);
4430
+ }
4431
+
4432
+ /* insn trace_opt_call_c_function(...)(...)(...) */
4433
+ INSN_ENTRY(trace_opt_call_c_function)
4434
+ {
4435
+ vm_trace(ec, GET_CFP(), GET_PC());
4436
+ DISPATCH_ORIGINAL_INSN(opt_call_c_function);
4437
+ END_INSN(trace_opt_call_c_function);
4438
+ }
4439
+
4440
+ /* insn trace_bitblt(...)(...)(...) */
4441
+ INSN_ENTRY(trace_bitblt)
4442
+ {
4443
+ vm_trace(ec, GET_CFP(), GET_PC());
4444
+ DISPATCH_ORIGINAL_INSN(bitblt);
4445
+ END_INSN(trace_bitblt);
4446
+ }
4447
+
4448
+ /* insn trace_answer(...)(...)(...) */
4449
+ INSN_ENTRY(trace_answer)
4450
+ {
4451
+ vm_trace(ec, GET_CFP(), GET_PC());
4452
+ DISPATCH_ORIGINAL_INSN(answer);
4453
+ END_INSN(trace_answer);
4454
+ }
4455
+
4456
+ /* insn trace_getlocal_WC_0(...)(...)(...) */
4457
+ INSN_ENTRY(trace_getlocal_WC_0)
4458
+ {
4459
+ vm_trace(ec, GET_CFP(), GET_PC());
4460
+ DISPATCH_ORIGINAL_INSN(getlocal_WC_0);
4461
+ END_INSN(trace_getlocal_WC_0);
4462
+ }
4463
+
4464
+ /* insn trace_getlocal_WC_1(...)(...)(...) */
4465
+ INSN_ENTRY(trace_getlocal_WC_1)
4466
+ {
4467
+ vm_trace(ec, GET_CFP(), GET_PC());
4468
+ DISPATCH_ORIGINAL_INSN(getlocal_WC_1);
4469
+ END_INSN(trace_getlocal_WC_1);
4470
+ }
4471
+
4472
+ /* insn trace_setlocal_WC_0(...)(...)(...) */
4473
+ INSN_ENTRY(trace_setlocal_WC_0)
4474
+ {
4475
+ vm_trace(ec, GET_CFP(), GET_PC());
4476
+ DISPATCH_ORIGINAL_INSN(setlocal_WC_0);
4477
+ END_INSN(trace_setlocal_WC_0);
4478
+ }
4479
+
4480
+ /* insn trace_setlocal_WC_1(...)(...)(...) */
4481
+ INSN_ENTRY(trace_setlocal_WC_1)
4482
+ {
4483
+ vm_trace(ec, GET_CFP(), GET_PC());
4484
+ DISPATCH_ORIGINAL_INSN(setlocal_WC_1);
4485
+ END_INSN(trace_setlocal_WC_1);
4486
+ }
4487
+
4488
+ /* insn trace_putobject_INT2FIX_0_(...)(...)(...) */
4489
+ INSN_ENTRY(trace_putobject_INT2FIX_0_)
4490
+ {
4491
+ vm_trace(ec, GET_CFP(), GET_PC());
4492
+ DISPATCH_ORIGINAL_INSN(putobject_INT2FIX_0_);
4493
+ END_INSN(trace_putobject_INT2FIX_0_);
4494
+ }
4495
+
4496
+ /* insn trace_putobject_INT2FIX_1_(...)(...)(...) */
4497
+ INSN_ENTRY(trace_putobject_INT2FIX_1_)
4498
+ {
4499
+ vm_trace(ec, GET_CFP(), GET_PC());
4500
+ DISPATCH_ORIGINAL_INSN(putobject_INT2FIX_1_);
4501
+ END_INSN(trace_putobject_INT2FIX_1_);
4502
+ }