debase-ruby_core_source 0.10.2 → 0.10.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }