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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +34 -0
- data/README.md +6 -2
- data/Rakefile +6 -3
- data/debase-ruby_core_source.gemspec +2 -1
- data/lib/debase/ruby_core_source.rb +6 -5
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/addr2line.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/build_assert/build_assert.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/check_type/check_type.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/container_of/container_of.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/list/list.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/str/str.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/constant.h +1 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/debug_counter.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/dln.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/encindex.h +2 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/eval_intern.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/gc.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/id.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/id_table.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/insns.inc +2 -2
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/insns_info.inc +157 -157
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/internal.h +5 -4
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/iseq.h +2 -2
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/known_errors.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/method.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/node.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/node_name.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/opt_sc.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/optinsn.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/optunifs.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/parse.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/probes_helper.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/regenc.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/regint.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/regparse.h +0 -0
- data/lib/debase/ruby_core_source/ruby-2.5.1-p57/revision.h +1 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ruby_assert.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ruby_atomic.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/siphash.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/symbol.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/thread_pthread.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/thread_win32.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/timev.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/transcode_data.h +0 -0
- data/lib/debase/ruby_core_source/ruby-2.5.1-p57/version.h +73 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm.inc +13 -13
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_call_iseq_optimized.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_core.h +3 -4
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/vm_debug.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_exec.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_insnhelper.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_opts.h +1 -2
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vmtc.inc +2 -2
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/addr2line.h +1 -1
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/build_assert/build_assert.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/check_type/check_type.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/container_of/container_of.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/list/list.h +20 -5
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/str/str.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/constant.h +1 -0
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/debug_counter.h +283 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/dln.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/encindex.h +2 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/eval_intern.h +45 -53
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/gc.h +2 -3
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/hrtime.h +168 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/id.h +4 -2
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/id_table.h +0 -0
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/insns.inc +249 -0
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/insns_info.inc +9374 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/internal.h +608 -100
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/iseq.h +127 -91
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/known_errors.inc +477 -432
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/method.h +28 -15
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/mjit.h +148 -0
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/mjit_compile.inc +4224 -0
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/node.h +449 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/node_name.inc +6 -18
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/opt_sc.inc +109 -0
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/optinsn.inc +128 -0
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/optunifs.inc +43 -0
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/parse.h +210 -0
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/probes_helper.h +42 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/regenc.h +1 -1
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/regint.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/regparse.h +1 -1
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/revision.h +1 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ruby_assert.h +6 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ruby_atomic.h +14 -3
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/siphash.h +1 -1
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/symbol.h +1 -1
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/thread_pthread.h +75 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/thread_win32.h +0 -0
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/timev.h +53 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/transcode_data.h +0 -0
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/transient_heap.h +60 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/version.h +7 -7
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/vm.inc +4502 -0
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/vm_call_iseq_optimized.inc +213 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/vm_core.h +385 -182
- data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/vm_debug.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/vm_exec.h +33 -13
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/vm_insnhelper.h +316 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/vm_opts.h +18 -5
- data/lib/debase/ruby_core_source/ruby-2.6.0-p0/vmtc.inc +243 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/addr2line.h +21 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/build_assert/build_assert.h +40 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/check_type/check_type.h +63 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/container_of/container_of.h +142 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/list/list.h +788 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/str/str.h +16 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/constant.h +51 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/debug_counter.h +283 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/dln.h +51 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/encindex.h +69 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/eval_intern.h +333 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/gc.h +116 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/hrtime.h +168 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/id.h +252 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/id_table.h +31 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/insns.inc +249 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/insns_info.inc +9374 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/internal.h +2470 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/iseq.h +304 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/known_errors.inc +791 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/method.h +229 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/mjit.h +148 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/mjit_compile.inc +4226 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/node.h +449 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/node_name.inc +200 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/opt_sc.inc +109 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/optinsn.inc +128 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/optunifs.inc +43 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.5-p114}/parse.h +47 -31
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/probes_helper.h +42 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/regenc.h +254 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/regint.h +938 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/regparse.h +370 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/revision.h +1 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ruby_assert.h +60 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ruby_atomic.h +244 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/siphash.h +48 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/symbol.h +112 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/thread_pthread.h +75 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/thread_win32.h +36 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/timev.h +53 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/transcode_data.h +139 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/transient_heap.h +60 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.5-p114}/version.h +7 -7
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm.inc +4504 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_call_iseq_optimized.inc +213 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_core.h +1910 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_debug.h +37 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_exec.h +202 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_insnhelper.h +316 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_opts.h +70 -0
- data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vmtc.inc +243 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/addr2line.h +21 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/builtin.h +78 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/build_assert/build_assert.h +40 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/check_type/check_type.h +63 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/container_of/container_of.h +142 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/list/list.h +788 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/str/str.h +16 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/constant.h +50 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/debug_counter.h +390 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/dln.h +51 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/encindex.h +69 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/eval_intern.h +312 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/gc.h +131 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/hrtime.h +168 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/id.h +290 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/id_table.h +34 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/insns.inc +253 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/insns_info.inc +9197 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/internal.h +2697 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/iseq.h +312 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/known_errors.inc +791 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/method.h +229 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/mjit.h +177 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/mjit_compile.inc +7779 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/node.h +476 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/node_name.inc +208 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/opt_sc.inc +109 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/optinsn.inc +128 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/optunifs.inc +43 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/parse.h +210 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/probes_helper.h +42 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/regenc.h +254 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/regint.h +938 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/regparse.h +370 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/revision.h +2 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ruby_assert.h +15 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ruby_atomic.h +244 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/siphash.h +48 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/symbol.h +119 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/thread_pthread.h +75 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/thread_win32.h +36 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/timev.h +56 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/transcode_data.h +139 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/transient_heap.h +62 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/variable.h +9 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/version.h +77 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm.inc +5466 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_call_iseq_optimized.inc +237 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_core.h +1968 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_debug.h +34 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_exec.h +193 -0
- data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.7.0-p0}/vm_insnhelper.h +81 -64
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_opts.h +72 -0
- data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vmtc.inc +247 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/addr2line.h +20 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/builtin.h +83 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/build_assert/build_assert.h +40 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/check_type/check_type.h +63 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/container_of/container_of.h +142 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/list/list.h +788 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/str/str.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/constant.h +55 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/debug_counter.h +423 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/dln.h +36 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/encindex.h +70 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/eval_intern.h +312 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/gc.h +140 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/hrtime.h +168 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/id.h +290 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/id_table.h +36 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/insns.inc +249 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/insns_info.inc +8979 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal.h +107 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/array.h +114 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/bignum.h +246 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/bits.h +566 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/class.h +168 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/compar.h +50 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/compile.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/compilers.h +108 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/complex.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/cont.h +25 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/dir.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/enc.h +20 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/encoding.h +28 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/enum.h +19 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/enumerator.h +22 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/error.h +131 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/eval.h +33 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/file.h +39 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/fixnum.h +185 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/gc.h +154 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/hash.h +240 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/imemo.h +243 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/inits.h +51 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/io.h +35 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/load.h +19 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/loadpath.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/math.h +24 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/missing.h +19 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/mjit.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/numeric.h +252 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/object.h +83 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/parse.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/proc.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/process.h +136 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/random.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/range.h +37 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/rational.h +69 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/re.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/sanitizers.h +191 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/scheduler.h +35 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/serial.h +24 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/signal.h +22 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/static_assert.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/string.h +135 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/struct.h +154 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/symbol.h +41 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/thread.h +60 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/time.h +35 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/transcode.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/util.h +31 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/variable.h +83 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/vm.h +135 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/warnings.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/iseq.h +304 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/known_errors.inc +791 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/method.h +245 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/mjit.h +197 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/mjit_compile.inc +8082 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/node.h +484 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/node_name.inc +210 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/opt_sc.inc +109 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/optinsn.inc +128 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/optunifs.inc +43 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/parse.h +211 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/probes_helper.h +44 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ractor.h +271 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ractor_pub.h +50 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/regenc.h +254 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/regint.h +938 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/regparse.h +370 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/revision.h +2 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ruby_assert.h +15 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ruby_atomic.h +236 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/siphash.h +48 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/symbol.h +119 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/thread_pthread.h +106 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/thread_win32.h +66 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/timev.h +57 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/transcode_data.h +138 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/transient_heap.h +61 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/variable.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/version.h +89 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm.inc +5360 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_call_iseq_optimized.inc +244 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_callinfo.h +457 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_core.h +1952 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_debug.h +116 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_exec.h +196 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_insnhelper.h +260 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_opts.h +73 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_sync.h +97 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vmtc.inc +243 -0
- data/lib/debase/ruby_core_source/version.rb +1 -1
- metadata +335 -102
- data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/insns.inc +0 -118
- data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/insns_info.inc +0 -827
- data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/node.h +0 -523
- data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/opt_sc.inc +0 -809
- data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/optinsn.inc +0 -77
- data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/optunifs.inc +0 -49
- data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/probes_helper.h +0 -43
- data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/revision.h +0 -1
- data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/vm.inc +0 -2935
- data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/vm_call_iseq_optimized.inc +0 -212
- data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/vmtc.inc +0 -115
- data/lib/debase/ruby_core_source/ruby-2.5.0-rc1/debug_counter.h +0 -109
- data/lib/debase/ruby_core_source/ruby-2.5.0-rc1/revision.h +0 -1
- data/lib/debase/ruby_core_source/ruby-2.5.0-rc1/thread_pthread.h +0 -54
- 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),
|
|
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]))
|
|
File without changes
|
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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 */
|
|
File without changes
|
|
@@ -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
|
|
File without changes
|
|
@@ -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.
|
|
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
|
|
3
|
+
#define RUBY_PATCHLEVEL 0
|
|
4
4
|
|
|
5
|
-
#define RUBY_RELEASE_YEAR
|
|
5
|
+
#define RUBY_RELEASE_YEAR 2018
|
|
6
6
|
#define RUBY_RELEASE_MONTH 12
|
|
7
|
-
#define RUBY_RELEASE_DAY
|
|
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 "
|
|
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
|
|
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
|
+
}
|