debase-ruby_core_source 0.10.11 → 0.10.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/addr2line.h +0 -0
  3. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/builtin.h +0 -0
  4. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/build_assert/build_assert.h +0 -0
  5. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/check_type/check_type.h +0 -0
  6. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/container_of/container_of.h +0 -0
  7. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/list/list.h +0 -0
  8. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/str/str.h +0 -0
  9. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/constant.h +0 -0
  10. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/debug_counter.h +38 -4
  11. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/dln.h +0 -0
  12. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/encindex.h +0 -0
  13. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/eval_intern.h +16 -5
  14. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/gc.h +0 -0
  15. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/hrtime.h +0 -0
  16. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/id.h +0 -0
  17. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/id_table.h +0 -0
  18. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/insns.inc +0 -0
  19. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/insns_info.inc +93 -89
  20. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal.h +0 -0
  21. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/array.h +5 -0
  22. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/bignum.h +0 -0
  23. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/bits.h +0 -0
  24. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/class.h +7 -1
  25. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/compar.h +0 -0
  26. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/compile.h +0 -0
  27. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/compilers.h +0 -0
  28. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/complex.h +0 -0
  29. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/cont.h +0 -0
  30. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/dir.h +0 -0
  31. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/enc.h +0 -0
  32. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/encoding.h +0 -0
  33. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/enum.h +0 -0
  34. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/enumerator.h +0 -0
  35. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/error.h +0 -7
  36. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/eval.h +0 -0
  37. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/file.h +0 -0
  38. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/fixnum.h +1 -1
  39. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/gc.h +9 -2
  40. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/hash.h +2 -1
  41. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/imemo.h +0 -0
  42. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/inits.h +0 -0
  43. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/io.h +0 -0
  44. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/load.h +0 -0
  45. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/loadpath.h +0 -0
  46. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/math.h +0 -0
  47. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/missing.h +0 -0
  48. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/numeric.h +4 -1
  49. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/object.h +0 -0
  50. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/parse.h +0 -0
  51. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/proc.h +1 -0
  52. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/process.h +0 -0
  53. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/random.h +0 -0
  54. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/range.h +4 -0
  55. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/rational.h +2 -0
  56. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/re.h +0 -0
  57. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/sanitizers.h +0 -0
  58. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/scheduler.h +9 -0
  59. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/serial.h +0 -0
  60. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/signal.h +0 -0
  61. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/static_assert.h +0 -0
  62. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/string.h +5 -0
  63. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/struct.h +0 -0
  64. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/symbol.h +0 -0
  65. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/thread.h +0 -6
  66. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/time.h +0 -0
  67. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/transcode.h +0 -0
  68. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/util.h +0 -0
  69. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/variable.h +1 -0
  70. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/vm.h +7 -6
  71. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/warnings.h +0 -0
  72. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/iseq.h +1 -0
  73. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/known_errors.inc +0 -0
  74. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/method.h +0 -0
  75. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/mjit.h +37 -14
  76. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/mjit_compile.inc +715 -557
  77. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/node.h +2 -2
  78. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/node_name.inc +0 -0
  79. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/opt_sc.inc +0 -0
  80. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/optinsn.inc +0 -0
  81. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/optunifs.inc +0 -0
  82. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/parse.h +0 -0
  83. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/probes_helper.h +0 -0
  84. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1/ractor.h → ruby-3.0.0-p0/ractor_core.h} +97 -25
  85. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/regenc.h +0 -0
  86. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/regint.h +0 -0
  87. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/regparse.h +0 -0
  88. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/revision.h +2 -0
  89. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ruby_assert.h +0 -0
  90. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ruby_atomic.h +23 -0
  91. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/siphash.h +0 -0
  92. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/symbol.h +0 -0
  93. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/thread_pthread.h +23 -14
  94. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/thread_win32.h +5 -10
  95. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/timev.h +0 -0
  96. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/transcode_data.h +0 -0
  97. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/transient_heap.h +4 -0
  98. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/variable.h +2 -1
  99. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/version.h +3 -3
  100. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm.inc +94 -99
  101. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_call_iseq_optimized.inc +48 -48
  102. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_callinfo.h +2 -3
  103. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_core.h +96 -25
  104. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_debug.h +0 -0
  105. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_exec.h +0 -0
  106. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_insnhelper.h +1 -4
  107. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_opts.h +0 -0
  108. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_sync.h +44 -5
  109. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vmtc.inc +0 -0
  110. data/lib/debase/ruby_core_source/version.rb +1 -1
  111. metadata +111 -113
  112. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/mjit.h +0 -29
  113. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ractor_pub.h +0 -50
  114. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/revision.h +0 -2
  115. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ruby_atomic.h +0 -236
@@ -37,7 +37,7 @@
37
37
  */
38
38
 
39
39
  switch (insn) {
40
- case BIN(nop):
40
+ case BIN(nop): {
41
41
  fprintf(f, "{\n");
42
42
  {
43
43
  if (status->local_stack_p) {
@@ -45,7 +45,7 @@ switch (insn) {
45
45
  }
46
46
 
47
47
  MAYBE_UNUSED(bool pc_moved_p) = false;
48
- if (body->catch_except_p || FALSE) {
48
+ if (false) {
49
49
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
50
50
  pc_moved_p = true;
51
51
  }
@@ -61,7 +61,8 @@ switch (insn) {
61
61
  }
62
62
  fprintf(f, "}\n");
63
63
  break;
64
- case BIN(getlocal):
64
+ }
65
+ case BIN(getlocal): {
65
66
  fprintf(f, "{\n");
66
67
  {
67
68
  MAYBE_UNUSED(lindex_t idx) = (lindex_t)operands[0];
@@ -78,7 +79,7 @@ switch (insn) {
78
79
  fprintf(f, " level = (rb_num_t)0x%"PRIxVALUE";", operands[1]);
79
80
  fprintf(f, "\n");
80
81
  MAYBE_UNUSED(bool pc_moved_p) = false;
81
- if (body->catch_except_p || FALSE) {
82
+ if (false) {
82
83
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
83
84
  pc_moved_p = true;
84
85
  }
@@ -97,7 +98,8 @@ switch (insn) {
97
98
  }
98
99
  fprintf(f, "}\n");
99
100
  break;
100
- case BIN(setlocal):
101
+ }
102
+ case BIN(setlocal): {
101
103
  fprintf(f, "{\n");
102
104
  {
103
105
  MAYBE_UNUSED(lindex_t idx) = (lindex_t)operands[0];
@@ -115,7 +117,7 @@ switch (insn) {
115
117
  fprintf(f, "\n");
116
118
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
117
119
  MAYBE_UNUSED(bool pc_moved_p) = false;
118
- if (body->catch_except_p || FALSE) {
120
+ if (false) {
119
121
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
120
122
  pc_moved_p = true;
121
123
  }
@@ -133,7 +135,8 @@ switch (insn) {
133
135
  }
134
136
  fprintf(f, "}\n");
135
137
  break;
136
- case BIN(getblockparam):
138
+ }
139
+ case BIN(getblockparam): {
137
140
  fprintf(f, "{\n");
138
141
  {
139
142
  MAYBE_UNUSED(lindex_t idx) = (lindex_t)operands[0];
@@ -150,7 +153,7 @@ switch (insn) {
150
153
  fprintf(f, " level = (rb_num_t)0x%"PRIxVALUE";", operands[1]);
151
154
  fprintf(f, "\n");
152
155
  MAYBE_UNUSED(bool pc_moved_p) = false;
153
- if (body->catch_except_p || FALSE) {
156
+ if (false) {
154
157
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
155
158
  pc_moved_p = true;
156
159
  }
@@ -179,7 +182,8 @@ switch (insn) {
179
182
  }
180
183
  fprintf(f, "}\n");
181
184
  break;
182
- case BIN(setblockparam):
185
+ }
186
+ case BIN(setblockparam): {
183
187
  fprintf(f, "{\n");
184
188
  {
185
189
  MAYBE_UNUSED(lindex_t idx) = (lindex_t)operands[0];
@@ -197,7 +201,7 @@ switch (insn) {
197
201
  fprintf(f, "\n");
198
202
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
199
203
  MAYBE_UNUSED(bool pc_moved_p) = false;
200
- if (body->catch_except_p || FALSE) {
204
+ if (false) {
201
205
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
202
206
  pc_moved_p = true;
203
207
  }
@@ -220,7 +224,8 @@ switch (insn) {
220
224
  }
221
225
  fprintf(f, "}\n");
222
226
  break;
223
- case BIN(getblockparamproxy):
227
+ }
228
+ case BIN(getblockparamproxy): {
224
229
  fprintf(f, "{\n");
225
230
  {
226
231
  MAYBE_UNUSED(lindex_t idx) = (lindex_t)operands[0];
@@ -237,7 +242,7 @@ switch (insn) {
237
242
  fprintf(f, " level = (rb_num_t)0x%"PRIxVALUE";", operands[1]);
238
243
  fprintf(f, "\n");
239
244
  MAYBE_UNUSED(bool pc_moved_p) = false;
240
- if (body->catch_except_p || FALSE) {
245
+ if (false) {
241
246
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
242
247
  pc_moved_p = true;
243
248
  }
@@ -287,7 +292,8 @@ switch (insn) {
287
292
  }
288
293
  fprintf(f, "}\n");
289
294
  break;
290
- case BIN(getspecial):
295
+ }
296
+ case BIN(getspecial): {
291
297
  fprintf(f, "{\n");
292
298
  {
293
299
  MAYBE_UNUSED(rb_num_t key) = (rb_num_t)operands[0];
@@ -303,7 +309,7 @@ switch (insn) {
303
309
  fprintf(f, " type = (rb_num_t)0x%"PRIxVALUE";", operands[1]);
304
310
  fprintf(f, "\n");
305
311
  MAYBE_UNUSED(bool pc_moved_p) = false;
306
- if (body->catch_except_p || TRUE) {
312
+ if (true) {
307
313
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
308
314
  pc_moved_p = true;
309
315
  }
@@ -328,7 +334,8 @@ switch (insn) {
328
334
  }
329
335
  fprintf(f, "}\n");
330
336
  break;
331
- case BIN(setspecial):
337
+ }
338
+ case BIN(setspecial): {
332
339
  fprintf(f, "{\n");
333
340
  {
334
341
  MAYBE_UNUSED(rb_num_t key) = (rb_num_t)operands[0];
@@ -342,7 +349,7 @@ switch (insn) {
342
349
  fprintf(f, "\n");
343
350
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
344
351
  MAYBE_UNUSED(bool pc_moved_p) = false;
345
- if (body->catch_except_p || FALSE) {
352
+ if (false) {
346
353
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
347
354
  pc_moved_p = true;
348
355
  }
@@ -358,29 +365,30 @@ switch (insn) {
358
365
  }
359
366
  fprintf(f, "}\n");
360
367
  break;
361
- case BIN(getinstancevariable):
368
+ }
369
+ case BIN(getinstancevariable): {
362
370
  #if OPT_IC_FOR_IVAR
363
371
  {
364
372
  MAYBE_UNUSED(ID id) = (ID)operands[0];
365
373
  MAYBE_UNUSED(IVC ic) = (IVC)operands[1];
366
374
  IVC ic_copy = &(status->is_entries + ((union iseq_inline_storage_entry *)ic - body->is_entries))->iv_cache;
367
- if (!status->compile_info->disable_ivar_cache && ic_copy->ic_serial) { // Only initialized (ic_serial > 0) IVCs are optimized
375
+ if (!status->compile_info->disable_ivar_cache && ic_copy->entry) { // Only ic_copy is enabled.
368
376
  fprintf(f, "{\n");
369
377
  fprintf(f, " VALUE obj = GET_SELF();\n");
370
- fprintf(f, " const st_index_t index = %"PRIuSIZE";\n", ic_copy->index);
378
+ fprintf(f, " const uint32_t index = %u;\n", (ic_copy->entry->index));
371
379
  if (status->merge_ivar_guards_p) {
372
380
  fprintf(f, " VM_ASSERT(RB_TYPE_P(obj, T_OBJECT));\n");
373
- fprintf(f, " VM_ASSERT((rb_serial_t)%"PRI_SERIALT_PREFIX"u == RCLASS_SERIAL(RBASIC(obj)->klass));\n", ic_copy->ic_serial);
381
+ fprintf(f, " VM_ASSERT((rb_serial_t)%"PRI_SERIALT_PREFIX"u == RCLASS_SERIAL(RBASIC(obj)->klass));\n", ic_copy->entry->class_serial);
374
382
  fprintf(f, " VM_ASSERT(index < ROBJECT_NUMIV(obj));\n");
375
383
  fprintf(f, " VALUE val;\n");
376
- fprintf(f, " if (LIKELY(%sRB_FL_ANY_RAW(obj, ROBJECT_EMBED) && (val = ROBJECT(obj)->as.%s) != Qundef)) {\n",
377
- status->max_ivar_index >= ROBJECT_EMBED_LEN_MAX ? "!" : "",
384
+ fprintf(f, " if (LIKELY(%s && (val = ROBJECT(obj)->as.%s) != Qundef)) {\n",
385
+ status->max_ivar_index >= ROBJECT_EMBED_LEN_MAX ? "true" : "RB_FL_ANY_RAW(obj, ROBJECT_EMBED)",
378
386
  status->max_ivar_index >= ROBJECT_EMBED_LEN_MAX ? "heap.ivptr[index]" : "ary[index]");
379
387
  fprintf(f, " stack[%d] = val;\n", b->stack_size);
380
388
  fprintf(f, " }\n");
381
389
  }
382
390
  else {
383
- fprintf(f, " const rb_serial_t ic_serial = (rb_serial_t)%"PRI_SERIALT_PREFIX"u;\n", ic_copy->ic_serial);
391
+ fprintf(f, " const rb_serial_t ic_serial = (rb_serial_t)%"PRI_SERIALT_PREFIX"u;\n", ic_copy->entry->class_serial);
384
392
  fprintf(f, " VALUE val;\n");
385
393
  fprintf(f, " if (LIKELY(RB_TYPE_P(obj, T_OBJECT) && ic_serial == RCLASS_SERIAL(RBASIC(obj)->klass) && index < ROBJECT_NUMIV(obj) && (val = ROBJECT_IVPTR(obj)[index]) != Qundef)) {\n");
386
394
  fprintf(f, " stack[%d] = val;\n", b->stack_size);
@@ -396,14 +404,14 @@ switch (insn) {
396
404
  fprintf(f, "}\n");
397
405
  break;
398
406
  }
399
- else if (!status->compile_info->disable_exivar_cache && ic_copy->ic_serial) {
407
+ else if (!status->compile_info->disable_exivar_cache && ic_copy->entry) {
400
408
  fprintf(f, "{\n");
401
409
  fprintf(f, " VALUE obj = GET_SELF();\n");
402
- fprintf(f, " const rb_serial_t ic_serial = (rb_serial_t)%"PRI_SERIALT_PREFIX"u;\n", ic_copy->ic_serial);
403
- fprintf(f, " const st_index_t index = %"PRIuSIZE";\n", ic_copy->index);
410
+ fprintf(f, " const rb_serial_t ic_serial = (rb_serial_t)%"PRI_SERIALT_PREFIX"u;\n", ic_copy->entry->class_serial);
411
+ fprintf(f, " const uint32_t index = %u;\n", ic_copy->entry->index);
404
412
  fprintf(f, " struct gen_ivtbl *ivtbl;\n");
405
413
  fprintf(f, " VALUE val;\n");
406
- fprintf(f, " if (LIKELY(FL_TEST_RAW(obj, FL_EXIVAR) && ic_serial == RCLASS_SERIAL(RBASIC(obj)->klass) && st_lookup(rb_ivar_generic_ivtbl(obj), (st_data_t)obj, (st_data_t *)&ivtbl) && index < ivtbl->numiv && (val = ivtbl->ivptr[index]) != Qundef)) {\n");
414
+ fprintf(f, " if (LIKELY(FL_TEST_RAW(obj, FL_EXIVAR) && ic_serial == RCLASS_SERIAL(RBASIC(obj)->klass) && rb_ivar_generic_ivtbl_lookup(obj, &ivtbl) && index < ivtbl->numiv && (val = ivtbl->ivptr[index]) != Qundef)) {\n");
407
415
  fprintf(f, " stack[%d] = val;\n", b->stack_size);
408
416
  fprintf(f, " }\n");
409
417
  fprintf(f, " else {\n");
@@ -435,7 +443,7 @@ switch (insn) {
435
443
  fprintf(f, " ic = (IVC)0x%"PRIxVALUE";", operands[1]);
436
444
  fprintf(f, "\n");
437
445
  MAYBE_UNUSED(bool pc_moved_p) = false;
438
- if (body->catch_except_p || TRUE) {
446
+ if (true) {
439
447
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
440
448
  pc_moved_p = true;
441
449
  }
@@ -445,7 +453,7 @@ switch (insn) {
445
453
  fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
446
454
  }
447
455
  fprintf(f, " {\n");
448
- fprintf(f, " val = vm_getinstancevariable(GET_SELF(), id, ic);\n");
456
+ fprintf(f, " val = vm_getinstancevariable(GET_ISEQ(), GET_SELF(), id, ic);\n");
449
457
  fprintf(f, " }\n");
450
458
  fprintf(f, " stack[%d] = val;\n", b->stack_size + (int)attr_sp_inc_getinstancevariable(id, ic) - 1);
451
459
  fprintf(f, " if (UNLIKELY(!mjit_call_p)) {\n");
@@ -460,28 +468,29 @@ switch (insn) {
460
468
  }
461
469
  fprintf(f, "}\n");
462
470
  break;
463
- case BIN(setinstancevariable):
471
+ }
472
+ case BIN(setinstancevariable): {
464
473
  #if OPT_IC_FOR_IVAR
465
474
  {
466
475
  MAYBE_UNUSED(ID id) = (ID)operands[0];
467
476
  MAYBE_UNUSED(IVC ic) = (IVC)operands[1];
468
477
  IVC ic_copy = &(status->is_entries + ((union iseq_inline_storage_entry *)ic - body->is_entries))->iv_cache;
469
- if (!status->compile_info->disable_ivar_cache && ic_copy->ic_serial) { // Only initialized (ic_serial > 0) IVCs are optimized
478
+ if (!status->compile_info->disable_ivar_cache && ic_copy->entry) { // Only ic_copy is enabled.
470
479
  fprintf(f, "{\n");
471
480
  fprintf(f, " VALUE obj = GET_SELF();\n");
472
- fprintf(f, " const st_index_t index = %"PRIuSIZE";\n", ic_copy->index);
481
+ fprintf(f, " const uint32_t index = %u;\n", (ic_copy->entry->index));
473
482
  if (status->merge_ivar_guards_p) {
474
483
  fprintf(f, " VM_ASSERT(RB_TYPE_P(obj, T_OBJECT));\n");
475
- fprintf(f, " VM_ASSERT((rb_serial_t)%"PRI_SERIALT_PREFIX"u == RCLASS_SERIAL(RBASIC(obj)->klass));\n", ic_copy->ic_serial);
484
+ fprintf(f, " VM_ASSERT((rb_serial_t)%"PRI_SERIALT_PREFIX"u == RCLASS_SERIAL(RBASIC(obj)->klass));\n", ic_copy->entry->class_serial);
476
485
  fprintf(f, " VM_ASSERT(index < ROBJECT_NUMIV(obj));\n");
477
- fprintf(f, " if (LIKELY(!RB_OBJ_FROZEN(obj) && %sRB_FL_ANY_RAW(obj, ROBJECT_EMBED))) {\n", status->max_ivar_index >= ROBJECT_EMBED_LEN_MAX ? "!" : "");
486
+ fprintf(f, " if (LIKELY(!RB_OBJ_FROZEN_RAW(obj) && %s)) {\n", status->max_ivar_index >= ROBJECT_EMBED_LEN_MAX ? "true" : "RB_FL_ANY_RAW(obj, ROBJECT_EMBED)");
478
487
  fprintf(f, " RB_OBJ_WRITE(obj, &ROBJECT(obj)->as.%s, stack[%d]);\n",
479
488
  status->max_ivar_index >= ROBJECT_EMBED_LEN_MAX ? "heap.ivptr[index]" : "ary[index]", b->stack_size - 1);
480
489
  fprintf(f, " }\n");
481
490
  }
482
491
  else {
483
- fprintf(f, " const rb_serial_t ic_serial = (rb_serial_t)%"PRI_SERIALT_PREFIX"u;\n", ic_copy->ic_serial);
484
- fprintf(f, " if (LIKELY(RB_TYPE_P(obj, T_OBJECT) && ic_serial == RCLASS_SERIAL(RBASIC(obj)->klass) && index < ROBJECT_NUMIV(obj) && !RB_OBJ_FROZEN(obj))) {\n");
492
+ fprintf(f, " const rb_serial_t ic_serial = (rb_serial_t)%"PRI_SERIALT_PREFIX"u;\n", ic_copy->entry->class_serial);
493
+ fprintf(f, " if (LIKELY(RB_TYPE_P(obj, T_OBJECT) && ic_serial == RCLASS_SERIAL(RBASIC(obj)->klass) && index < ROBJECT_NUMIV(obj) && !RB_OBJ_FROZEN_RAW(obj))) {\n");
485
494
  fprintf(f, " VALUE *ptr = ROBJECT_IVPTR(obj);\n");
486
495
  fprintf(f, " RB_OBJ_WRITE(obj, &ptr[index], stack[%d]);\n", b->stack_size - 1);
487
496
  fprintf(f, " }\n");
@@ -516,7 +525,7 @@ switch (insn) {
516
525
  fprintf(f, "\n");
517
526
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
518
527
  MAYBE_UNUSED(bool pc_moved_p) = false;
519
- if (body->catch_except_p || TRUE) {
528
+ if (true) {
520
529
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
521
530
  pc_moved_p = true;
522
531
  }
@@ -526,7 +535,7 @@ switch (insn) {
526
535
  fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
527
536
  }
528
537
  fprintf(f, " {\n");
529
- fprintf(f, " vm_setinstancevariable(GET_SELF(), id, val, ic);\n");
538
+ fprintf(f, " vm_setinstancevariable(GET_ISEQ(), GET_SELF(), id, val, ic);\n");
530
539
  fprintf(f, " }\n");
531
540
  fprintf(f, " if (UNLIKELY(!mjit_call_p)) {\n");
532
541
  fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size + (int)attr_sp_inc_setinstancevariable(id, ic));
@@ -540,7 +549,8 @@ switch (insn) {
540
549
  }
541
550
  fprintf(f, "}\n");
542
551
  break;
543
- case BIN(getclassvariable):
552
+ }
553
+ case BIN(getclassvariable): {
544
554
  fprintf(f, "{\n");
545
555
  {
546
556
  MAYBE_UNUSED(ID id) = (ID)operands[0];
@@ -554,7 +564,7 @@ switch (insn) {
554
564
  comment_id(f, (ID)operands[0]);
555
565
  fprintf(f, "\n");
556
566
  MAYBE_UNUSED(bool pc_moved_p) = false;
557
- if (body->catch_except_p || TRUE) {
567
+ if (true) {
558
568
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
559
569
  pc_moved_p = true;
560
570
  }
@@ -579,7 +589,8 @@ switch (insn) {
579
589
  }
580
590
  fprintf(f, "}\n");
581
591
  break;
582
- case BIN(setclassvariable):
592
+ }
593
+ case BIN(setclassvariable): {
583
594
  fprintf(f, "{\n");
584
595
  {
585
596
  MAYBE_UNUSED(ID id) = (ID)operands[0];
@@ -594,7 +605,7 @@ switch (insn) {
594
605
  fprintf(f, "\n");
595
606
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
596
607
  MAYBE_UNUSED(bool pc_moved_p) = false;
597
- if (body->catch_except_p || TRUE) {
608
+ if (true) {
598
609
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
599
610
  pc_moved_p = true;
600
611
  }
@@ -619,7 +630,8 @@ switch (insn) {
619
630
  }
620
631
  fprintf(f, "}\n");
621
632
  break;
622
- case BIN(getconstant):
633
+ }
634
+ case BIN(getconstant): {
623
635
  fprintf(f, "{\n");
624
636
  {
625
637
  MAYBE_UNUSED(ID id) = (ID)operands[0];
@@ -635,7 +647,7 @@ switch (insn) {
635
647
  fprintf(f, " klass = stack[%d];\n", b->stack_size - 2);
636
648
  fprintf(f, " allow_nil = stack[%d];\n", b->stack_size - 1);
637
649
  MAYBE_UNUSED(bool pc_moved_p) = false;
638
- if (body->catch_except_p || TRUE) {
650
+ if (true) {
639
651
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
640
652
  pc_moved_p = true;
641
653
  }
@@ -660,7 +672,8 @@ switch (insn) {
660
672
  }
661
673
  fprintf(f, "}\n");
662
674
  break;
663
- case BIN(setconstant):
675
+ }
676
+ case BIN(setconstant): {
664
677
  fprintf(f, "{\n");
665
678
  {
666
679
  MAYBE_UNUSED(ID id) = (ID)operands[0];
@@ -676,7 +689,7 @@ switch (insn) {
676
689
  fprintf(f, " val = stack[%d];\n", b->stack_size - 2);
677
690
  fprintf(f, " cbase = stack[%d];\n", b->stack_size - 1);
678
691
  MAYBE_UNUSED(bool pc_moved_p) = false;
679
- if (body->catch_except_p || TRUE) {
692
+ if (true) {
680
693
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
681
694
  pc_moved_p = true;
682
695
  }
@@ -702,7 +715,8 @@ switch (insn) {
702
715
  }
703
716
  fprintf(f, "}\n");
704
717
  break;
705
- case BIN(getglobal):
718
+ }
719
+ case BIN(getglobal): {
706
720
  fprintf(f, "{\n");
707
721
  {
708
722
  MAYBE_UNUSED(ID gid) = (ID)operands[0];
@@ -716,7 +730,7 @@ switch (insn) {
716
730
  comment_id(f, (ID)operands[0]);
717
731
  fprintf(f, "\n");
718
732
  MAYBE_UNUSED(bool pc_moved_p) = false;
719
- if (body->catch_except_p || TRUE) {
733
+ if (true) {
720
734
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
721
735
  pc_moved_p = true;
722
736
  }
@@ -741,7 +755,8 @@ switch (insn) {
741
755
  }
742
756
  fprintf(f, "}\n");
743
757
  break;
744
- case BIN(setglobal):
758
+ }
759
+ case BIN(setglobal): {
745
760
  fprintf(f, "{\n");
746
761
  {
747
762
  MAYBE_UNUSED(ID gid) = (ID)operands[0];
@@ -756,7 +771,7 @@ switch (insn) {
756
771
  fprintf(f, "\n");
757
772
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
758
773
  MAYBE_UNUSED(bool pc_moved_p) = false;
759
- if (body->catch_except_p || TRUE) {
774
+ if (true) {
760
775
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
761
776
  pc_moved_p = true;
762
777
  }
@@ -780,7 +795,8 @@ switch (insn) {
780
795
  }
781
796
  fprintf(f, "}\n");
782
797
  break;
783
- case BIN(putnil):
798
+ }
799
+ case BIN(putnil): {
784
800
  fprintf(f, "{\n");
785
801
  {
786
802
  if (status->local_stack_p) {
@@ -789,7 +805,7 @@ switch (insn) {
789
805
  fprintf(f, " MAYBE_UNUSED(VALUE) val;\n");
790
806
 
791
807
  MAYBE_UNUSED(bool pc_moved_p) = false;
792
- if (body->catch_except_p || FALSE) {
808
+ if (false) {
793
809
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
794
810
  pc_moved_p = true;
795
811
  }
@@ -806,7 +822,8 @@ switch (insn) {
806
822
  }
807
823
  fprintf(f, "}\n");
808
824
  break;
809
- case BIN(putself):
825
+ }
826
+ case BIN(putself): {
810
827
  fprintf(f, "{\n");
811
828
  {
812
829
  if (status->local_stack_p) {
@@ -815,7 +832,7 @@ switch (insn) {
815
832
  fprintf(f, " MAYBE_UNUSED(VALUE) val;\n");
816
833
 
817
834
  MAYBE_UNUSED(bool pc_moved_p) = false;
818
- if (body->catch_except_p || FALSE) {
835
+ if (false) {
819
836
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
820
837
  pc_moved_p = true;
821
838
  }
@@ -832,7 +849,8 @@ switch (insn) {
832
849
  }
833
850
  fprintf(f, "}\n");
834
851
  break;
835
- case BIN(putobject):
852
+ }
853
+ case BIN(putobject): {
836
854
  fprintf(f, "{\n");
837
855
  {
838
856
  MAYBE_UNUSED(VALUE val) = (VALUE)operands[0];
@@ -845,7 +863,7 @@ switch (insn) {
845
863
  if (SYMBOL_P((VALUE)operands[0])) comment_id(f, SYM2ID((VALUE)operands[0]));
846
864
  fprintf(f, "\n");
847
865
  MAYBE_UNUSED(bool pc_moved_p) = false;
848
- if (body->catch_except_p || FALSE) {
866
+ if (false) {
849
867
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
850
868
  pc_moved_p = true;
851
869
  }
@@ -862,7 +880,8 @@ switch (insn) {
862
880
  }
863
881
  fprintf(f, "}\n");
864
882
  break;
865
- case BIN(putspecialobject):
883
+ }
884
+ case BIN(putspecialobject): {
866
885
  fprintf(f, "{\n");
867
886
  {
868
887
  MAYBE_UNUSED(rb_num_t value_type) = (rb_num_t)operands[0];
@@ -875,7 +894,7 @@ switch (insn) {
875
894
  fprintf(f, " value_type = (rb_num_t)0x%"PRIxVALUE";", operands[0]);
876
895
  fprintf(f, "\n");
877
896
  MAYBE_UNUSED(bool pc_moved_p) = false;
878
- if (body->catch_except_p || FALSE) {
897
+ if (false) {
879
898
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
880
899
  pc_moved_p = true;
881
900
  }
@@ -895,7 +914,8 @@ switch (insn) {
895
914
  }
896
915
  fprintf(f, "}\n");
897
916
  break;
898
- case BIN(putstring):
917
+ }
918
+ case BIN(putstring): {
899
919
  fprintf(f, "{\n");
900
920
  {
901
921
  MAYBE_UNUSED(VALUE str) = (VALUE)operands[0];
@@ -908,7 +928,7 @@ switch (insn) {
908
928
  if (SYMBOL_P((VALUE)operands[0])) comment_id(f, SYM2ID((VALUE)operands[0]));
909
929
  fprintf(f, "\n");
910
930
  MAYBE_UNUSED(bool pc_moved_p) = false;
911
- if (body->catch_except_p || FALSE) {
931
+ if (false) {
912
932
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
913
933
  pc_moved_p = true;
914
934
  }
@@ -918,14 +938,15 @@ switch (insn) {
918
938
  fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
919
939
  }
920
940
  fprintf(f, " {\n");
921
- fprintf(f, " val = rb_str_resurrect(str);\n");
941
+ fprintf(f, " val = rb_ec_str_resurrect(ec, str);\n");
922
942
  fprintf(f, " }\n");
923
943
  fprintf(f, " stack[%d] = val;\n", b->stack_size + (int)attr_sp_inc_putstring(str) - 1);
924
944
  b->stack_size += attr_sp_inc_putstring(str);
925
945
  }
926
946
  fprintf(f, "}\n");
927
947
  break;
928
- case BIN(concatstrings):
948
+ }
949
+ case BIN(concatstrings): {
929
950
  fprintf(f, "{\n");
930
951
  {
931
952
  MAYBE_UNUSED(rb_num_t num) = (rb_num_t)operands[0];
@@ -938,7 +959,7 @@ switch (insn) {
938
959
  fprintf(f, " num = (rb_num_t)0x%"PRIxVALUE";", operands[0]);
939
960
  fprintf(f, "\n");
940
961
  MAYBE_UNUSED(bool pc_moved_p) = false;
941
- if (body->catch_except_p || TRUE) {
962
+ if (true) {
942
963
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
943
964
  pc_moved_p = true;
944
965
  }
@@ -964,7 +985,8 @@ switch (insn) {
964
985
  }
965
986
  fprintf(f, "}\n");
966
987
  break;
967
- case BIN(tostring):
988
+ }
989
+ case BIN(tostring): {
968
990
  fprintf(f, "{\n");
969
991
  {
970
992
  if (status->local_stack_p) {
@@ -975,7 +997,7 @@ switch (insn) {
975
997
  fprintf(f, " val = stack[%d];\n", b->stack_size - 2);
976
998
  fprintf(f, " str = stack[%d];\n", b->stack_size - 1);
977
999
  MAYBE_UNUSED(bool pc_moved_p) = false;
978
- if (body->catch_except_p || FALSE) {
1000
+ if (false) {
979
1001
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
980
1002
  pc_moved_p = true;
981
1003
  }
@@ -992,7 +1014,8 @@ switch (insn) {
992
1014
  }
993
1015
  fprintf(f, "}\n");
994
1016
  break;
995
- case BIN(toregexp):
1017
+ }
1018
+ case BIN(toregexp): {
996
1019
  fprintf(f, "{\n");
997
1020
  {
998
1021
  MAYBE_UNUSED(rb_num_t opt) = (rb_num_t)operands[0];
@@ -1008,7 +1031,7 @@ switch (insn) {
1008
1031
  fprintf(f, " cnt = (rb_num_t)0x%"PRIxVALUE";", operands[1]);
1009
1032
  fprintf(f, "\n");
1010
1033
  MAYBE_UNUSED(bool pc_moved_p) = false;
1011
- if (body->catch_except_p || TRUE) {
1034
+ if (true) {
1012
1035
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1013
1036
  pc_moved_p = true;
1014
1037
  }
@@ -1036,7 +1059,8 @@ switch (insn) {
1036
1059
  }
1037
1060
  fprintf(f, "}\n");
1038
1061
  break;
1039
- case BIN(intern):
1062
+ }
1063
+ case BIN(intern): {
1040
1064
  fprintf(f, "{\n");
1041
1065
  {
1042
1066
  if (status->local_stack_p) {
@@ -1046,7 +1070,7 @@ switch (insn) {
1046
1070
 
1047
1071
  fprintf(f, " str = stack[%d];\n", b->stack_size - 1);
1048
1072
  MAYBE_UNUSED(bool pc_moved_p) = false;
1049
- if (body->catch_except_p || FALSE) {
1073
+ if (false) {
1050
1074
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1051
1075
  pc_moved_p = true;
1052
1076
  }
@@ -1063,7 +1087,8 @@ switch (insn) {
1063
1087
  }
1064
1088
  fprintf(f, "}\n");
1065
1089
  break;
1066
- case BIN(newarray):
1090
+ }
1091
+ case BIN(newarray): {
1067
1092
  fprintf(f, "{\n");
1068
1093
  {
1069
1094
  MAYBE_UNUSED(rb_num_t num) = (rb_num_t)operands[0];
@@ -1076,7 +1101,7 @@ switch (insn) {
1076
1101
  fprintf(f, " num = (rb_num_t)0x%"PRIxVALUE";", operands[0]);
1077
1102
  fprintf(f, "\n");
1078
1103
  MAYBE_UNUSED(bool pc_moved_p) = false;
1079
- if (body->catch_except_p || FALSE) {
1104
+ if (false) {
1080
1105
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1081
1106
  pc_moved_p = true;
1082
1107
  }
@@ -1086,7 +1111,7 @@ switch (insn) {
1086
1111
  fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
1087
1112
  }
1088
1113
  fprintf(f, " {\n");
1089
- fprintf(f, " val = rb_ary_new4(num, %s);\n",
1114
+ fprintf(f, " val = rb_ec_ary_new_from_values(ec, num, %s);\n",
1090
1115
  (status->local_stack_p ? "(stack + (stack_size - (num)))" : "STACK_ADDR_FROM_TOP(num)"));
1091
1116
  fprintf(f, " }\n");
1092
1117
  fprintf(f, " stack[%d] = val;\n", b->stack_size + (int)attr_sp_inc_newarray(num) - 1);
@@ -1094,7 +1119,8 @@ switch (insn) {
1094
1119
  }
1095
1120
  fprintf(f, "}\n");
1096
1121
  break;
1097
- case BIN(newarraykwsplat):
1122
+ }
1123
+ case BIN(newarraykwsplat): {
1098
1124
  fprintf(f, "{\n");
1099
1125
  {
1100
1126
  MAYBE_UNUSED(rb_num_t num) = (rb_num_t)operands[0];
@@ -1107,7 +1133,7 @@ switch (insn) {
1107
1133
  fprintf(f, " num = (rb_num_t)0x%"PRIxVALUE";", operands[0]);
1108
1134
  fprintf(f, "\n");
1109
1135
  MAYBE_UNUSED(bool pc_moved_p) = false;
1110
- if (body->catch_except_p || FALSE) {
1136
+ if (false) {
1111
1137
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1112
1138
  pc_moved_p = true;
1113
1139
  }
@@ -1132,7 +1158,8 @@ switch (insn) {
1132
1158
  }
1133
1159
  fprintf(f, "}\n");
1134
1160
  break;
1135
- case BIN(duparray):
1161
+ }
1162
+ case BIN(duparray): {
1136
1163
  fprintf(f, "{\n");
1137
1164
  {
1138
1165
  MAYBE_UNUSED(VALUE ary) = (VALUE)operands[0];
@@ -1145,7 +1172,7 @@ switch (insn) {
1145
1172
  if (SYMBOL_P((VALUE)operands[0])) comment_id(f, SYM2ID((VALUE)operands[0]));
1146
1173
  fprintf(f, "\n");
1147
1174
  MAYBE_UNUSED(bool pc_moved_p) = false;
1148
- if (body->catch_except_p || FALSE) {
1175
+ if (false) {
1149
1176
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1150
1177
  pc_moved_p = true;
1151
1178
  }
@@ -1163,7 +1190,8 @@ switch (insn) {
1163
1190
  }
1164
1191
  fprintf(f, "}\n");
1165
1192
  break;
1166
- case BIN(duphash):
1193
+ }
1194
+ case BIN(duphash): {
1167
1195
  fprintf(f, "{\n");
1168
1196
  {
1169
1197
  MAYBE_UNUSED(VALUE hash) = (VALUE)operands[0];
@@ -1176,7 +1204,7 @@ switch (insn) {
1176
1204
  if (SYMBOL_P((VALUE)operands[0])) comment_id(f, SYM2ID((VALUE)operands[0]));
1177
1205
  fprintf(f, "\n");
1178
1206
  MAYBE_UNUSED(bool pc_moved_p) = false;
1179
- if (body->catch_except_p || FALSE) {
1207
+ if (false) {
1180
1208
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1181
1209
  pc_moved_p = true;
1182
1210
  }
@@ -1194,7 +1222,8 @@ switch (insn) {
1194
1222
  }
1195
1223
  fprintf(f, "}\n");
1196
1224
  break;
1197
- case BIN(expandarray):
1225
+ }
1226
+ case BIN(expandarray): {
1198
1227
  fprintf(f, "{\n");
1199
1228
  {
1200
1229
  MAYBE_UNUSED(rb_num_t num) = (rb_num_t)operands[0];
@@ -1211,7 +1240,7 @@ switch (insn) {
1211
1240
  fprintf(f, "\n");
1212
1241
  fprintf(f, " ary = stack[%d];\n", b->stack_size - 1);
1213
1242
  MAYBE_UNUSED(bool pc_moved_p) = false;
1214
- if (body->catch_except_p || TRUE) {
1243
+ if (true) {
1215
1244
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1216
1245
  pc_moved_p = true;
1217
1246
  }
@@ -1235,7 +1264,8 @@ switch (insn) {
1235
1264
  }
1236
1265
  fprintf(f, "}\n");
1237
1266
  break;
1238
- case BIN(concatarray):
1267
+ }
1268
+ case BIN(concatarray): {
1239
1269
  fprintf(f, "{\n");
1240
1270
  {
1241
1271
  if (status->local_stack_p) {
@@ -1246,7 +1276,7 @@ switch (insn) {
1246
1276
  fprintf(f, " ary1 = stack[%d];\n", b->stack_size - 2);
1247
1277
  fprintf(f, " ary2 = stack[%d];\n", b->stack_size - 1);
1248
1278
  MAYBE_UNUSED(bool pc_moved_p) = false;
1249
- if (body->catch_except_p || TRUE) {
1279
+ if (true) {
1250
1280
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1251
1281
  pc_moved_p = true;
1252
1282
  }
@@ -1271,7 +1301,8 @@ switch (insn) {
1271
1301
  }
1272
1302
  fprintf(f, "}\n");
1273
1303
  break;
1274
- case BIN(splatarray):
1304
+ }
1305
+ case BIN(splatarray): {
1275
1306
  fprintf(f, "{\n");
1276
1307
  {
1277
1308
  MAYBE_UNUSED(VALUE flag) = (VALUE)operands[0];
@@ -1285,7 +1316,7 @@ switch (insn) {
1285
1316
  fprintf(f, "\n");
1286
1317
  fprintf(f, " ary = stack[%d];\n", b->stack_size - 1);
1287
1318
  MAYBE_UNUSED(bool pc_moved_p) = false;
1288
- if (body->catch_except_p || TRUE) {
1319
+ if (true) {
1289
1320
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1290
1321
  pc_moved_p = true;
1291
1322
  }
@@ -1310,7 +1341,8 @@ switch (insn) {
1310
1341
  }
1311
1342
  fprintf(f, "}\n");
1312
1343
  break;
1313
- case BIN(newhash):
1344
+ }
1345
+ case BIN(newhash): {
1314
1346
  fprintf(f, "{\n");
1315
1347
  {
1316
1348
  MAYBE_UNUSED(rb_num_t num) = (rb_num_t)operands[0];
@@ -1323,7 +1355,7 @@ switch (insn) {
1323
1355
  fprintf(f, " num = (rb_num_t)0x%"PRIxVALUE";", operands[0]);
1324
1356
  fprintf(f, "\n");
1325
1357
  MAYBE_UNUSED(bool pc_moved_p) = false;
1326
- if (body->catch_except_p || TRUE) {
1358
+ if (true) {
1327
1359
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1328
1360
  pc_moved_p = true;
1329
1361
  }
@@ -1355,7 +1387,8 @@ switch (insn) {
1355
1387
  }
1356
1388
  fprintf(f, "}\n");
1357
1389
  break;
1358
- case BIN(newrange):
1390
+ }
1391
+ case BIN(newrange): {
1359
1392
  fprintf(f, "{\n");
1360
1393
  {
1361
1394
  MAYBE_UNUSED(rb_num_t flag) = (rb_num_t)operands[0];
@@ -1370,7 +1403,7 @@ switch (insn) {
1370
1403
  fprintf(f, " low = stack[%d];\n", b->stack_size - 2);
1371
1404
  fprintf(f, " high = stack[%d];\n", b->stack_size - 1);
1372
1405
  MAYBE_UNUSED(bool pc_moved_p) = false;
1373
- if (body->catch_except_p || TRUE) {
1406
+ if (true) {
1374
1407
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1375
1408
  pc_moved_p = true;
1376
1409
  }
@@ -1395,7 +1428,8 @@ switch (insn) {
1395
1428
  }
1396
1429
  fprintf(f, "}\n");
1397
1430
  break;
1398
- case BIN(pop):
1431
+ }
1432
+ case BIN(pop): {
1399
1433
  fprintf(f, "{\n");
1400
1434
  {
1401
1435
  if (status->local_stack_p) {
@@ -1405,7 +1439,7 @@ switch (insn) {
1405
1439
 
1406
1440
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
1407
1441
  MAYBE_UNUSED(bool pc_moved_p) = false;
1408
- if (body->catch_except_p || FALSE) {
1442
+ if (false) {
1409
1443
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1410
1444
  pc_moved_p = true;
1411
1445
  }
@@ -1422,7 +1456,8 @@ switch (insn) {
1422
1456
  }
1423
1457
  fprintf(f, "}\n");
1424
1458
  break;
1425
- case BIN(dup):
1459
+ }
1460
+ case BIN(dup): {
1426
1461
  fprintf(f, "{\n");
1427
1462
  {
1428
1463
  if (status->local_stack_p) {
@@ -1432,7 +1467,7 @@ switch (insn) {
1432
1467
 
1433
1468
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
1434
1469
  MAYBE_UNUSED(bool pc_moved_p) = false;
1435
- if (body->catch_except_p || FALSE) {
1470
+ if (false) {
1436
1471
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1437
1472
  pc_moved_p = true;
1438
1473
  }
@@ -1450,7 +1485,8 @@ switch (insn) {
1450
1485
  }
1451
1486
  fprintf(f, "}\n");
1452
1487
  break;
1453
- case BIN(dupn):
1488
+ }
1489
+ case BIN(dupn): {
1454
1490
  fprintf(f, "{\n");
1455
1491
  {
1456
1492
  MAYBE_UNUSED(rb_num_t n) = (rb_num_t)operands[0];
@@ -1462,7 +1498,7 @@ switch (insn) {
1462
1498
  fprintf(f, " n = (rb_num_t)0x%"PRIxVALUE";", operands[0]);
1463
1499
  fprintf(f, "\n");
1464
1500
  MAYBE_UNUSED(bool pc_moved_p) = false;
1465
- if (body->catch_except_p || FALSE) {
1501
+ if (false) {
1466
1502
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1467
1503
  pc_moved_p = true;
1468
1504
  }
@@ -1482,7 +1518,8 @@ switch (insn) {
1482
1518
  }
1483
1519
  fprintf(f, "}\n");
1484
1520
  break;
1485
- case BIN(swap):
1521
+ }
1522
+ case BIN(swap): {
1486
1523
  fprintf(f, "{\n");
1487
1524
  {
1488
1525
  if (status->local_stack_p) {
@@ -1493,7 +1530,7 @@ switch (insn) {
1493
1530
  fprintf(f, " val = stack[%d];\n", b->stack_size - 2);
1494
1531
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
1495
1532
  MAYBE_UNUSED(bool pc_moved_p) = false;
1496
- if (body->catch_except_p || FALSE) {
1533
+ if (false) {
1497
1534
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1498
1535
  pc_moved_p = true;
1499
1536
  }
@@ -1511,7 +1548,8 @@ switch (insn) {
1511
1548
  }
1512
1549
  fprintf(f, "}\n");
1513
1550
  break;
1514
- case BIN(reverse):
1551
+ }
1552
+ case BIN(reverse): {
1515
1553
  fprintf(f, "{\n");
1516
1554
  {
1517
1555
  MAYBE_UNUSED(rb_num_t n) = (rb_num_t)operands[0];
@@ -1523,7 +1561,7 @@ switch (insn) {
1523
1561
  fprintf(f, " n = (rb_num_t)0x%"PRIxVALUE";", operands[0]);
1524
1562
  fprintf(f, "\n");
1525
1563
  MAYBE_UNUSED(bool pc_moved_p) = false;
1526
- if (body->catch_except_p || FALSE) {
1564
+ if (false) {
1527
1565
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1528
1566
  pc_moved_p = true;
1529
1567
  }
@@ -1550,7 +1588,8 @@ switch (insn) {
1550
1588
  }
1551
1589
  fprintf(f, "}\n");
1552
1590
  break;
1553
- case BIN(topn):
1591
+ }
1592
+ case BIN(topn): {
1554
1593
  fprintf(f, "{\n");
1555
1594
  {
1556
1595
  MAYBE_UNUSED(rb_num_t n) = (rb_num_t)operands[0];
@@ -1563,7 +1602,7 @@ switch (insn) {
1563
1602
  fprintf(f, " n = (rb_num_t)0x%"PRIxVALUE";", operands[0]);
1564
1603
  fprintf(f, "\n");
1565
1604
  MAYBE_UNUSED(bool pc_moved_p) = false;
1566
- if (body->catch_except_p || FALSE) {
1605
+ if (false) {
1567
1606
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1568
1607
  pc_moved_p = true;
1569
1608
  }
@@ -1581,7 +1620,8 @@ switch (insn) {
1581
1620
  }
1582
1621
  fprintf(f, "}\n");
1583
1622
  break;
1584
- case BIN(setn):
1623
+ }
1624
+ case BIN(setn): {
1585
1625
  fprintf(f, "{\n");
1586
1626
  {
1587
1627
  MAYBE_UNUSED(rb_num_t n) = (rb_num_t)operands[0];
@@ -1595,7 +1635,7 @@ switch (insn) {
1595
1635
  fprintf(f, "\n");
1596
1636
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
1597
1637
  MAYBE_UNUSED(bool pc_moved_p) = false;
1598
- if (body->catch_except_p || FALSE) {
1638
+ if (false) {
1599
1639
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1600
1640
  pc_moved_p = true;
1601
1641
  }
@@ -1613,7 +1653,8 @@ switch (insn) {
1613
1653
  }
1614
1654
  fprintf(f, "}\n");
1615
1655
  break;
1616
- case BIN(adjuststack):
1656
+ }
1657
+ case BIN(adjuststack): {
1617
1658
  fprintf(f, "{\n");
1618
1659
  {
1619
1660
  MAYBE_UNUSED(rb_num_t n) = (rb_num_t)operands[0];
@@ -1625,7 +1666,7 @@ switch (insn) {
1625
1666
  fprintf(f, " n = (rb_num_t)0x%"PRIxVALUE";", operands[0]);
1626
1667
  fprintf(f, "\n");
1627
1668
  MAYBE_UNUSED(bool pc_moved_p) = false;
1628
- if (body->catch_except_p || FALSE) {
1669
+ if (false) {
1629
1670
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1630
1671
  pc_moved_p = true;
1631
1672
  }
@@ -1641,7 +1682,8 @@ switch (insn) {
1641
1682
  }
1642
1683
  fprintf(f, "}\n");
1643
1684
  break;
1644
- case BIN(defined):
1685
+ }
1686
+ case BIN(defined): {
1645
1687
  fprintf(f, "{\n");
1646
1688
  {
1647
1689
  MAYBE_UNUSED(rb_num_t op_type) = (rb_num_t)operands[0];
@@ -1663,7 +1705,7 @@ switch (insn) {
1663
1705
  fprintf(f, "\n");
1664
1706
  fprintf(f, " v = stack[%d];\n", b->stack_size - 1);
1665
1707
  MAYBE_UNUSED(bool pc_moved_p) = false;
1666
- if (body->catch_except_p || TRUE) {
1708
+ if (true) {
1667
1709
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1668
1710
  pc_moved_p = true;
1669
1711
  }
@@ -1688,7 +1730,8 @@ switch (insn) {
1688
1730
  }
1689
1731
  fprintf(f, "}\n");
1690
1732
  break;
1691
- case BIN(checkmatch):
1733
+ }
1734
+ case BIN(checkmatch): {
1692
1735
  fprintf(f, "{\n");
1693
1736
  {
1694
1737
  MAYBE_UNUSED(rb_num_t flag) = (rb_num_t)operands[0];
@@ -1703,7 +1746,7 @@ switch (insn) {
1703
1746
  fprintf(f, " target = stack[%d];\n", b->stack_size - 2);
1704
1747
  fprintf(f, " pattern = stack[%d];\n", b->stack_size - 1);
1705
1748
  MAYBE_UNUSED(bool pc_moved_p) = false;
1706
- if (body->catch_except_p || TRUE) {
1749
+ if (true) {
1707
1750
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1708
1751
  pc_moved_p = true;
1709
1752
  }
@@ -1728,7 +1771,8 @@ switch (insn) {
1728
1771
  }
1729
1772
  fprintf(f, "}\n");
1730
1773
  break;
1731
- case BIN(checkkeyword):
1774
+ }
1775
+ case BIN(checkkeyword): {
1732
1776
  fprintf(f, "{\n");
1733
1777
  {
1734
1778
  MAYBE_UNUSED(lindex_t kw_bits_index) = (lindex_t)operands[0];
@@ -1744,7 +1788,7 @@ switch (insn) {
1744
1788
  fprintf(f, " keyword_index = (lindex_t)0x%"PRIxVALUE";", operands[1]);
1745
1789
  fprintf(f, "\n");
1746
1790
  MAYBE_UNUSED(bool pc_moved_p) = false;
1747
- if (body->catch_except_p || FALSE) {
1791
+ if (false) {
1748
1792
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1749
1793
  pc_moved_p = true;
1750
1794
  }
@@ -1761,7 +1805,8 @@ switch (insn) {
1761
1805
  }
1762
1806
  fprintf(f, "}\n");
1763
1807
  break;
1764
- case BIN(checktype):
1808
+ }
1809
+ case BIN(checktype): {
1765
1810
  fprintf(f, "{\n");
1766
1811
  {
1767
1812
  MAYBE_UNUSED(rb_num_t type) = (rb_num_t)operands[0];
@@ -1775,7 +1820,7 @@ switch (insn) {
1775
1820
  fprintf(f, "\n");
1776
1821
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
1777
1822
  MAYBE_UNUSED(bool pc_moved_p) = false;
1778
- if (body->catch_except_p || FALSE) {
1823
+ if (false) {
1779
1824
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1780
1825
  pc_moved_p = true;
1781
1826
  }
@@ -1792,7 +1837,8 @@ switch (insn) {
1792
1837
  }
1793
1838
  fprintf(f, "}\n");
1794
1839
  break;
1795
- case BIN(definemethod):
1840
+ }
1841
+ case BIN(definemethod): {
1796
1842
  fprintf(f, "{\n");
1797
1843
  {
1798
1844
  MAYBE_UNUSED(ID id) = (ID)operands[0];
@@ -1809,7 +1855,7 @@ switch (insn) {
1809
1855
  fprintf(f, " iseq = (ISEQ)0x%"PRIxVALUE";", operands[1]);
1810
1856
  fprintf(f, "\n");
1811
1857
  MAYBE_UNUSED(bool pc_moved_p) = false;
1812
- if (body->catch_except_p || TRUE) {
1858
+ if (true) {
1813
1859
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1814
1860
  pc_moved_p = true;
1815
1861
  }
@@ -1841,7 +1887,8 @@ switch (insn) {
1841
1887
  }
1842
1888
  fprintf(f, "}\n");
1843
1889
  break;
1844
- case BIN(definesmethod):
1890
+ }
1891
+ case BIN(definesmethod): {
1845
1892
  fprintf(f, "{\n");
1846
1893
  {
1847
1894
  MAYBE_UNUSED(ID id) = (ID)operands[0];
@@ -1860,7 +1907,7 @@ switch (insn) {
1860
1907
  fprintf(f, "\n");
1861
1908
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
1862
1909
  MAYBE_UNUSED(bool pc_moved_p) = false;
1863
- if (body->catch_except_p || TRUE) {
1910
+ if (true) {
1864
1911
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1865
1912
  pc_moved_p = true;
1866
1913
  }
@@ -1892,7 +1939,8 @@ switch (insn) {
1892
1939
  }
1893
1940
  fprintf(f, "}\n");
1894
1941
  break;
1895
- case BIN(send):
1942
+ }
1943
+ case BIN(send): {
1896
1944
  {
1897
1945
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
1898
1946
  MAYBE_UNUSED(ISEQ blockiseq) = (ISEQ)operands[1];
@@ -1908,7 +1956,8 @@ switch (insn) {
1908
1956
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
1909
1957
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
1910
1958
  )) {
1911
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
1959
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
1960
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
1912
1961
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
1913
1962
 
1914
1963
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -1925,7 +1974,7 @@ switch (insn) {
1925
1974
  fprintf(f, " }\n");
1926
1975
 
1927
1976
  MAYBE_UNUSED(bool pc_moved_p) = false;
1928
- if (body->catch_except_p || TRUE) {
1977
+ if (true) {
1929
1978
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
1930
1979
  pc_moved_p = true;
1931
1980
  }
@@ -1961,19 +2010,20 @@ switch (insn) {
1961
2010
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
1962
2011
 
1963
2012
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
1964
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
1965
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
2013
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
2014
+ fprintf(f, " calling.cc = cc;");
2015
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
1966
2016
  }
1967
2017
  else { // VM_METHOD_TYPE_ISEQ
1968
2018
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
1969
2019
  if (iseq->body->catch_except_p) {
1970
2020
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
1971
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
2021
+ fprintf(f, " val = vm_exec(ec, true);\n");
1972
2022
  }
1973
2023
  else {
1974
2024
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
1975
2025
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
1976
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
2026
+ fprintf(f, " val = vm_exec(ec, false);\n");
1977
2027
  fprintf(f, " }\n");
1978
2028
  }
1979
2029
  }
@@ -2013,7 +2063,7 @@ switch (insn) {
2013
2063
  fprintf(f, " blockiseq = (ISEQ)0x%"PRIxVALUE";", operands[1]);
2014
2064
  fprintf(f, "\n");
2015
2065
  MAYBE_UNUSED(bool pc_moved_p) = false;
2016
- if (body->catch_except_p || TRUE) {
2066
+ if (true) {
2017
2067
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2018
2068
  pc_moved_p = true;
2019
2069
  }
@@ -2032,7 +2082,7 @@ switch (insn) {
2032
2082
  }
2033
2083
  fprintf(f, " {\n");
2034
2084
  fprintf(f, " VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, false);\n");
2035
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
2085
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
2036
2086
  fprintf(f, "\n");
2037
2087
  fprintf(f, " if (val == Qundef) {\n");
2038
2088
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -2057,7 +2107,8 @@ switch (insn) {
2057
2107
  }
2058
2108
  fprintf(f, "}\n");
2059
2109
  break;
2060
- case BIN(opt_send_without_block):
2110
+ }
2111
+ case BIN(opt_send_without_block): {
2061
2112
  {
2062
2113
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
2063
2114
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -2072,7 +2123,8 @@ switch (insn) {
2072
2123
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
2073
2124
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
2074
2125
  )) {
2075
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
2126
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
2127
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
2076
2128
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
2077
2129
 
2078
2130
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -2089,7 +2141,7 @@ switch (insn) {
2089
2141
  fprintf(f, " }\n");
2090
2142
 
2091
2143
  MAYBE_UNUSED(bool pc_moved_p) = false;
2092
- if (body->catch_except_p || TRUE) {
2144
+ if (true) {
2093
2145
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2094
2146
  pc_moved_p = true;
2095
2147
  }
@@ -2125,19 +2177,20 @@ switch (insn) {
2125
2177
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
2126
2178
 
2127
2179
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
2128
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
2129
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
2180
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
2181
+ fprintf(f, " calling.cc = cc;");
2182
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
2130
2183
  }
2131
2184
  else { // VM_METHOD_TYPE_ISEQ
2132
2185
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
2133
2186
  if (iseq->body->catch_except_p) {
2134
2187
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
2135
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
2188
+ fprintf(f, " val = vm_exec(ec, true);\n");
2136
2189
  }
2137
2190
  else {
2138
2191
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
2139
2192
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
2140
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
2193
+ fprintf(f, " val = vm_exec(ec, false);\n");
2141
2194
  fprintf(f, " }\n");
2142
2195
  }
2143
2196
  }
@@ -2173,7 +2226,7 @@ switch (insn) {
2173
2226
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
2174
2227
  fprintf(f, "\n");
2175
2228
  MAYBE_UNUSED(bool pc_moved_p) = false;
2176
- if (body->catch_except_p || TRUE) {
2229
+ if (true) {
2177
2230
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2178
2231
  pc_moved_p = true;
2179
2232
  }
@@ -2192,7 +2245,7 @@ switch (insn) {
2192
2245
  }
2193
2246
  fprintf(f, " {\n");
2194
2247
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
2195
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
2248
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
2196
2249
  fprintf(f, "\n");
2197
2250
  fprintf(f, " if (val == Qundef) {\n");
2198
2251
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -2217,7 +2270,8 @@ switch (insn) {
2217
2270
  }
2218
2271
  fprintf(f, "}\n");
2219
2272
  break;
2220
- case BIN(opt_str_freeze):
2273
+ }
2274
+ case BIN(opt_str_freeze): {
2221
2275
  fprintf(f, "{\n");
2222
2276
  {
2223
2277
  MAYBE_UNUSED(VALUE str) = (VALUE)operands[0];
@@ -2235,7 +2289,7 @@ switch (insn) {
2235
2289
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[1])->ci));
2236
2290
  fprintf(f, "\n");
2237
2291
  MAYBE_UNUSED(bool pc_moved_p) = false;
2238
- if (body->catch_except_p || FALSE) {
2292
+ if (false) {
2239
2293
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2240
2294
  pc_moved_p = true;
2241
2295
  }
@@ -2262,8 +2316,9 @@ switch (insn) {
2262
2316
  }
2263
2317
  fprintf(f, "}\n");
2264
2318
  break;
2265
- case BIN(opt_nil_p):
2266
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_nil_p))) {
2319
+ }
2320
+ case BIN(opt_nil_p): {
2321
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_nil_p))) {
2267
2322
  {
2268
2323
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
2269
2324
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -2278,7 +2333,8 @@ switch (insn) {
2278
2333
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
2279
2334
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
2280
2335
  )) {
2281
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
2336
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
2337
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
2282
2338
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
2283
2339
 
2284
2340
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -2295,7 +2351,7 @@ switch (insn) {
2295
2351
  fprintf(f, " }\n");
2296
2352
 
2297
2353
  MAYBE_UNUSED(bool pc_moved_p) = false;
2298
- if (body->catch_except_p || TRUE) {
2354
+ if (true) {
2299
2355
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2300
2356
  pc_moved_p = true;
2301
2357
  }
@@ -2331,19 +2387,20 @@ switch (insn) {
2331
2387
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
2332
2388
 
2333
2389
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
2334
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
2335
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
2390
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
2391
+ fprintf(f, " calling.cc = cc;");
2392
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
2336
2393
  }
2337
2394
  else { // VM_METHOD_TYPE_ISEQ
2338
2395
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
2339
2396
  if (iseq->body->catch_except_p) {
2340
2397
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
2341
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
2398
+ fprintf(f, " val = vm_exec(ec, true);\n");
2342
2399
  }
2343
2400
  else {
2344
2401
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
2345
2402
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
2346
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
2403
+ fprintf(f, " val = vm_exec(ec, false);\n");
2347
2404
  fprintf(f, " }\n");
2348
2405
  }
2349
2406
  }
@@ -2379,7 +2436,7 @@ switch (insn) {
2379
2436
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
2380
2437
  fprintf(f, "\n");
2381
2438
  MAYBE_UNUSED(bool pc_moved_p) = false;
2382
- if (body->catch_except_p || TRUE) {
2439
+ if (true) {
2383
2440
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2384
2441
  pc_moved_p = true;
2385
2442
  }
@@ -2398,7 +2455,7 @@ switch (insn) {
2398
2455
  }
2399
2456
  fprintf(f, " {\n");
2400
2457
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
2401
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
2458
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
2402
2459
  fprintf(f, "\n");
2403
2460
  fprintf(f, " if (val == Qundef) {\n");
2404
2461
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -2422,8 +2479,8 @@ switch (insn) {
2422
2479
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
2423
2480
  }
2424
2481
  fprintf(f, "}\n");
2425
- break;
2426
- }
2482
+ break;
2483
+ }
2427
2484
  fprintf(f, "{\n");
2428
2485
  {
2429
2486
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -2438,7 +2495,7 @@ switch (insn) {
2438
2495
  fprintf(f, "\n");
2439
2496
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 1);
2440
2497
  MAYBE_UNUSED(bool pc_moved_p) = false;
2441
- if (body->catch_except_p || FALSE) {
2498
+ if (false) {
2442
2499
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2443
2500
  pc_moved_p = true;
2444
2501
  }
@@ -2464,7 +2521,8 @@ switch (insn) {
2464
2521
  }
2465
2522
  fprintf(f, "}\n");
2466
2523
  break;
2467
- case BIN(opt_str_uminus):
2524
+ }
2525
+ case BIN(opt_str_uminus): {
2468
2526
  fprintf(f, "{\n");
2469
2527
  {
2470
2528
  MAYBE_UNUSED(VALUE str) = (VALUE)operands[0];
@@ -2482,7 +2540,7 @@ switch (insn) {
2482
2540
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[1])->ci));
2483
2541
  fprintf(f, "\n");
2484
2542
  MAYBE_UNUSED(bool pc_moved_p) = false;
2485
- if (body->catch_except_p || FALSE) {
2543
+ if (false) {
2486
2544
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2487
2545
  pc_moved_p = true;
2488
2546
  }
@@ -2509,7 +2567,8 @@ switch (insn) {
2509
2567
  }
2510
2568
  fprintf(f, "}\n");
2511
2569
  break;
2512
- case BIN(opt_newarray_max):
2570
+ }
2571
+ case BIN(opt_newarray_max): {
2513
2572
  fprintf(f, "{\n");
2514
2573
  {
2515
2574
  MAYBE_UNUSED(rb_num_t num) = (rb_num_t)operands[0];
@@ -2522,7 +2581,7 @@ switch (insn) {
2522
2581
  fprintf(f, " num = (rb_num_t)0x%"PRIxVALUE";", operands[0]);
2523
2582
  fprintf(f, "\n");
2524
2583
  MAYBE_UNUSED(bool pc_moved_p) = false;
2525
- if (body->catch_except_p || TRUE) {
2584
+ if (true) {
2526
2585
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2527
2586
  pc_moved_p = true;
2528
2587
  }
@@ -2548,7 +2607,8 @@ switch (insn) {
2548
2607
  }
2549
2608
  fprintf(f, "}\n");
2550
2609
  break;
2551
- case BIN(opt_newarray_min):
2610
+ }
2611
+ case BIN(opt_newarray_min): {
2552
2612
  fprintf(f, "{\n");
2553
2613
  {
2554
2614
  MAYBE_UNUSED(rb_num_t num) = (rb_num_t)operands[0];
@@ -2561,7 +2621,7 @@ switch (insn) {
2561
2621
  fprintf(f, " num = (rb_num_t)0x%"PRIxVALUE";", operands[0]);
2562
2622
  fprintf(f, "\n");
2563
2623
  MAYBE_UNUSED(bool pc_moved_p) = false;
2564
- if (body->catch_except_p || TRUE) {
2624
+ if (true) {
2565
2625
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2566
2626
  pc_moved_p = true;
2567
2627
  }
@@ -2587,7 +2647,8 @@ switch (insn) {
2587
2647
  }
2588
2648
  fprintf(f, "}\n");
2589
2649
  break;
2590
- case BIN(invokesuper):
2650
+ }
2651
+ case BIN(invokesuper): {
2591
2652
  fprintf(f, "{\n");
2592
2653
  {
2593
2654
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -2605,7 +2666,7 @@ switch (insn) {
2605
2666
  fprintf(f, " blockiseq = (ISEQ)0x%"PRIxVALUE";", operands[1]);
2606
2667
  fprintf(f, "\n");
2607
2668
  MAYBE_UNUSED(bool pc_moved_p) = false;
2608
- if (body->catch_except_p || TRUE) {
2669
+ if (true) {
2609
2670
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2610
2671
  pc_moved_p = true;
2611
2672
  }
@@ -2624,7 +2685,7 @@ switch (insn) {
2624
2685
  }
2625
2686
  fprintf(f, " {\n");
2626
2687
  fprintf(f, " VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, true);\n");
2627
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_super_method);\n");
2688
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_super);\n");
2628
2689
  fprintf(f, "\n");
2629
2690
  fprintf(f, " if (val == Qundef) {\n");
2630
2691
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -2649,7 +2710,8 @@ switch (insn) {
2649
2710
  }
2650
2711
  fprintf(f, "}\n");
2651
2712
  break;
2652
- case BIN(invokeblock):
2713
+ }
2714
+ case BIN(invokeblock): {
2653
2715
  fprintf(f, "{\n");
2654
2716
  {
2655
2717
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -2663,7 +2725,7 @@ switch (insn) {
2663
2725
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
2664
2726
  fprintf(f, "\n");
2665
2727
  MAYBE_UNUSED(bool pc_moved_p) = false;
2666
- if (body->catch_except_p || TRUE) {
2728
+ if (true) {
2667
2729
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2668
2730
  pc_moved_p = true;
2669
2731
  }
@@ -2681,13 +2743,8 @@ switch (insn) {
2681
2743
  fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size - 0); /* POPN(INSN_ATTR(popn)); */
2682
2744
  }
2683
2745
  fprintf(f, " {\n");
2684
- fprintf(f, " if (UNLIKELY(vm_cc_call(cd->cc) != vm_invokeblock_i)) {\n");
2685
- fprintf(f, " const struct rb_callcache *cc = vm_cc_new(0, NULL, vm_invokeblock_i);\n");
2686
- fprintf(f, " RB_OBJ_WRITE(GET_ISEQ(), &cd->cc, cc);\n");
2687
- fprintf(f, " }\n");
2688
- fprintf(f, "\n");
2689
2746
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
2690
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_invokeblock);\n");
2747
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_invokeblock);\n");
2691
2748
  fprintf(f, "\n");
2692
2749
  fprintf(f, " if (val == Qundef) {\n");
2693
2750
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -2712,27 +2769,26 @@ switch (insn) {
2712
2769
  }
2713
2770
  fprintf(f, "}\n");
2714
2771
  break;
2715
- case BIN(leave):
2716
- {
2717
- if (b->stack_size != 1) {
2718
- if (mjit_opts.warnings || mjit_opts.verbose)
2719
- fprintf(stderr, "MJIT warning: Unexpected JIT stack_size on leave: %d\n", b->stack_size);
2720
- status->success = false;
2721
- }
2722
- if (status->inlined_iseqs != NULL) { // the current ISeq is NOT being inlined
2723
- fprintf(f, " if (UNLIKELY(RUBY_VM_INTERRUPTED_ANY(ec))) {\n");
2724
- fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
2725
- fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", pos);
2726
- fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_leave);\n");
2727
- fprintf(f, " goto cancel;\n");
2728
- fprintf(f, " }\n");
2729
- fprintf(f, " ec->cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(reg_cfp);\n"); // vm_pop_frame
2730
- }
2731
- fprintf(f, " return stack[0];\n");
2732
- b->stack_size += attr_sp_inc_leave();
2733
- b->finish_p = TRUE;
2734
- break;
2772
+ }
2773
+ case BIN(leave): {
2774
+ if (b->stack_size != 1) {
2775
+ if (mjit_opts.warnings || mjit_opts.verbose)
2776
+ fprintf(stderr, "MJIT warning: Unexpected JIT stack_size on leave: %d\n", b->stack_size);
2777
+ status->success = false;
2778
+ }
2779
+ if (status->inlined_iseqs != NULL) { // the current ISeq is NOT being inlined
2780
+ fprintf(f, " if (UNLIKELY(RUBY_VM_INTERRUPTED_ANY(ec))) {\n");
2781
+ fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
2782
+ fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", pos);
2783
+ fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_leave);\n");
2784
+ fprintf(f, " goto cancel;\n");
2785
+ fprintf(f, " }\n");
2786
+ fprintf(f, " ec->cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(reg_cfp);\n"); // vm_pop_frame
2735
2787
  }
2788
+ fprintf(f, " return stack[0];\n");
2789
+ b->stack_size += attr_sp_inc_leave();
2790
+ b->finish_p = TRUE;
2791
+ break;
2736
2792
  fprintf(f, "{\n");
2737
2793
  {
2738
2794
  if (status->local_stack_p) {
@@ -2742,7 +2798,7 @@ switch (insn) {
2742
2798
 
2743
2799
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
2744
2800
  MAYBE_UNUSED(bool pc_moved_p) = false;
2745
- if (body->catch_except_p || TRUE) {
2801
+ if (true) {
2746
2802
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2747
2803
  pc_moved_p = true;
2748
2804
  }
@@ -2798,7 +2854,8 @@ switch (insn) {
2798
2854
  fprintf(f, "}\n");
2799
2855
  b->finish_p = TRUE;
2800
2856
  break;
2801
- case BIN(throw):
2857
+ }
2858
+ case BIN(throw): {
2802
2859
  fprintf(f, "{\n");
2803
2860
  {
2804
2861
  MAYBE_UNUSED(rb_num_t throw_state) = (rb_num_t)operands[0];
@@ -2812,7 +2869,7 @@ switch (insn) {
2812
2869
  fprintf(f, "\n");
2813
2870
  fprintf(f, " throwobj = stack[%d];\n", b->stack_size - 1);
2814
2871
  MAYBE_UNUSED(bool pc_moved_p) = false;
2815
- if (body->catch_except_p || TRUE) {
2872
+ if (true) {
2816
2873
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2817
2874
  pc_moved_p = true;
2818
2875
  }
@@ -2840,7 +2897,8 @@ switch (insn) {
2840
2897
  fprintf(f, "}\n");
2841
2898
  b->finish_p = TRUE;
2842
2899
  break;
2843
- case BIN(jump):
2900
+ }
2901
+ case BIN(jump): {
2844
2902
  fprintf(f, "{\n");
2845
2903
  {
2846
2904
  MAYBE_UNUSED(OFFSET dst) = (OFFSET)operands[0];
@@ -2852,7 +2910,7 @@ switch (insn) {
2852
2910
  fprintf(f, " dst = (OFFSET)0x%"PRIxVALUE";", operands[0]);
2853
2911
  fprintf(f, "\n");
2854
2912
  MAYBE_UNUSED(bool pc_moved_p) = false;
2855
- if (body->catch_except_p || TRUE) {
2913
+ if (false) {
2856
2914
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2857
2915
  pc_moved_p = true;
2858
2916
  }
@@ -2862,23 +2920,24 @@ switch (insn) {
2862
2920
  fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
2863
2921
  }
2864
2922
  fprintf(f, " {\n");
2865
- fprintf(f, " RUBY_VM_CHECK_INTS(ec);\n");
2923
+ fprintf(f, " if (UNLIKELY(RUBY_VM_INTERRUPTED_ANY(ec))) {\n");
2924
+ fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2925
+ fprintf(f, " rb_threadptr_execute_interrupts(rb_ec_thread_ptr(ec), 0);\n");
2926
+ fprintf(f, " if (UNLIKELY(!mjit_call_p)) {\n");
2927
+ fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
2928
+ fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_invalidate_all);\n");
2929
+ fprintf(f, " goto cancel;\n");
2930
+ fprintf(f, " }\n");
2931
+ fprintf(f, " }\n");
2866
2932
  next_pos = pos + insn_len(insn) + (unsigned int)dst;
2867
2933
  fprintf(f, " goto label_%d;\n", next_pos);
2868
2934
  fprintf(f, " }\n");
2869
- fprintf(f, " if (UNLIKELY(!mjit_call_p)) {\n");
2870
- fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size + (int)attr_sp_inc_jump(dst));
2871
- if (!pc_moved_p) {
2872
- fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos);
2873
- }
2874
- fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_invalidate_all);\n");
2875
- fprintf(f, " goto cancel;\n");
2876
- fprintf(f, " }\n");
2877
2935
  b->stack_size += attr_sp_inc_jump(dst);
2878
2936
  }
2879
2937
  fprintf(f, "}\n");
2880
2938
  break;
2881
- case BIN(branchif):
2939
+ }
2940
+ case BIN(branchif): {
2882
2941
  fprintf(f, "{\n");
2883
2942
  {
2884
2943
  MAYBE_UNUSED(OFFSET dst) = (OFFSET)operands[0];
@@ -2892,7 +2951,7 @@ switch (insn) {
2892
2951
  fprintf(f, "\n");
2893
2952
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
2894
2953
  MAYBE_UNUSED(bool pc_moved_p) = false;
2895
- if (body->catch_except_p || TRUE) {
2954
+ if (false) {
2896
2955
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2897
2956
  pc_moved_p = true;
2898
2957
  }
@@ -2903,19 +2962,19 @@ switch (insn) {
2903
2962
  }
2904
2963
  fprintf(f, " {\n");
2905
2964
  fprintf(f, " if (RTEST(val)) {\n");
2906
- fprintf(f, " RUBY_VM_CHECK_INTS(ec);\n");
2965
+ fprintf(f, " if (UNLIKELY(RUBY_VM_INTERRUPTED_ANY(ec))) {\n");
2966
+ fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2967
+ fprintf(f, " rb_threadptr_execute_interrupts(rb_ec_thread_ptr(ec), 0);\n");
2968
+ fprintf(f, " if (UNLIKELY(!mjit_call_p)) {\n");
2969
+ fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
2970
+ fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_invalidate_all);\n");
2971
+ fprintf(f, " goto cancel;\n");
2972
+ fprintf(f, " }\n");
2973
+ fprintf(f, " }\n");
2907
2974
  next_pos = pos + insn_len(insn) + (unsigned int)dst;
2908
2975
  fprintf(f, " goto label_%d;\n", next_pos);
2909
2976
  fprintf(f, " }\n");
2910
2977
  fprintf(f, " }\n");
2911
- fprintf(f, " if (UNLIKELY(!mjit_call_p)) {\n");
2912
- fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size + (int)attr_sp_inc_branchif(dst));
2913
- if (!pc_moved_p) {
2914
- fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos);
2915
- }
2916
- fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_invalidate_all);\n");
2917
- fprintf(f, " goto cancel;\n");
2918
- fprintf(f, " }\n");
2919
2978
  b->stack_size += attr_sp_inc_branchif(dst);
2920
2979
  }
2921
2980
  fprintf(f, "}\n");
@@ -2926,7 +2985,8 @@ switch (insn) {
2926
2985
  compile_insns(f, body, b->stack_size, pos + insn_len(insn), status);
2927
2986
  }
2928
2987
  break;
2929
- case BIN(branchunless):
2988
+ }
2989
+ case BIN(branchunless): {
2930
2990
  fprintf(f, "{\n");
2931
2991
  {
2932
2992
  MAYBE_UNUSED(OFFSET dst) = (OFFSET)operands[0];
@@ -2940,7 +3000,7 @@ switch (insn) {
2940
3000
  fprintf(f, "\n");
2941
3001
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
2942
3002
  MAYBE_UNUSED(bool pc_moved_p) = false;
2943
- if (body->catch_except_p || TRUE) {
3003
+ if (false) {
2944
3004
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2945
3005
  pc_moved_p = true;
2946
3006
  }
@@ -2951,19 +3011,19 @@ switch (insn) {
2951
3011
  }
2952
3012
  fprintf(f, " {\n");
2953
3013
  fprintf(f, " if (!RTEST(val)) {\n");
2954
- fprintf(f, " RUBY_VM_CHECK_INTS(ec);\n");
3014
+ fprintf(f, " if (UNLIKELY(RUBY_VM_INTERRUPTED_ANY(ec))) {\n");
3015
+ fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3016
+ fprintf(f, " rb_threadptr_execute_interrupts(rb_ec_thread_ptr(ec), 0);\n");
3017
+ fprintf(f, " if (UNLIKELY(!mjit_call_p)) {\n");
3018
+ fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
3019
+ fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_invalidate_all);\n");
3020
+ fprintf(f, " goto cancel;\n");
3021
+ fprintf(f, " }\n");
3022
+ fprintf(f, " }\n");
2955
3023
  next_pos = pos + insn_len(insn) + (unsigned int)dst;
2956
3024
  fprintf(f, " goto label_%d;\n", next_pos);
2957
3025
  fprintf(f, " }\n");
2958
3026
  fprintf(f, " }\n");
2959
- fprintf(f, " if (UNLIKELY(!mjit_call_p)) {\n");
2960
- fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size + (int)attr_sp_inc_branchunless(dst));
2961
- if (!pc_moved_p) {
2962
- fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos);
2963
- }
2964
- fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_invalidate_all);\n");
2965
- fprintf(f, " goto cancel;\n");
2966
- fprintf(f, " }\n");
2967
3027
  b->stack_size += attr_sp_inc_branchunless(dst);
2968
3028
  }
2969
3029
  fprintf(f, "}\n");
@@ -2974,7 +3034,8 @@ switch (insn) {
2974
3034
  compile_insns(f, body, b->stack_size, pos + insn_len(insn), status);
2975
3035
  }
2976
3036
  break;
2977
- case BIN(branchnil):
3037
+ }
3038
+ case BIN(branchnil): {
2978
3039
  fprintf(f, "{\n");
2979
3040
  {
2980
3041
  MAYBE_UNUSED(OFFSET dst) = (OFFSET)operands[0];
@@ -2988,7 +3049,7 @@ switch (insn) {
2988
3049
  fprintf(f, "\n");
2989
3050
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
2990
3051
  MAYBE_UNUSED(bool pc_moved_p) = false;
2991
- if (body->catch_except_p || TRUE) {
3052
+ if (false) {
2992
3053
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
2993
3054
  pc_moved_p = true;
2994
3055
  }
@@ -2999,19 +3060,19 @@ switch (insn) {
2999
3060
  }
3000
3061
  fprintf(f, " {\n");
3001
3062
  fprintf(f, " if (NIL_P(val)) {\n");
3002
- fprintf(f, " RUBY_VM_CHECK_INTS(ec);\n");
3063
+ fprintf(f, " if (UNLIKELY(RUBY_VM_INTERRUPTED_ANY(ec))) {\n");
3064
+ fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3065
+ fprintf(f, " rb_threadptr_execute_interrupts(rb_ec_thread_ptr(ec), 0);\n");
3066
+ fprintf(f, " if (UNLIKELY(!mjit_call_p)) {\n");
3067
+ fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
3068
+ fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_invalidate_all);\n");
3069
+ fprintf(f, " goto cancel;\n");
3070
+ fprintf(f, " }\n");
3071
+ fprintf(f, " }\n");
3003
3072
  next_pos = pos + insn_len(insn) + (unsigned int)dst;
3004
3073
  fprintf(f, " goto label_%d;\n", next_pos);
3005
3074
  fprintf(f, " }\n");
3006
3075
  fprintf(f, " }\n");
3007
- fprintf(f, " if (UNLIKELY(!mjit_call_p)) {\n");
3008
- fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size + (int)attr_sp_inc_branchnil(dst));
3009
- if (!pc_moved_p) {
3010
- fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos);
3011
- }
3012
- fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_invalidate_all);\n");
3013
- fprintf(f, " goto cancel;\n");
3014
- fprintf(f, " }\n");
3015
3076
  b->stack_size += attr_sp_inc_branchnil(dst);
3016
3077
  }
3017
3078
  fprintf(f, "}\n");
@@ -3022,7 +3083,31 @@ switch (insn) {
3022
3083
  compile_insns(f, body, b->stack_size, pos + insn_len(insn), status);
3023
3084
  }
3024
3085
  break;
3025
- case BIN(opt_getinlinecache):
3086
+ }
3087
+ case BIN(opt_getinlinecache): {
3088
+ OFFSET dst = (OFFSET)operands[0];
3089
+ IC ic = (IC)operands[1];
3090
+
3091
+ rb_mjit_before_vm_ic_update();
3092
+ rb_serial_t ic_serial = ic->ic_serial;
3093
+ const rb_cref_t *ic_cref = ic->ic_cref;
3094
+ VALUE ic_value = ic->value;
3095
+ rb_mjit_after_vm_ic_update();
3096
+
3097
+ if (ic_serial && !status->compile_info->disable_const_cache) {
3098
+ fprintf(f, " if (vm_ic_hit_p((rb_serial_t)%"PRI_SERIALT_PREFIX"u, (const rb_cref_t *)0x%"PRIxVALUE", reg_cfp->ep)) {", ic_serial, (VALUE)ic_cref);
3099
+ fprintf(f, " stack[%d] = 0x%"PRIxVALUE";\n", b->stack_size, ic_value);
3100
+ fprintf(f, " goto label_%d;\n", pos + insn_len(insn) + (int)dst);
3101
+ fprintf(f, " }");
3102
+ fprintf(f, " else {");
3103
+ fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
3104
+ fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", pos);
3105
+ fprintf(f, " goto const_cancel;\n");
3106
+ fprintf(f, " }");
3107
+
3108
+ b->stack_size += attr_sp_inc_opt_getinlinecache(dst, ic);
3109
+ break;
3110
+ }
3026
3111
  fprintf(f, "{\n");
3027
3112
  {
3028
3113
  MAYBE_UNUSED(OFFSET dst) = (OFFSET)operands[0];
@@ -3039,7 +3124,7 @@ switch (insn) {
3039
3124
  fprintf(f, " ic = (IC)0x%"PRIxVALUE";", operands[1]);
3040
3125
  fprintf(f, "\n");
3041
3126
  MAYBE_UNUSED(bool pc_moved_p) = false;
3042
- if (body->catch_except_p || FALSE) {
3127
+ if (false) {
3043
3128
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3044
3129
  pc_moved_p = true;
3045
3130
  }
@@ -3049,7 +3134,7 @@ switch (insn) {
3049
3134
  fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
3050
3135
  }
3051
3136
  fprintf(f, " {\n");
3052
- fprintf(f, " if (vm_ic_hit_p(ic, GET_EP())) {\n");
3137
+ fprintf(f, " if (vm_ic_hit_p(ic->ic_serial, ic->ic_cref, GET_EP())) {\n");
3053
3138
  fprintf(f, " val = ic->value;\n");
3054
3139
  fprintf(f, " stack[%d] = val;\n", b->stack_size + (int)attr_sp_inc_opt_getinlinecache(dst, ic) - 1);
3055
3140
  next_pos = pos + insn_len(insn) + (unsigned int)dst;
@@ -3070,7 +3155,8 @@ switch (insn) {
3070
3155
  compile_insns(f, body, b->stack_size, pos + insn_len(insn), status);
3071
3156
  }
3072
3157
  break;
3073
- case BIN(opt_setinlinecache):
3158
+ }
3159
+ case BIN(opt_setinlinecache): {
3074
3160
  fprintf(f, "{\n");
3075
3161
  {
3076
3162
  MAYBE_UNUSED(IC ic) = (IC)operands[0];
@@ -3084,7 +3170,7 @@ switch (insn) {
3084
3170
  fprintf(f, "\n");
3085
3171
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
3086
3172
  MAYBE_UNUSED(bool pc_moved_p) = false;
3087
- if (body->catch_except_p || FALSE) {
3173
+ if (false) {
3088
3174
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3089
3175
  pc_moved_p = true;
3090
3176
  }
@@ -3101,7 +3187,8 @@ switch (insn) {
3101
3187
  }
3102
3188
  fprintf(f, "}\n");
3103
3189
  break;
3104
- case BIN(once):
3190
+ }
3191
+ case BIN(once): {
3105
3192
  fprintf(f, "{\n");
3106
3193
  {
3107
3194
  MAYBE_UNUSED(ISEQ iseq) = (ISEQ)operands[0];
@@ -3118,7 +3205,7 @@ switch (insn) {
3118
3205
  fprintf(f, " ise = (ISE)0x%"PRIxVALUE";", operands[1]);
3119
3206
  fprintf(f, "\n");
3120
3207
  MAYBE_UNUSED(bool pc_moved_p) = false;
3121
- if (body->catch_except_p || TRUE) {
3208
+ if (true) {
3122
3209
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3123
3210
  pc_moved_p = true;
3124
3211
  }
@@ -3151,7 +3238,8 @@ switch (insn) {
3151
3238
  }
3152
3239
  fprintf(f, "}\n");
3153
3240
  break;
3154
- case BIN(opt_case_dispatch):
3241
+ }
3242
+ case BIN(opt_case_dispatch): {
3155
3243
  fprintf(f, "{\n");
3156
3244
  {
3157
3245
  MAYBE_UNUSED(CDHASH hash) = (CDHASH)operands[0];
@@ -3169,7 +3257,7 @@ switch (insn) {
3169
3257
  fprintf(f, "\n");
3170
3258
  fprintf(f, " key = stack[%d];\n", b->stack_size - 1);
3171
3259
  MAYBE_UNUSED(bool pc_moved_p) = false;
3172
- if (body->catch_except_p || FALSE) {
3260
+ if (false) {
3173
3261
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3174
3262
  pc_moved_p = true;
3175
3263
  }
@@ -3206,8 +3294,9 @@ switch (insn) {
3206
3294
  compile_insns(f, body, b->stack_size, pos + insn_len(insn), status);
3207
3295
  }
3208
3296
  break;
3209
- case BIN(opt_plus):
3210
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_plus))) {
3297
+ }
3298
+ case BIN(opt_plus): {
3299
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_plus))) {
3211
3300
  {
3212
3301
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
3213
3302
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -3222,7 +3311,8 @@ switch (insn) {
3222
3311
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
3223
3312
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
3224
3313
  )) {
3225
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
3314
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
3315
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
3226
3316
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
3227
3317
 
3228
3318
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -3239,7 +3329,7 @@ switch (insn) {
3239
3329
  fprintf(f, " }\n");
3240
3330
 
3241
3331
  MAYBE_UNUSED(bool pc_moved_p) = false;
3242
- if (body->catch_except_p || TRUE) {
3332
+ if (true) {
3243
3333
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3244
3334
  pc_moved_p = true;
3245
3335
  }
@@ -3275,19 +3365,20 @@ switch (insn) {
3275
3365
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
3276
3366
 
3277
3367
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
3278
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
3279
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
3368
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
3369
+ fprintf(f, " calling.cc = cc;");
3370
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
3280
3371
  }
3281
3372
  else { // VM_METHOD_TYPE_ISEQ
3282
3373
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
3283
3374
  if (iseq->body->catch_except_p) {
3284
3375
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
3285
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
3376
+ fprintf(f, " val = vm_exec(ec, true);\n");
3286
3377
  }
3287
3378
  else {
3288
3379
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
3289
3380
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
3290
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
3381
+ fprintf(f, " val = vm_exec(ec, false);\n");
3291
3382
  fprintf(f, " }\n");
3292
3383
  }
3293
3384
  }
@@ -3323,7 +3414,7 @@ switch (insn) {
3323
3414
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
3324
3415
  fprintf(f, "\n");
3325
3416
  MAYBE_UNUSED(bool pc_moved_p) = false;
3326
- if (body->catch_except_p || TRUE) {
3417
+ if (true) {
3327
3418
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3328
3419
  pc_moved_p = true;
3329
3420
  }
@@ -3342,7 +3433,7 @@ switch (insn) {
3342
3433
  }
3343
3434
  fprintf(f, " {\n");
3344
3435
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
3345
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
3436
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
3346
3437
  fprintf(f, "\n");
3347
3438
  fprintf(f, " if (val == Qundef) {\n");
3348
3439
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -3366,8 +3457,8 @@ switch (insn) {
3366
3457
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
3367
3458
  }
3368
3459
  fprintf(f, "}\n");
3369
- break;
3370
- }
3460
+ break;
3461
+ }
3371
3462
  fprintf(f, "{\n");
3372
3463
  {
3373
3464
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -3383,7 +3474,7 @@ switch (insn) {
3383
3474
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
3384
3475
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
3385
3476
  MAYBE_UNUSED(bool pc_moved_p) = false;
3386
- if (body->catch_except_p || FALSE) {
3477
+ if (false) {
3387
3478
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3388
3479
  pc_moved_p = true;
3389
3480
  }
@@ -3409,8 +3500,9 @@ switch (insn) {
3409
3500
  }
3410
3501
  fprintf(f, "}\n");
3411
3502
  break;
3412
- case BIN(opt_minus):
3413
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_minus))) {
3503
+ }
3504
+ case BIN(opt_minus): {
3505
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_minus))) {
3414
3506
  {
3415
3507
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
3416
3508
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -3425,7 +3517,8 @@ switch (insn) {
3425
3517
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
3426
3518
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
3427
3519
  )) {
3428
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
3520
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
3521
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
3429
3522
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
3430
3523
 
3431
3524
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -3442,7 +3535,7 @@ switch (insn) {
3442
3535
  fprintf(f, " }\n");
3443
3536
 
3444
3537
  MAYBE_UNUSED(bool pc_moved_p) = false;
3445
- if (body->catch_except_p || TRUE) {
3538
+ if (true) {
3446
3539
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3447
3540
  pc_moved_p = true;
3448
3541
  }
@@ -3478,19 +3571,20 @@ switch (insn) {
3478
3571
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
3479
3572
 
3480
3573
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
3481
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
3482
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
3574
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
3575
+ fprintf(f, " calling.cc = cc;");
3576
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
3483
3577
  }
3484
3578
  else { // VM_METHOD_TYPE_ISEQ
3485
3579
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
3486
3580
  if (iseq->body->catch_except_p) {
3487
3581
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
3488
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
3582
+ fprintf(f, " val = vm_exec(ec, true);\n");
3489
3583
  }
3490
3584
  else {
3491
3585
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
3492
3586
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
3493
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
3587
+ fprintf(f, " val = vm_exec(ec, false);\n");
3494
3588
  fprintf(f, " }\n");
3495
3589
  }
3496
3590
  }
@@ -3526,7 +3620,7 @@ switch (insn) {
3526
3620
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
3527
3621
  fprintf(f, "\n");
3528
3622
  MAYBE_UNUSED(bool pc_moved_p) = false;
3529
- if (body->catch_except_p || TRUE) {
3623
+ if (true) {
3530
3624
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3531
3625
  pc_moved_p = true;
3532
3626
  }
@@ -3545,7 +3639,7 @@ switch (insn) {
3545
3639
  }
3546
3640
  fprintf(f, " {\n");
3547
3641
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
3548
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
3642
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
3549
3643
  fprintf(f, "\n");
3550
3644
  fprintf(f, " if (val == Qundef) {\n");
3551
3645
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -3569,8 +3663,8 @@ switch (insn) {
3569
3663
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
3570
3664
  }
3571
3665
  fprintf(f, "}\n");
3572
- break;
3573
- }
3666
+ break;
3667
+ }
3574
3668
  fprintf(f, "{\n");
3575
3669
  {
3576
3670
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -3586,7 +3680,7 @@ switch (insn) {
3586
3680
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
3587
3681
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
3588
3682
  MAYBE_UNUSED(bool pc_moved_p) = false;
3589
- if (body->catch_except_p || FALSE) {
3683
+ if (false) {
3590
3684
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3591
3685
  pc_moved_p = true;
3592
3686
  }
@@ -3612,8 +3706,9 @@ switch (insn) {
3612
3706
  }
3613
3707
  fprintf(f, "}\n");
3614
3708
  break;
3615
- case BIN(opt_mult):
3616
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_mult))) {
3709
+ }
3710
+ case BIN(opt_mult): {
3711
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_mult))) {
3617
3712
  {
3618
3713
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
3619
3714
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -3628,7 +3723,8 @@ switch (insn) {
3628
3723
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
3629
3724
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
3630
3725
  )) {
3631
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
3726
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
3727
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
3632
3728
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
3633
3729
 
3634
3730
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -3645,7 +3741,7 @@ switch (insn) {
3645
3741
  fprintf(f, " }\n");
3646
3742
 
3647
3743
  MAYBE_UNUSED(bool pc_moved_p) = false;
3648
- if (body->catch_except_p || TRUE) {
3744
+ if (true) {
3649
3745
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3650
3746
  pc_moved_p = true;
3651
3747
  }
@@ -3681,19 +3777,20 @@ switch (insn) {
3681
3777
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
3682
3778
 
3683
3779
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
3684
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
3685
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
3780
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
3781
+ fprintf(f, " calling.cc = cc;");
3782
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
3686
3783
  }
3687
3784
  else { // VM_METHOD_TYPE_ISEQ
3688
3785
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
3689
3786
  if (iseq->body->catch_except_p) {
3690
3787
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
3691
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
3788
+ fprintf(f, " val = vm_exec(ec, true);\n");
3692
3789
  }
3693
3790
  else {
3694
3791
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
3695
3792
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
3696
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
3793
+ fprintf(f, " val = vm_exec(ec, false);\n");
3697
3794
  fprintf(f, " }\n");
3698
3795
  }
3699
3796
  }
@@ -3729,7 +3826,7 @@ switch (insn) {
3729
3826
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
3730
3827
  fprintf(f, "\n");
3731
3828
  MAYBE_UNUSED(bool pc_moved_p) = false;
3732
- if (body->catch_except_p || TRUE) {
3829
+ if (true) {
3733
3830
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3734
3831
  pc_moved_p = true;
3735
3832
  }
@@ -3748,7 +3845,7 @@ switch (insn) {
3748
3845
  }
3749
3846
  fprintf(f, " {\n");
3750
3847
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
3751
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
3848
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
3752
3849
  fprintf(f, "\n");
3753
3850
  fprintf(f, " if (val == Qundef) {\n");
3754
3851
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -3772,8 +3869,8 @@ switch (insn) {
3772
3869
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
3773
3870
  }
3774
3871
  fprintf(f, "}\n");
3775
- break;
3776
- }
3872
+ break;
3873
+ }
3777
3874
  fprintf(f, "{\n");
3778
3875
  {
3779
3876
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -3789,7 +3886,7 @@ switch (insn) {
3789
3886
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
3790
3887
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
3791
3888
  MAYBE_UNUSED(bool pc_moved_p) = false;
3792
- if (body->catch_except_p || FALSE) {
3889
+ if (false) {
3793
3890
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3794
3891
  pc_moved_p = true;
3795
3892
  }
@@ -3815,8 +3912,9 @@ switch (insn) {
3815
3912
  }
3816
3913
  fprintf(f, "}\n");
3817
3914
  break;
3818
- case BIN(opt_div):
3819
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_div))) {
3915
+ }
3916
+ case BIN(opt_div): {
3917
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_div))) {
3820
3918
  {
3821
3919
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
3822
3920
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -3831,7 +3929,8 @@ switch (insn) {
3831
3929
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
3832
3930
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
3833
3931
  )) {
3834
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
3932
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
3933
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
3835
3934
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
3836
3935
 
3837
3936
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -3848,7 +3947,7 @@ switch (insn) {
3848
3947
  fprintf(f, " }\n");
3849
3948
 
3850
3949
  MAYBE_UNUSED(bool pc_moved_p) = false;
3851
- if (body->catch_except_p || TRUE) {
3950
+ if (true) {
3852
3951
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3853
3952
  pc_moved_p = true;
3854
3953
  }
@@ -3884,19 +3983,20 @@ switch (insn) {
3884
3983
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
3885
3984
 
3886
3985
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
3887
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
3888
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
3986
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
3987
+ fprintf(f, " calling.cc = cc;");
3988
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
3889
3989
  }
3890
3990
  else { // VM_METHOD_TYPE_ISEQ
3891
3991
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
3892
3992
  if (iseq->body->catch_except_p) {
3893
3993
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
3894
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
3994
+ fprintf(f, " val = vm_exec(ec, true);\n");
3895
3995
  }
3896
3996
  else {
3897
3997
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
3898
3998
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
3899
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
3999
+ fprintf(f, " val = vm_exec(ec, false);\n");
3900
4000
  fprintf(f, " }\n");
3901
4001
  }
3902
4002
  }
@@ -3932,7 +4032,7 @@ switch (insn) {
3932
4032
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
3933
4033
  fprintf(f, "\n");
3934
4034
  MAYBE_UNUSED(bool pc_moved_p) = false;
3935
- if (body->catch_except_p || TRUE) {
4035
+ if (true) {
3936
4036
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3937
4037
  pc_moved_p = true;
3938
4038
  }
@@ -3951,7 +4051,7 @@ switch (insn) {
3951
4051
  }
3952
4052
  fprintf(f, " {\n");
3953
4053
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
3954
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
4054
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
3955
4055
  fprintf(f, "\n");
3956
4056
  fprintf(f, " if (val == Qundef) {\n");
3957
4057
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -3975,8 +4075,8 @@ switch (insn) {
3975
4075
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
3976
4076
  }
3977
4077
  fprintf(f, "}\n");
3978
- break;
3979
- }
4078
+ break;
4079
+ }
3980
4080
  fprintf(f, "{\n");
3981
4081
  {
3982
4082
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -3992,7 +4092,7 @@ switch (insn) {
3992
4092
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
3993
4093
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
3994
4094
  MAYBE_UNUSED(bool pc_moved_p) = false;
3995
- if (body->catch_except_p || TRUE) {
4095
+ if (true) {
3996
4096
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
3997
4097
  pc_moved_p = true;
3998
4098
  }
@@ -4026,8 +4126,9 @@ switch (insn) {
4026
4126
  }
4027
4127
  fprintf(f, "}\n");
4028
4128
  break;
4029
- case BIN(opt_mod):
4030
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_mod))) {
4129
+ }
4130
+ case BIN(opt_mod): {
4131
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_mod))) {
4031
4132
  {
4032
4133
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
4033
4134
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -4042,7 +4143,8 @@ switch (insn) {
4042
4143
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
4043
4144
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
4044
4145
  )) {
4045
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
4146
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
4147
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
4046
4148
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
4047
4149
 
4048
4150
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -4059,7 +4161,7 @@ switch (insn) {
4059
4161
  fprintf(f, " }\n");
4060
4162
 
4061
4163
  MAYBE_UNUSED(bool pc_moved_p) = false;
4062
- if (body->catch_except_p || TRUE) {
4164
+ if (true) {
4063
4165
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4064
4166
  pc_moved_p = true;
4065
4167
  }
@@ -4095,19 +4197,20 @@ switch (insn) {
4095
4197
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
4096
4198
 
4097
4199
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
4098
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
4099
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
4200
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
4201
+ fprintf(f, " calling.cc = cc;");
4202
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
4100
4203
  }
4101
4204
  else { // VM_METHOD_TYPE_ISEQ
4102
4205
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
4103
4206
  if (iseq->body->catch_except_p) {
4104
4207
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
4105
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
4208
+ fprintf(f, " val = vm_exec(ec, true);\n");
4106
4209
  }
4107
4210
  else {
4108
4211
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
4109
4212
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
4110
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
4213
+ fprintf(f, " val = vm_exec(ec, false);\n");
4111
4214
  fprintf(f, " }\n");
4112
4215
  }
4113
4216
  }
@@ -4143,7 +4246,7 @@ switch (insn) {
4143
4246
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
4144
4247
  fprintf(f, "\n");
4145
4248
  MAYBE_UNUSED(bool pc_moved_p) = false;
4146
- if (body->catch_except_p || TRUE) {
4249
+ if (true) {
4147
4250
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4148
4251
  pc_moved_p = true;
4149
4252
  }
@@ -4162,7 +4265,7 @@ switch (insn) {
4162
4265
  }
4163
4266
  fprintf(f, " {\n");
4164
4267
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
4165
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
4268
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
4166
4269
  fprintf(f, "\n");
4167
4270
  fprintf(f, " if (val == Qundef) {\n");
4168
4271
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -4186,8 +4289,8 @@ switch (insn) {
4186
4289
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
4187
4290
  }
4188
4291
  fprintf(f, "}\n");
4189
- break;
4190
- }
4292
+ break;
4293
+ }
4191
4294
  fprintf(f, "{\n");
4192
4295
  {
4193
4296
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -4203,7 +4306,7 @@ switch (insn) {
4203
4306
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
4204
4307
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
4205
4308
  MAYBE_UNUSED(bool pc_moved_p) = false;
4206
- if (body->catch_except_p || TRUE) {
4309
+ if (true) {
4207
4310
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4208
4311
  pc_moved_p = true;
4209
4312
  }
@@ -4237,8 +4340,9 @@ switch (insn) {
4237
4340
  }
4238
4341
  fprintf(f, "}\n");
4239
4342
  break;
4240
- case BIN(opt_eq):
4241
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_eq))) {
4343
+ }
4344
+ case BIN(opt_eq): {
4345
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_eq))) {
4242
4346
  {
4243
4347
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
4244
4348
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -4253,7 +4357,8 @@ switch (insn) {
4253
4357
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
4254
4358
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
4255
4359
  )) {
4256
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
4360
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
4361
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
4257
4362
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
4258
4363
 
4259
4364
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -4270,7 +4375,7 @@ switch (insn) {
4270
4375
  fprintf(f, " }\n");
4271
4376
 
4272
4377
  MAYBE_UNUSED(bool pc_moved_p) = false;
4273
- if (body->catch_except_p || TRUE) {
4378
+ if (true) {
4274
4379
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4275
4380
  pc_moved_p = true;
4276
4381
  }
@@ -4306,19 +4411,20 @@ switch (insn) {
4306
4411
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
4307
4412
 
4308
4413
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
4309
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
4310
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
4414
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
4415
+ fprintf(f, " calling.cc = cc;");
4416
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
4311
4417
  }
4312
4418
  else { // VM_METHOD_TYPE_ISEQ
4313
4419
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
4314
4420
  if (iseq->body->catch_except_p) {
4315
4421
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
4316
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
4422
+ fprintf(f, " val = vm_exec(ec, true);\n");
4317
4423
  }
4318
4424
  else {
4319
4425
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
4320
4426
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
4321
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
4427
+ fprintf(f, " val = vm_exec(ec, false);\n");
4322
4428
  fprintf(f, " }\n");
4323
4429
  }
4324
4430
  }
@@ -4354,7 +4460,7 @@ switch (insn) {
4354
4460
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
4355
4461
  fprintf(f, "\n");
4356
4462
  MAYBE_UNUSED(bool pc_moved_p) = false;
4357
- if (body->catch_except_p || TRUE) {
4463
+ if (true) {
4358
4464
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4359
4465
  pc_moved_p = true;
4360
4466
  }
@@ -4373,7 +4479,7 @@ switch (insn) {
4373
4479
  }
4374
4480
  fprintf(f, " {\n");
4375
4481
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
4376
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
4482
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
4377
4483
  fprintf(f, "\n");
4378
4484
  fprintf(f, " if (val == Qundef) {\n");
4379
4485
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -4397,8 +4503,8 @@ switch (insn) {
4397
4503
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
4398
4504
  }
4399
4505
  fprintf(f, "}\n");
4400
- break;
4401
- }
4506
+ break;
4507
+ }
4402
4508
  fprintf(f, "{\n");
4403
4509
  {
4404
4510
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -4414,7 +4520,7 @@ switch (insn) {
4414
4520
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
4415
4521
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
4416
4522
  MAYBE_UNUSED(bool pc_moved_p) = false;
4417
- if (body->catch_except_p || FALSE) {
4523
+ if (false) {
4418
4524
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4419
4525
  pc_moved_p = true;
4420
4526
  }
@@ -4440,7 +4546,8 @@ switch (insn) {
4440
4546
  }
4441
4547
  fprintf(f, "}\n");
4442
4548
  break;
4443
- case BIN(opt_neq):
4549
+ }
4550
+ case BIN(opt_neq): {
4444
4551
  fprintf(f, "{\n");
4445
4552
  {
4446
4553
  MAYBE_UNUSED(CALL_DATA cd_eq) = (CALL_DATA)operands[0];
@@ -4460,7 +4567,7 @@ switch (insn) {
4460
4567
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
4461
4568
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
4462
4569
  MAYBE_UNUSED(bool pc_moved_p) = false;
4463
- if (body->catch_except_p || FALSE) {
4570
+ if (false) {
4464
4571
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4465
4572
  pc_moved_p = true;
4466
4573
  }
@@ -4486,8 +4593,9 @@ switch (insn) {
4486
4593
  }
4487
4594
  fprintf(f, "}\n");
4488
4595
  break;
4489
- case BIN(opt_lt):
4490
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_lt))) {
4596
+ }
4597
+ case BIN(opt_lt): {
4598
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_lt))) {
4491
4599
  {
4492
4600
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
4493
4601
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -4502,7 +4610,8 @@ switch (insn) {
4502
4610
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
4503
4611
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
4504
4612
  )) {
4505
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
4613
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
4614
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
4506
4615
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
4507
4616
 
4508
4617
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -4519,7 +4628,7 @@ switch (insn) {
4519
4628
  fprintf(f, " }\n");
4520
4629
 
4521
4630
  MAYBE_UNUSED(bool pc_moved_p) = false;
4522
- if (body->catch_except_p || TRUE) {
4631
+ if (true) {
4523
4632
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4524
4633
  pc_moved_p = true;
4525
4634
  }
@@ -4555,19 +4664,20 @@ switch (insn) {
4555
4664
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
4556
4665
 
4557
4666
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
4558
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
4559
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
4667
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
4668
+ fprintf(f, " calling.cc = cc;");
4669
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
4560
4670
  }
4561
4671
  else { // VM_METHOD_TYPE_ISEQ
4562
4672
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
4563
4673
  if (iseq->body->catch_except_p) {
4564
4674
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
4565
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
4675
+ fprintf(f, " val = vm_exec(ec, true);\n");
4566
4676
  }
4567
4677
  else {
4568
4678
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
4569
4679
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
4570
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
4680
+ fprintf(f, " val = vm_exec(ec, false);\n");
4571
4681
  fprintf(f, " }\n");
4572
4682
  }
4573
4683
  }
@@ -4603,7 +4713,7 @@ switch (insn) {
4603
4713
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
4604
4714
  fprintf(f, "\n");
4605
4715
  MAYBE_UNUSED(bool pc_moved_p) = false;
4606
- if (body->catch_except_p || TRUE) {
4716
+ if (true) {
4607
4717
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4608
4718
  pc_moved_p = true;
4609
4719
  }
@@ -4622,7 +4732,7 @@ switch (insn) {
4622
4732
  }
4623
4733
  fprintf(f, " {\n");
4624
4734
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
4625
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
4735
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
4626
4736
  fprintf(f, "\n");
4627
4737
  fprintf(f, " if (val == Qundef) {\n");
4628
4738
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -4646,8 +4756,8 @@ switch (insn) {
4646
4756
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
4647
4757
  }
4648
4758
  fprintf(f, "}\n");
4649
- break;
4650
- }
4759
+ break;
4760
+ }
4651
4761
  fprintf(f, "{\n");
4652
4762
  {
4653
4763
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -4663,7 +4773,7 @@ switch (insn) {
4663
4773
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
4664
4774
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
4665
4775
  MAYBE_UNUSED(bool pc_moved_p) = false;
4666
- if (body->catch_except_p || FALSE) {
4776
+ if (false) {
4667
4777
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4668
4778
  pc_moved_p = true;
4669
4779
  }
@@ -4689,8 +4799,9 @@ switch (insn) {
4689
4799
  }
4690
4800
  fprintf(f, "}\n");
4691
4801
  break;
4692
- case BIN(opt_le):
4693
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_le))) {
4802
+ }
4803
+ case BIN(opt_le): {
4804
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_le))) {
4694
4805
  {
4695
4806
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
4696
4807
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -4705,7 +4816,8 @@ switch (insn) {
4705
4816
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
4706
4817
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
4707
4818
  )) {
4708
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
4819
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
4820
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
4709
4821
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
4710
4822
 
4711
4823
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -4722,7 +4834,7 @@ switch (insn) {
4722
4834
  fprintf(f, " }\n");
4723
4835
 
4724
4836
  MAYBE_UNUSED(bool pc_moved_p) = false;
4725
- if (body->catch_except_p || TRUE) {
4837
+ if (true) {
4726
4838
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4727
4839
  pc_moved_p = true;
4728
4840
  }
@@ -4758,19 +4870,20 @@ switch (insn) {
4758
4870
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
4759
4871
 
4760
4872
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
4761
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
4762
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
4873
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
4874
+ fprintf(f, " calling.cc = cc;");
4875
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
4763
4876
  }
4764
4877
  else { // VM_METHOD_TYPE_ISEQ
4765
4878
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
4766
4879
  if (iseq->body->catch_except_p) {
4767
4880
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
4768
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
4881
+ fprintf(f, " val = vm_exec(ec, true);\n");
4769
4882
  }
4770
4883
  else {
4771
4884
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
4772
4885
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
4773
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
4886
+ fprintf(f, " val = vm_exec(ec, false);\n");
4774
4887
  fprintf(f, " }\n");
4775
4888
  }
4776
4889
  }
@@ -4806,7 +4919,7 @@ switch (insn) {
4806
4919
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
4807
4920
  fprintf(f, "\n");
4808
4921
  MAYBE_UNUSED(bool pc_moved_p) = false;
4809
- if (body->catch_except_p || TRUE) {
4922
+ if (true) {
4810
4923
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4811
4924
  pc_moved_p = true;
4812
4925
  }
@@ -4825,7 +4938,7 @@ switch (insn) {
4825
4938
  }
4826
4939
  fprintf(f, " {\n");
4827
4940
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
4828
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
4941
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
4829
4942
  fprintf(f, "\n");
4830
4943
  fprintf(f, " if (val == Qundef) {\n");
4831
4944
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -4849,8 +4962,8 @@ switch (insn) {
4849
4962
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
4850
4963
  }
4851
4964
  fprintf(f, "}\n");
4852
- break;
4853
- }
4965
+ break;
4966
+ }
4854
4967
  fprintf(f, "{\n");
4855
4968
  {
4856
4969
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -4866,7 +4979,7 @@ switch (insn) {
4866
4979
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
4867
4980
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
4868
4981
  MAYBE_UNUSED(bool pc_moved_p) = false;
4869
- if (body->catch_except_p || FALSE) {
4982
+ if (false) {
4870
4983
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4871
4984
  pc_moved_p = true;
4872
4985
  }
@@ -4892,8 +5005,9 @@ switch (insn) {
4892
5005
  }
4893
5006
  fprintf(f, "}\n");
4894
5007
  break;
4895
- case BIN(opt_gt):
4896
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_gt))) {
5008
+ }
5009
+ case BIN(opt_gt): {
5010
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_gt))) {
4897
5011
  {
4898
5012
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
4899
5013
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -4908,7 +5022,8 @@ switch (insn) {
4908
5022
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
4909
5023
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
4910
5024
  )) {
4911
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
5025
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
5026
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
4912
5027
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
4913
5028
 
4914
5029
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -4925,7 +5040,7 @@ switch (insn) {
4925
5040
  fprintf(f, " }\n");
4926
5041
 
4927
5042
  MAYBE_UNUSED(bool pc_moved_p) = false;
4928
- if (body->catch_except_p || TRUE) {
5043
+ if (true) {
4929
5044
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
4930
5045
  pc_moved_p = true;
4931
5046
  }
@@ -4961,19 +5076,20 @@ switch (insn) {
4961
5076
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
4962
5077
 
4963
5078
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
4964
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
4965
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
5079
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
5080
+ fprintf(f, " calling.cc = cc;");
5081
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
4966
5082
  }
4967
5083
  else { // VM_METHOD_TYPE_ISEQ
4968
5084
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
4969
5085
  if (iseq->body->catch_except_p) {
4970
5086
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
4971
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
5087
+ fprintf(f, " val = vm_exec(ec, true);\n");
4972
5088
  }
4973
5089
  else {
4974
5090
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
4975
5091
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
4976
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
5092
+ fprintf(f, " val = vm_exec(ec, false);\n");
4977
5093
  fprintf(f, " }\n");
4978
5094
  }
4979
5095
  }
@@ -5009,7 +5125,7 @@ switch (insn) {
5009
5125
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
5010
5126
  fprintf(f, "\n");
5011
5127
  MAYBE_UNUSED(bool pc_moved_p) = false;
5012
- if (body->catch_except_p || TRUE) {
5128
+ if (true) {
5013
5129
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5014
5130
  pc_moved_p = true;
5015
5131
  }
@@ -5028,7 +5144,7 @@ switch (insn) {
5028
5144
  }
5029
5145
  fprintf(f, " {\n");
5030
5146
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
5031
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
5147
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
5032
5148
  fprintf(f, "\n");
5033
5149
  fprintf(f, " if (val == Qundef) {\n");
5034
5150
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -5052,8 +5168,8 @@ switch (insn) {
5052
5168
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
5053
5169
  }
5054
5170
  fprintf(f, "}\n");
5055
- break;
5056
- }
5171
+ break;
5172
+ }
5057
5173
  fprintf(f, "{\n");
5058
5174
  {
5059
5175
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -5069,7 +5185,7 @@ switch (insn) {
5069
5185
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
5070
5186
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
5071
5187
  MAYBE_UNUSED(bool pc_moved_p) = false;
5072
- if (body->catch_except_p || FALSE) {
5188
+ if (false) {
5073
5189
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5074
5190
  pc_moved_p = true;
5075
5191
  }
@@ -5095,8 +5211,9 @@ switch (insn) {
5095
5211
  }
5096
5212
  fprintf(f, "}\n");
5097
5213
  break;
5098
- case BIN(opt_ge):
5099
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_ge))) {
5214
+ }
5215
+ case BIN(opt_ge): {
5216
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_ge))) {
5100
5217
  {
5101
5218
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
5102
5219
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -5111,7 +5228,8 @@ switch (insn) {
5111
5228
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
5112
5229
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
5113
5230
  )) {
5114
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
5231
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
5232
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
5115
5233
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
5116
5234
 
5117
5235
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -5128,7 +5246,7 @@ switch (insn) {
5128
5246
  fprintf(f, " }\n");
5129
5247
 
5130
5248
  MAYBE_UNUSED(bool pc_moved_p) = false;
5131
- if (body->catch_except_p || TRUE) {
5249
+ if (true) {
5132
5250
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5133
5251
  pc_moved_p = true;
5134
5252
  }
@@ -5164,19 +5282,20 @@ switch (insn) {
5164
5282
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
5165
5283
 
5166
5284
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
5167
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
5168
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
5285
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
5286
+ fprintf(f, " calling.cc = cc;");
5287
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
5169
5288
  }
5170
5289
  else { // VM_METHOD_TYPE_ISEQ
5171
5290
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
5172
5291
  if (iseq->body->catch_except_p) {
5173
5292
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
5174
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
5293
+ fprintf(f, " val = vm_exec(ec, true);\n");
5175
5294
  }
5176
5295
  else {
5177
5296
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
5178
5297
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
5179
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
5298
+ fprintf(f, " val = vm_exec(ec, false);\n");
5180
5299
  fprintf(f, " }\n");
5181
5300
  }
5182
5301
  }
@@ -5212,7 +5331,7 @@ switch (insn) {
5212
5331
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
5213
5332
  fprintf(f, "\n");
5214
5333
  MAYBE_UNUSED(bool pc_moved_p) = false;
5215
- if (body->catch_except_p || TRUE) {
5334
+ if (true) {
5216
5335
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5217
5336
  pc_moved_p = true;
5218
5337
  }
@@ -5231,7 +5350,7 @@ switch (insn) {
5231
5350
  }
5232
5351
  fprintf(f, " {\n");
5233
5352
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
5234
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
5353
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
5235
5354
  fprintf(f, "\n");
5236
5355
  fprintf(f, " if (val == Qundef) {\n");
5237
5356
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -5255,8 +5374,8 @@ switch (insn) {
5255
5374
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
5256
5375
  }
5257
5376
  fprintf(f, "}\n");
5258
- break;
5259
- }
5377
+ break;
5378
+ }
5260
5379
  fprintf(f, "{\n");
5261
5380
  {
5262
5381
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -5272,7 +5391,7 @@ switch (insn) {
5272
5391
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
5273
5392
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
5274
5393
  MAYBE_UNUSED(bool pc_moved_p) = false;
5275
- if (body->catch_except_p || FALSE) {
5394
+ if (false) {
5276
5395
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5277
5396
  pc_moved_p = true;
5278
5397
  }
@@ -5298,8 +5417,9 @@ switch (insn) {
5298
5417
  }
5299
5418
  fprintf(f, "}\n");
5300
5419
  break;
5301
- case BIN(opt_ltlt):
5302
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_ltlt))) {
5420
+ }
5421
+ case BIN(opt_ltlt): {
5422
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_ltlt))) {
5303
5423
  {
5304
5424
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
5305
5425
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -5314,7 +5434,8 @@ switch (insn) {
5314
5434
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
5315
5435
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
5316
5436
  )) {
5317
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
5437
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
5438
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
5318
5439
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
5319
5440
 
5320
5441
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -5331,7 +5452,7 @@ switch (insn) {
5331
5452
  fprintf(f, " }\n");
5332
5453
 
5333
5454
  MAYBE_UNUSED(bool pc_moved_p) = false;
5334
- if (body->catch_except_p || TRUE) {
5455
+ if (true) {
5335
5456
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5336
5457
  pc_moved_p = true;
5337
5458
  }
@@ -5367,19 +5488,20 @@ switch (insn) {
5367
5488
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
5368
5489
 
5369
5490
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
5370
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
5371
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
5491
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
5492
+ fprintf(f, " calling.cc = cc;");
5493
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
5372
5494
  }
5373
5495
  else { // VM_METHOD_TYPE_ISEQ
5374
5496
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
5375
5497
  if (iseq->body->catch_except_p) {
5376
5498
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
5377
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
5499
+ fprintf(f, " val = vm_exec(ec, true);\n");
5378
5500
  }
5379
5501
  else {
5380
5502
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
5381
5503
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
5382
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
5504
+ fprintf(f, " val = vm_exec(ec, false);\n");
5383
5505
  fprintf(f, " }\n");
5384
5506
  }
5385
5507
  }
@@ -5415,7 +5537,7 @@ switch (insn) {
5415
5537
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
5416
5538
  fprintf(f, "\n");
5417
5539
  MAYBE_UNUSED(bool pc_moved_p) = false;
5418
- if (body->catch_except_p || TRUE) {
5540
+ if (true) {
5419
5541
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5420
5542
  pc_moved_p = true;
5421
5543
  }
@@ -5434,7 +5556,7 @@ switch (insn) {
5434
5556
  }
5435
5557
  fprintf(f, " {\n");
5436
5558
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
5437
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
5559
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
5438
5560
  fprintf(f, "\n");
5439
5561
  fprintf(f, " if (val == Qundef) {\n");
5440
5562
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -5458,8 +5580,8 @@ switch (insn) {
5458
5580
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
5459
5581
  }
5460
5582
  fprintf(f, "}\n");
5461
- break;
5462
- }
5583
+ break;
5584
+ }
5463
5585
  fprintf(f, "{\n");
5464
5586
  {
5465
5587
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -5475,7 +5597,7 @@ switch (insn) {
5475
5597
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
5476
5598
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
5477
5599
  MAYBE_UNUSED(bool pc_moved_p) = false;
5478
- if (body->catch_except_p || TRUE) {
5600
+ if (true) {
5479
5601
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5480
5602
  pc_moved_p = true;
5481
5603
  }
@@ -5509,8 +5631,9 @@ switch (insn) {
5509
5631
  }
5510
5632
  fprintf(f, "}\n");
5511
5633
  break;
5512
- case BIN(opt_and):
5513
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_and))) {
5634
+ }
5635
+ case BIN(opt_and): {
5636
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_and))) {
5514
5637
  {
5515
5638
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
5516
5639
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -5525,7 +5648,8 @@ switch (insn) {
5525
5648
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
5526
5649
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
5527
5650
  )) {
5528
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
5651
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
5652
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
5529
5653
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
5530
5654
 
5531
5655
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -5542,7 +5666,7 @@ switch (insn) {
5542
5666
  fprintf(f, " }\n");
5543
5667
 
5544
5668
  MAYBE_UNUSED(bool pc_moved_p) = false;
5545
- if (body->catch_except_p || TRUE) {
5669
+ if (true) {
5546
5670
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5547
5671
  pc_moved_p = true;
5548
5672
  }
@@ -5578,19 +5702,20 @@ switch (insn) {
5578
5702
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
5579
5703
 
5580
5704
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
5581
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
5582
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
5705
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
5706
+ fprintf(f, " calling.cc = cc;");
5707
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
5583
5708
  }
5584
5709
  else { // VM_METHOD_TYPE_ISEQ
5585
5710
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
5586
5711
  if (iseq->body->catch_except_p) {
5587
5712
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
5588
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
5713
+ fprintf(f, " val = vm_exec(ec, true);\n");
5589
5714
  }
5590
5715
  else {
5591
5716
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
5592
5717
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
5593
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
5718
+ fprintf(f, " val = vm_exec(ec, false);\n");
5594
5719
  fprintf(f, " }\n");
5595
5720
  }
5596
5721
  }
@@ -5626,7 +5751,7 @@ switch (insn) {
5626
5751
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
5627
5752
  fprintf(f, "\n");
5628
5753
  MAYBE_UNUSED(bool pc_moved_p) = false;
5629
- if (body->catch_except_p || TRUE) {
5754
+ if (true) {
5630
5755
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5631
5756
  pc_moved_p = true;
5632
5757
  }
@@ -5645,7 +5770,7 @@ switch (insn) {
5645
5770
  }
5646
5771
  fprintf(f, " {\n");
5647
5772
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
5648
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
5773
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
5649
5774
  fprintf(f, "\n");
5650
5775
  fprintf(f, " if (val == Qundef) {\n");
5651
5776
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -5669,8 +5794,8 @@ switch (insn) {
5669
5794
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
5670
5795
  }
5671
5796
  fprintf(f, "}\n");
5672
- break;
5673
- }
5797
+ break;
5798
+ }
5674
5799
  fprintf(f, "{\n");
5675
5800
  {
5676
5801
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -5686,7 +5811,7 @@ switch (insn) {
5686
5811
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
5687
5812
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
5688
5813
  MAYBE_UNUSED(bool pc_moved_p) = false;
5689
- if (body->catch_except_p || FALSE) {
5814
+ if (false) {
5690
5815
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5691
5816
  pc_moved_p = true;
5692
5817
  }
@@ -5712,8 +5837,9 @@ switch (insn) {
5712
5837
  }
5713
5838
  fprintf(f, "}\n");
5714
5839
  break;
5715
- case BIN(opt_or):
5716
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_or))) {
5840
+ }
5841
+ case BIN(opt_or): {
5842
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_or))) {
5717
5843
  {
5718
5844
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
5719
5845
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -5728,7 +5854,8 @@ switch (insn) {
5728
5854
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
5729
5855
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
5730
5856
  )) {
5731
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
5857
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
5858
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
5732
5859
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
5733
5860
 
5734
5861
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -5745,7 +5872,7 @@ switch (insn) {
5745
5872
  fprintf(f, " }\n");
5746
5873
 
5747
5874
  MAYBE_UNUSED(bool pc_moved_p) = false;
5748
- if (body->catch_except_p || TRUE) {
5875
+ if (true) {
5749
5876
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5750
5877
  pc_moved_p = true;
5751
5878
  }
@@ -5781,19 +5908,20 @@ switch (insn) {
5781
5908
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
5782
5909
 
5783
5910
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
5784
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
5785
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
5911
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
5912
+ fprintf(f, " calling.cc = cc;");
5913
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
5786
5914
  }
5787
5915
  else { // VM_METHOD_TYPE_ISEQ
5788
5916
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
5789
5917
  if (iseq->body->catch_except_p) {
5790
5918
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
5791
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
5919
+ fprintf(f, " val = vm_exec(ec, true);\n");
5792
5920
  }
5793
5921
  else {
5794
5922
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
5795
5923
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
5796
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
5924
+ fprintf(f, " val = vm_exec(ec, false);\n");
5797
5925
  fprintf(f, " }\n");
5798
5926
  }
5799
5927
  }
@@ -5829,7 +5957,7 @@ switch (insn) {
5829
5957
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
5830
5958
  fprintf(f, "\n");
5831
5959
  MAYBE_UNUSED(bool pc_moved_p) = false;
5832
- if (body->catch_except_p || TRUE) {
5960
+ if (true) {
5833
5961
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5834
5962
  pc_moved_p = true;
5835
5963
  }
@@ -5848,7 +5976,7 @@ switch (insn) {
5848
5976
  }
5849
5977
  fprintf(f, " {\n");
5850
5978
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
5851
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
5979
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
5852
5980
  fprintf(f, "\n");
5853
5981
  fprintf(f, " if (val == Qundef) {\n");
5854
5982
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -5872,8 +6000,8 @@ switch (insn) {
5872
6000
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
5873
6001
  }
5874
6002
  fprintf(f, "}\n");
5875
- break;
5876
- }
6003
+ break;
6004
+ }
5877
6005
  fprintf(f, "{\n");
5878
6006
  {
5879
6007
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -5889,7 +6017,7 @@ switch (insn) {
5889
6017
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
5890
6018
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
5891
6019
  MAYBE_UNUSED(bool pc_moved_p) = false;
5892
- if (body->catch_except_p || FALSE) {
6020
+ if (false) {
5893
6021
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5894
6022
  pc_moved_p = true;
5895
6023
  }
@@ -5915,8 +6043,9 @@ switch (insn) {
5915
6043
  }
5916
6044
  fprintf(f, "}\n");
5917
6045
  break;
5918
- case BIN(opt_aref):
5919
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_aref))) {
6046
+ }
6047
+ case BIN(opt_aref): {
6048
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_aref))) {
5920
6049
  {
5921
6050
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
5922
6051
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -5931,7 +6060,8 @@ switch (insn) {
5931
6060
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
5932
6061
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
5933
6062
  )) {
5934
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
6063
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
6064
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
5935
6065
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
5936
6066
 
5937
6067
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -5948,7 +6078,7 @@ switch (insn) {
5948
6078
  fprintf(f, " }\n");
5949
6079
 
5950
6080
  MAYBE_UNUSED(bool pc_moved_p) = false;
5951
- if (body->catch_except_p || TRUE) {
6081
+ if (true) {
5952
6082
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
5953
6083
  pc_moved_p = true;
5954
6084
  }
@@ -5984,19 +6114,20 @@ switch (insn) {
5984
6114
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
5985
6115
 
5986
6116
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
5987
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
5988
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
6117
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
6118
+ fprintf(f, " calling.cc = cc;");
6119
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
5989
6120
  }
5990
6121
  else { // VM_METHOD_TYPE_ISEQ
5991
6122
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
5992
6123
  if (iseq->body->catch_except_p) {
5993
6124
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
5994
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
6125
+ fprintf(f, " val = vm_exec(ec, true);\n");
5995
6126
  }
5996
6127
  else {
5997
6128
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
5998
6129
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
5999
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
6130
+ fprintf(f, " val = vm_exec(ec, false);\n");
6000
6131
  fprintf(f, " }\n");
6001
6132
  }
6002
6133
  }
@@ -6032,7 +6163,7 @@ switch (insn) {
6032
6163
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
6033
6164
  fprintf(f, "\n");
6034
6165
  MAYBE_UNUSED(bool pc_moved_p) = false;
6035
- if (body->catch_except_p || TRUE) {
6166
+ if (true) {
6036
6167
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6037
6168
  pc_moved_p = true;
6038
6169
  }
@@ -6051,7 +6182,7 @@ switch (insn) {
6051
6182
  }
6052
6183
  fprintf(f, " {\n");
6053
6184
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
6054
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
6185
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
6055
6186
  fprintf(f, "\n");
6056
6187
  fprintf(f, " if (val == Qundef) {\n");
6057
6188
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -6075,8 +6206,8 @@ switch (insn) {
6075
6206
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
6076
6207
  }
6077
6208
  fprintf(f, "}\n");
6078
- break;
6079
- }
6209
+ break;
6210
+ }
6080
6211
  fprintf(f, "{\n");
6081
6212
  {
6082
6213
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -6092,7 +6223,7 @@ switch (insn) {
6092
6223
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
6093
6224
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 1);
6094
6225
  MAYBE_UNUSED(bool pc_moved_p) = false;
6095
- if (body->catch_except_p || TRUE) {
6226
+ if (true) {
6096
6227
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6097
6228
  pc_moved_p = true;
6098
6229
  }
@@ -6126,8 +6257,9 @@ switch (insn) {
6126
6257
  }
6127
6258
  fprintf(f, "}\n");
6128
6259
  break;
6129
- case BIN(opt_aset):
6130
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_aset))) {
6260
+ }
6261
+ case BIN(opt_aset): {
6262
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_aset))) {
6131
6263
  {
6132
6264
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
6133
6265
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -6142,7 +6274,8 @@ switch (insn) {
6142
6274
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
6143
6275
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
6144
6276
  )) {
6145
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
6277
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
6278
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
6146
6279
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
6147
6280
 
6148
6281
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -6159,7 +6292,7 @@ switch (insn) {
6159
6292
  fprintf(f, " }\n");
6160
6293
 
6161
6294
  MAYBE_UNUSED(bool pc_moved_p) = false;
6162
- if (body->catch_except_p || TRUE) {
6295
+ if (true) {
6163
6296
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6164
6297
  pc_moved_p = true;
6165
6298
  }
@@ -6195,19 +6328,20 @@ switch (insn) {
6195
6328
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
6196
6329
 
6197
6330
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
6198
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
6199
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
6331
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
6332
+ fprintf(f, " calling.cc = cc;");
6333
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
6200
6334
  }
6201
6335
  else { // VM_METHOD_TYPE_ISEQ
6202
6336
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
6203
6337
  if (iseq->body->catch_except_p) {
6204
6338
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
6205
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
6339
+ fprintf(f, " val = vm_exec(ec, true);\n");
6206
6340
  }
6207
6341
  else {
6208
6342
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
6209
6343
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
6210
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
6344
+ fprintf(f, " val = vm_exec(ec, false);\n");
6211
6345
  fprintf(f, " }\n");
6212
6346
  }
6213
6347
  }
@@ -6243,7 +6377,7 @@ switch (insn) {
6243
6377
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
6244
6378
  fprintf(f, "\n");
6245
6379
  MAYBE_UNUSED(bool pc_moved_p) = false;
6246
- if (body->catch_except_p || TRUE) {
6380
+ if (true) {
6247
6381
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6248
6382
  pc_moved_p = true;
6249
6383
  }
@@ -6262,7 +6396,7 @@ switch (insn) {
6262
6396
  }
6263
6397
  fprintf(f, " {\n");
6264
6398
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
6265
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
6399
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
6266
6400
  fprintf(f, "\n");
6267
6401
  fprintf(f, " if (val == Qundef) {\n");
6268
6402
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -6286,8 +6420,8 @@ switch (insn) {
6286
6420
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
6287
6421
  }
6288
6422
  fprintf(f, "}\n");
6289
- break;
6290
- }
6423
+ break;
6424
+ }
6291
6425
  fprintf(f, "{\n");
6292
6426
  {
6293
6427
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -6304,7 +6438,7 @@ switch (insn) {
6304
6438
  fprintf(f, " obj = stack[%d];\n", b->stack_size - 2);
6305
6439
  fprintf(f, " set = stack[%d];\n", b->stack_size - 1);
6306
6440
  MAYBE_UNUSED(bool pc_moved_p) = false;
6307
- if (body->catch_except_p || TRUE) {
6441
+ if (true) {
6308
6442
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6309
6443
  pc_moved_p = true;
6310
6444
  }
@@ -6338,7 +6472,8 @@ switch (insn) {
6338
6472
  }
6339
6473
  fprintf(f, "}\n");
6340
6474
  break;
6341
- case BIN(opt_aset_with):
6475
+ }
6476
+ case BIN(opt_aset_with): {
6342
6477
  fprintf(f, "{\n");
6343
6478
  {
6344
6479
  MAYBE_UNUSED(VALUE key) = (VALUE)operands[0];
@@ -6358,7 +6493,7 @@ switch (insn) {
6358
6493
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 2);
6359
6494
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
6360
6495
  MAYBE_UNUSED(bool pc_moved_p) = false;
6361
- if (body->catch_except_p || TRUE) {
6496
+ if (true) {
6362
6497
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6363
6498
  pc_moved_p = true;
6364
6499
  }
@@ -6400,7 +6535,8 @@ switch (insn) {
6400
6535
  }
6401
6536
  fprintf(f, "}\n");
6402
6537
  break;
6403
- case BIN(opt_aref_with):
6538
+ }
6539
+ case BIN(opt_aref_with): {
6404
6540
  fprintf(f, "{\n");
6405
6541
  {
6406
6542
  MAYBE_UNUSED(VALUE key) = (VALUE)operands[0];
@@ -6419,7 +6555,7 @@ switch (insn) {
6419
6555
  fprintf(f, "\n");
6420
6556
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 1);
6421
6557
  MAYBE_UNUSED(bool pc_moved_p) = false;
6422
- if (body->catch_except_p || TRUE) {
6558
+ if (true) {
6423
6559
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6424
6560
  pc_moved_p = true;
6425
6561
  }
@@ -6456,8 +6592,9 @@ switch (insn) {
6456
6592
  }
6457
6593
  fprintf(f, "}\n");
6458
6594
  break;
6459
- case BIN(opt_length):
6460
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_length))) {
6595
+ }
6596
+ case BIN(opt_length): {
6597
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_length))) {
6461
6598
  {
6462
6599
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
6463
6600
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -6472,7 +6609,8 @@ switch (insn) {
6472
6609
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
6473
6610
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
6474
6611
  )) {
6475
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
6612
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
6613
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
6476
6614
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
6477
6615
 
6478
6616
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -6489,7 +6627,7 @@ switch (insn) {
6489
6627
  fprintf(f, " }\n");
6490
6628
 
6491
6629
  MAYBE_UNUSED(bool pc_moved_p) = false;
6492
- if (body->catch_except_p || TRUE) {
6630
+ if (true) {
6493
6631
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6494
6632
  pc_moved_p = true;
6495
6633
  }
@@ -6525,19 +6663,20 @@ switch (insn) {
6525
6663
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
6526
6664
 
6527
6665
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
6528
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
6529
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
6666
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
6667
+ fprintf(f, " calling.cc = cc;");
6668
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
6530
6669
  }
6531
6670
  else { // VM_METHOD_TYPE_ISEQ
6532
6671
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
6533
6672
  if (iseq->body->catch_except_p) {
6534
6673
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
6535
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
6674
+ fprintf(f, " val = vm_exec(ec, true);\n");
6536
6675
  }
6537
6676
  else {
6538
6677
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
6539
6678
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
6540
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
6679
+ fprintf(f, " val = vm_exec(ec, false);\n");
6541
6680
  fprintf(f, " }\n");
6542
6681
  }
6543
6682
  }
@@ -6573,7 +6712,7 @@ switch (insn) {
6573
6712
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
6574
6713
  fprintf(f, "\n");
6575
6714
  MAYBE_UNUSED(bool pc_moved_p) = false;
6576
- if (body->catch_except_p || TRUE) {
6715
+ if (true) {
6577
6716
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6578
6717
  pc_moved_p = true;
6579
6718
  }
@@ -6592,7 +6731,7 @@ switch (insn) {
6592
6731
  }
6593
6732
  fprintf(f, " {\n");
6594
6733
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
6595
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
6734
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
6596
6735
  fprintf(f, "\n");
6597
6736
  fprintf(f, " if (val == Qundef) {\n");
6598
6737
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -6616,8 +6755,8 @@ switch (insn) {
6616
6755
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
6617
6756
  }
6618
6757
  fprintf(f, "}\n");
6619
- break;
6620
- }
6758
+ break;
6759
+ }
6621
6760
  fprintf(f, "{\n");
6622
6761
  {
6623
6762
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -6632,7 +6771,7 @@ switch (insn) {
6632
6771
  fprintf(f, "\n");
6633
6772
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 1);
6634
6773
  MAYBE_UNUSED(bool pc_moved_p) = false;
6635
- if (body->catch_except_p || FALSE) {
6774
+ if (false) {
6636
6775
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6637
6776
  pc_moved_p = true;
6638
6777
  }
@@ -6658,8 +6797,9 @@ switch (insn) {
6658
6797
  }
6659
6798
  fprintf(f, "}\n");
6660
6799
  break;
6661
- case BIN(opt_size):
6662
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_size))) {
6800
+ }
6801
+ case BIN(opt_size): {
6802
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_size))) {
6663
6803
  {
6664
6804
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
6665
6805
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -6674,7 +6814,8 @@ switch (insn) {
6674
6814
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
6675
6815
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
6676
6816
  )) {
6677
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
6817
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
6818
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
6678
6819
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
6679
6820
 
6680
6821
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -6691,7 +6832,7 @@ switch (insn) {
6691
6832
  fprintf(f, " }\n");
6692
6833
 
6693
6834
  MAYBE_UNUSED(bool pc_moved_p) = false;
6694
- if (body->catch_except_p || TRUE) {
6835
+ if (true) {
6695
6836
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6696
6837
  pc_moved_p = true;
6697
6838
  }
@@ -6727,19 +6868,20 @@ switch (insn) {
6727
6868
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
6728
6869
 
6729
6870
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
6730
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
6731
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
6871
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
6872
+ fprintf(f, " calling.cc = cc;");
6873
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
6732
6874
  }
6733
6875
  else { // VM_METHOD_TYPE_ISEQ
6734
6876
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
6735
6877
  if (iseq->body->catch_except_p) {
6736
6878
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
6737
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
6879
+ fprintf(f, " val = vm_exec(ec, true);\n");
6738
6880
  }
6739
6881
  else {
6740
6882
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
6741
6883
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
6742
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
6884
+ fprintf(f, " val = vm_exec(ec, false);\n");
6743
6885
  fprintf(f, " }\n");
6744
6886
  }
6745
6887
  }
@@ -6775,7 +6917,7 @@ switch (insn) {
6775
6917
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
6776
6918
  fprintf(f, "\n");
6777
6919
  MAYBE_UNUSED(bool pc_moved_p) = false;
6778
- if (body->catch_except_p || TRUE) {
6920
+ if (true) {
6779
6921
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6780
6922
  pc_moved_p = true;
6781
6923
  }
@@ -6794,7 +6936,7 @@ switch (insn) {
6794
6936
  }
6795
6937
  fprintf(f, " {\n");
6796
6938
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
6797
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
6939
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
6798
6940
  fprintf(f, "\n");
6799
6941
  fprintf(f, " if (val == Qundef) {\n");
6800
6942
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -6818,8 +6960,8 @@ switch (insn) {
6818
6960
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
6819
6961
  }
6820
6962
  fprintf(f, "}\n");
6821
- break;
6822
- }
6963
+ break;
6964
+ }
6823
6965
  fprintf(f, "{\n");
6824
6966
  {
6825
6967
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -6834,7 +6976,7 @@ switch (insn) {
6834
6976
  fprintf(f, "\n");
6835
6977
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 1);
6836
6978
  MAYBE_UNUSED(bool pc_moved_p) = false;
6837
- if (body->catch_except_p || FALSE) {
6979
+ if (false) {
6838
6980
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6839
6981
  pc_moved_p = true;
6840
6982
  }
@@ -6860,8 +7002,9 @@ switch (insn) {
6860
7002
  }
6861
7003
  fprintf(f, "}\n");
6862
7004
  break;
6863
- case BIN(opt_empty_p):
6864
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_empty_p))) {
7005
+ }
7006
+ case BIN(opt_empty_p): {
7007
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_empty_p))) {
6865
7008
  {
6866
7009
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
6867
7010
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -6876,7 +7019,8 @@ switch (insn) {
6876
7019
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
6877
7020
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
6878
7021
  )) {
6879
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
7022
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
7023
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
6880
7024
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
6881
7025
 
6882
7026
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -6893,7 +7037,7 @@ switch (insn) {
6893
7037
  fprintf(f, " }\n");
6894
7038
 
6895
7039
  MAYBE_UNUSED(bool pc_moved_p) = false;
6896
- if (body->catch_except_p || TRUE) {
7040
+ if (true) {
6897
7041
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6898
7042
  pc_moved_p = true;
6899
7043
  }
@@ -6929,19 +7073,20 @@ switch (insn) {
6929
7073
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
6930
7074
 
6931
7075
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
6932
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
6933
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
7076
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
7077
+ fprintf(f, " calling.cc = cc;");
7078
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
6934
7079
  }
6935
7080
  else { // VM_METHOD_TYPE_ISEQ
6936
7081
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
6937
7082
  if (iseq->body->catch_except_p) {
6938
7083
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
6939
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
7084
+ fprintf(f, " val = vm_exec(ec, true);\n");
6940
7085
  }
6941
7086
  else {
6942
7087
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
6943
7088
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
6944
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
7089
+ fprintf(f, " val = vm_exec(ec, false);\n");
6945
7090
  fprintf(f, " }\n");
6946
7091
  }
6947
7092
  }
@@ -6977,7 +7122,7 @@ switch (insn) {
6977
7122
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
6978
7123
  fprintf(f, "\n");
6979
7124
  MAYBE_UNUSED(bool pc_moved_p) = false;
6980
- if (body->catch_except_p || TRUE) {
7125
+ if (true) {
6981
7126
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
6982
7127
  pc_moved_p = true;
6983
7128
  }
@@ -6996,7 +7141,7 @@ switch (insn) {
6996
7141
  }
6997
7142
  fprintf(f, " {\n");
6998
7143
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
6999
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
7144
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
7000
7145
  fprintf(f, "\n");
7001
7146
  fprintf(f, " if (val == Qundef) {\n");
7002
7147
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -7020,8 +7165,8 @@ switch (insn) {
7020
7165
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
7021
7166
  }
7022
7167
  fprintf(f, "}\n");
7023
- break;
7024
- }
7168
+ break;
7169
+ }
7025
7170
  fprintf(f, "{\n");
7026
7171
  {
7027
7172
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -7036,7 +7181,7 @@ switch (insn) {
7036
7181
  fprintf(f, "\n");
7037
7182
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 1);
7038
7183
  MAYBE_UNUSED(bool pc_moved_p) = false;
7039
- if (body->catch_except_p || FALSE) {
7184
+ if (false) {
7040
7185
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7041
7186
  pc_moved_p = true;
7042
7187
  }
@@ -7062,8 +7207,9 @@ switch (insn) {
7062
7207
  }
7063
7208
  fprintf(f, "}\n");
7064
7209
  break;
7065
- case BIN(opt_succ):
7066
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_succ))) {
7210
+ }
7211
+ case BIN(opt_succ): {
7212
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_succ))) {
7067
7213
  {
7068
7214
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
7069
7215
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -7078,7 +7224,8 @@ switch (insn) {
7078
7224
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
7079
7225
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
7080
7226
  )) {
7081
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
7227
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
7228
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
7082
7229
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
7083
7230
 
7084
7231
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -7095,7 +7242,7 @@ switch (insn) {
7095
7242
  fprintf(f, " }\n");
7096
7243
 
7097
7244
  MAYBE_UNUSED(bool pc_moved_p) = false;
7098
- if (body->catch_except_p || TRUE) {
7245
+ if (true) {
7099
7246
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7100
7247
  pc_moved_p = true;
7101
7248
  }
@@ -7131,19 +7278,20 @@ switch (insn) {
7131
7278
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
7132
7279
 
7133
7280
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
7134
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
7135
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
7281
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
7282
+ fprintf(f, " calling.cc = cc;");
7283
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
7136
7284
  }
7137
7285
  else { // VM_METHOD_TYPE_ISEQ
7138
7286
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
7139
7287
  if (iseq->body->catch_except_p) {
7140
7288
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
7141
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
7289
+ fprintf(f, " val = vm_exec(ec, true);\n");
7142
7290
  }
7143
7291
  else {
7144
7292
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
7145
7293
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
7146
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
7294
+ fprintf(f, " val = vm_exec(ec, false);\n");
7147
7295
  fprintf(f, " }\n");
7148
7296
  }
7149
7297
  }
@@ -7179,7 +7327,7 @@ switch (insn) {
7179
7327
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
7180
7328
  fprintf(f, "\n");
7181
7329
  MAYBE_UNUSED(bool pc_moved_p) = false;
7182
- if (body->catch_except_p || TRUE) {
7330
+ if (true) {
7183
7331
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7184
7332
  pc_moved_p = true;
7185
7333
  }
@@ -7198,7 +7346,7 @@ switch (insn) {
7198
7346
  }
7199
7347
  fprintf(f, " {\n");
7200
7348
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
7201
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
7349
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
7202
7350
  fprintf(f, "\n");
7203
7351
  fprintf(f, " if (val == Qundef) {\n");
7204
7352
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -7222,8 +7370,8 @@ switch (insn) {
7222
7370
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
7223
7371
  }
7224
7372
  fprintf(f, "}\n");
7225
- break;
7226
- }
7373
+ break;
7374
+ }
7227
7375
  fprintf(f, "{\n");
7228
7376
  {
7229
7377
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -7238,7 +7386,7 @@ switch (insn) {
7238
7386
  fprintf(f, "\n");
7239
7387
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 1);
7240
7388
  MAYBE_UNUSED(bool pc_moved_p) = false;
7241
- if (body->catch_except_p || FALSE) {
7389
+ if (false) {
7242
7390
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7243
7391
  pc_moved_p = true;
7244
7392
  }
@@ -7264,8 +7412,9 @@ switch (insn) {
7264
7412
  }
7265
7413
  fprintf(f, "}\n");
7266
7414
  break;
7267
- case BIN(opt_not):
7268
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_not))) {
7415
+ }
7416
+ case BIN(opt_not): {
7417
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_not))) {
7269
7418
  {
7270
7419
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
7271
7420
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -7280,7 +7429,8 @@ switch (insn) {
7280
7429
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
7281
7430
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
7282
7431
  )) {
7283
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
7432
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
7433
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
7284
7434
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
7285
7435
 
7286
7436
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -7297,7 +7447,7 @@ switch (insn) {
7297
7447
  fprintf(f, " }\n");
7298
7448
 
7299
7449
  MAYBE_UNUSED(bool pc_moved_p) = false;
7300
- if (body->catch_except_p || TRUE) {
7450
+ if (true) {
7301
7451
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7302
7452
  pc_moved_p = true;
7303
7453
  }
@@ -7333,19 +7483,20 @@ switch (insn) {
7333
7483
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
7334
7484
 
7335
7485
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
7336
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
7337
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
7486
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
7487
+ fprintf(f, " calling.cc = cc;");
7488
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
7338
7489
  }
7339
7490
  else { // VM_METHOD_TYPE_ISEQ
7340
7491
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
7341
7492
  if (iseq->body->catch_except_p) {
7342
7493
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
7343
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
7494
+ fprintf(f, " val = vm_exec(ec, true);\n");
7344
7495
  }
7345
7496
  else {
7346
7497
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
7347
7498
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
7348
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
7499
+ fprintf(f, " val = vm_exec(ec, false);\n");
7349
7500
  fprintf(f, " }\n");
7350
7501
  }
7351
7502
  }
@@ -7381,7 +7532,7 @@ switch (insn) {
7381
7532
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
7382
7533
  fprintf(f, "\n");
7383
7534
  MAYBE_UNUSED(bool pc_moved_p) = false;
7384
- if (body->catch_except_p || TRUE) {
7535
+ if (true) {
7385
7536
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7386
7537
  pc_moved_p = true;
7387
7538
  }
@@ -7400,7 +7551,7 @@ switch (insn) {
7400
7551
  }
7401
7552
  fprintf(f, " {\n");
7402
7553
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
7403
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
7554
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
7404
7555
  fprintf(f, "\n");
7405
7556
  fprintf(f, " if (val == Qundef) {\n");
7406
7557
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -7424,8 +7575,8 @@ switch (insn) {
7424
7575
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
7425
7576
  }
7426
7577
  fprintf(f, "}\n");
7427
- break;
7428
- }
7578
+ break;
7579
+ }
7429
7580
  fprintf(f, "{\n");
7430
7581
  {
7431
7582
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -7440,7 +7591,7 @@ switch (insn) {
7440
7591
  fprintf(f, "\n");
7441
7592
  fprintf(f, " recv = stack[%d];\n", b->stack_size - 1);
7442
7593
  MAYBE_UNUSED(bool pc_moved_p) = false;
7443
- if (body->catch_except_p || FALSE) {
7594
+ if (false) {
7444
7595
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7445
7596
  pc_moved_p = true;
7446
7597
  }
@@ -7466,8 +7617,9 @@ switch (insn) {
7466
7617
  }
7467
7618
  fprintf(f, "}\n");
7468
7619
  break;
7469
- case BIN(opt_regexpmatch2):
7470
- if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_regexpmatch2))) {
7620
+ }
7621
+ case BIN(opt_regexpmatch2): {
7622
+ if (has_cache_for_send(captured_cc_entries(status)[call_data_index((CALL_DATA)operands[0], body)], BIN(opt_regexpmatch2))) {
7471
7623
  {
7472
7624
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
7473
7625
  const struct rb_callcache *captured_cc = captured_cc_entries(status)[call_data_index(cd, body)];
@@ -7482,7 +7634,8 @@ switch (insn) {
7482
7634
  && fastpath_applied_iseq_p(ci, captured_cc, iseq = def_iseq_ptr(vm_cc_cme(captured_cc)->def))
7483
7635
  && !(vm_ci_flag(ci) & VM_CALL_TAILCALL))
7484
7636
  )) {
7485
- if (false && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
7637
+ const bool cfunc_debug = false; // Set true when you want to see inlined cfunc
7638
+ if (cfunc_debug && vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC)
7486
7639
  fprintf(stderr, " * %s\n", rb_id2name(vm_ci_mid(ci)));
7487
7640
 
7488
7641
  int sp_inc = (int)sp_inc_of_sendish(ci);
@@ -7499,7 +7652,7 @@ switch (insn) {
7499
7652
  fprintf(f, " }\n");
7500
7653
 
7501
7654
  MAYBE_UNUSED(bool pc_moved_p) = false;
7502
- if (body->catch_except_p || TRUE) {
7655
+ if (true) {
7503
7656
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7504
7657
  pc_moved_p = true;
7505
7658
  }
@@ -7535,19 +7688,20 @@ switch (insn) {
7535
7688
  fprintf(f, " calling.argc = %d;\n", vm_ci_argc(ci));
7536
7689
 
7537
7690
  if (vm_cc_cme(captured_cc)->def->type == VM_METHOD_TYPE_CFUNC) {
7538
- fprintf(f, " struct rb_call_data cc_cd = { .ci = (CALL_INFO)0x%"PRIxVALUE", .cc = cc };\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
7539
- fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling, &cc_cd);\n");
7691
+ fprintf(f, " calling.ci = (CALL_INFO)0x%"PRIxVALUE";\n", (VALUE)ci); // creating local cd here because operand's cd->cc may not be the same as inlined cc.
7692
+ fprintf(f, " calling.cc = cc;");
7693
+ fprintf(f, " val = vm_call_cfunc_with_frame(ec, reg_cfp, &calling);\n");
7540
7694
  }
7541
7695
  else { // VM_METHOD_TYPE_ISEQ
7542
7696
  fprintf(f, " vm_call_iseq_setup_normal(ec, reg_cfp, &calling, cc_cme, 0, %d, %d);\n", iseq->body->param.size, iseq->body->local_table_size);
7543
7697
  if (iseq->body->catch_except_p) {
7544
7698
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n");
7545
- fprintf(f, " val = vm_exec(ec, TRUE);\n");
7699
+ fprintf(f, " val = vm_exec(ec, true);\n");
7546
7700
  }
7547
7701
  else {
7548
7702
  fprintf(f, " if ((val = mjit_exec(ec)) == Qundef) {\n");
7549
7703
  fprintf(f, " VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);\n"); // This is vm_call0_body's code after vm_call_iseq_setup
7550
- fprintf(f, " val = vm_exec(ec, FALSE);\n");
7704
+ fprintf(f, " val = vm_exec(ec, false);\n");
7551
7705
  fprintf(f, " }\n");
7552
7706
  }
7553
7707
  }
@@ -7583,7 +7737,7 @@ switch (insn) {
7583
7737
  comment_id(f, vm_ci_mid(((CALL_DATA)operands[0])->ci));
7584
7738
  fprintf(f, "\n");
7585
7739
  MAYBE_UNUSED(bool pc_moved_p) = false;
7586
- if (body->catch_except_p || TRUE) {
7740
+ if (true) {
7587
7741
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7588
7742
  pc_moved_p = true;
7589
7743
  }
@@ -7602,7 +7756,7 @@ switch (insn) {
7602
7756
  }
7603
7757
  fprintf(f, " {\n");
7604
7758
  fprintf(f, " VALUE bh = VM_BLOCK_HANDLER_NONE;\n");
7605
- fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, vm_search_method_wrap);\n");
7759
+ fprintf(f, " val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);\n");
7606
7760
  fprintf(f, "\n");
7607
7761
  fprintf(f, " if (val == Qundef) {\n");
7608
7762
  fprintf(f, "#if OPT_CALL_THREADED_CODE\n");
@@ -7626,8 +7780,8 @@ switch (insn) {
7626
7780
  b->stack_size += attr_sp_inc_opt_send_without_block(cd);
7627
7781
  }
7628
7782
  fprintf(f, "}\n");
7629
- break;
7630
- }
7783
+ break;
7784
+ }
7631
7785
  fprintf(f, "{\n");
7632
7786
  {
7633
7787
  MAYBE_UNUSED(CALL_DATA cd) = (CALL_DATA)operands[0];
@@ -7643,7 +7797,7 @@ switch (insn) {
7643
7797
  fprintf(f, " obj2 = stack[%d];\n", b->stack_size - 2);
7644
7798
  fprintf(f, " obj1 = stack[%d];\n", b->stack_size - 1);
7645
7799
  MAYBE_UNUSED(bool pc_moved_p) = false;
7646
- if (body->catch_except_p || TRUE) {
7800
+ if (true) {
7647
7801
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7648
7802
  pc_moved_p = true;
7649
7803
  }
@@ -7677,8 +7831,8 @@ switch (insn) {
7677
7831
  }
7678
7832
  fprintf(f, "}\n");
7679
7833
  break;
7680
- case BIN(invokebuiltin):
7681
- {
7834
+ }
7835
+ case BIN(invokebuiltin): {
7682
7836
  RB_BUILTIN bf = (RB_BUILTIN)operands[0];
7683
7837
  rb_snum_t sp_inc = attr_sp_inc_invokebuiltin(bf);
7684
7838
  unsigned sp = b->stack_size + (unsigned)sp_inc;
@@ -7694,7 +7848,6 @@ switch (insn) {
7694
7848
  b->stack_size = sp;
7695
7849
  break;
7696
7850
  }
7697
- }
7698
7851
  fprintf(f, "{\n");
7699
7852
  {
7700
7853
  MAYBE_UNUSED(RB_BUILTIN bf) = (RB_BUILTIN)operands[0];
@@ -7707,7 +7860,7 @@ switch (insn) {
7707
7860
  fprintf(f, " bf = (RB_BUILTIN)0x%"PRIxVALUE";", operands[0]);
7708
7861
  fprintf(f, "\n");
7709
7862
  MAYBE_UNUSED(bool pc_moved_p) = false;
7710
- if (body->catch_except_p || TRUE) {
7863
+ if (true) {
7711
7864
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7712
7865
  pc_moved_p = true;
7713
7866
  }
@@ -7733,8 +7886,8 @@ switch (insn) {
7733
7886
  }
7734
7887
  fprintf(f, "}\n");
7735
7888
  break;
7736
- case BIN(opt_invokebuiltin_delegate):
7737
- {
7889
+ }
7890
+ case BIN(opt_invokebuiltin_delegate): {
7738
7891
  RB_BUILTIN bf = (RB_BUILTIN)operands[0];
7739
7892
  rb_num_t index = (rb_num_t)operands[1];
7740
7893
  rb_snum_t sp_inc = attr_sp_inc_opt_invokebuiltin_delegate(bf, index);
@@ -7751,7 +7904,6 @@ switch (insn) {
7751
7904
  b->stack_size = sp;
7752
7905
  break;
7753
7906
  }
7754
- }
7755
7907
  fprintf(f, "{\n");
7756
7908
  {
7757
7909
  MAYBE_UNUSED(RB_BUILTIN bf) = (RB_BUILTIN)operands[0];
@@ -7768,7 +7920,7 @@ switch (insn) {
7768
7920
  fprintf(f, " index = (rb_num_t)0x%"PRIxVALUE";", operands[1]);
7769
7921
  fprintf(f, "\n");
7770
7922
  MAYBE_UNUSED(bool pc_moved_p) = false;
7771
- if (body->catch_except_p || TRUE) {
7923
+ if (true) {
7772
7924
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7773
7925
  pc_moved_p = true;
7774
7926
  }
@@ -7793,8 +7945,8 @@ switch (insn) {
7793
7945
  }
7794
7946
  fprintf(f, "}\n");
7795
7947
  break;
7796
- case BIN(opt_invokebuiltin_delegate_leave):
7797
- {
7948
+ }
7949
+ case BIN(opt_invokebuiltin_delegate_leave): {
7798
7950
  RB_BUILTIN bf = (RB_BUILTIN)operands[0];
7799
7951
  rb_num_t index = (rb_num_t)operands[1];
7800
7952
  rb_snum_t sp_inc = attr_sp_inc_opt_invokebuiltin_delegate_leave(bf, index);
@@ -7809,20 +7961,19 @@ switch (insn) {
7809
7961
  fprintf(f, " stack[%u] = val;\n", sp - 1);
7810
7962
  fprintf(f, "}\n");
7811
7963
  }
7812
- if (status->inlined_iseqs != NULL) { // the current ISeq is NOT being inlined
7813
- fprintf(f, " if (UNLIKELY(RUBY_VM_INTERRUPTED_ANY(ec))) {\n");
7814
- fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
7815
- fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", pos);
7816
- fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_leave);\n");
7817
- fprintf(f, " goto cancel;\n");
7818
- fprintf(f, " }\n");
7819
- fprintf(f, " ec->cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(reg_cfp);\n"); // vm_pop_frame
7820
- }
7821
- fprintf(f, " return stack[0];\n");
7822
- b->stack_size += attr_sp_inc_opt_invokebuiltin_delegate_leave(bf, index);
7823
- b->finish_p = TRUE;
7824
- break;
7964
+ if (status->inlined_iseqs != NULL) { // the current ISeq is NOT being inlined
7965
+ fprintf(f, " if (UNLIKELY(RUBY_VM_INTERRUPTED_ANY(ec))) {\n");
7966
+ fprintf(f, " reg_cfp->sp = vm_base_ptr(reg_cfp) + %d;\n", b->stack_size);
7967
+ fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", pos);
7968
+ fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_leave);\n");
7969
+ fprintf(f, " goto cancel;\n");
7970
+ fprintf(f, " }\n");
7971
+ fprintf(f, " ec->cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(reg_cfp);\n"); // vm_pop_frame
7825
7972
  }
7973
+ fprintf(f, " return stack[0];\n");
7974
+ b->stack_size += attr_sp_inc_opt_invokebuiltin_delegate_leave(bf, index);
7975
+ b->finish_p = TRUE;
7976
+ break;
7826
7977
  fprintf(f, "{\n");
7827
7978
  {
7828
7979
  MAYBE_UNUSED(RB_BUILTIN bf) = (RB_BUILTIN)operands[0];
@@ -7839,7 +7990,7 @@ switch (insn) {
7839
7990
  fprintf(f, " index = (rb_num_t)0x%"PRIxVALUE";", operands[1]);
7840
7991
  fprintf(f, "\n");
7841
7992
  MAYBE_UNUSED(bool pc_moved_p) = false;
7842
- if (body->catch_except_p || TRUE) {
7993
+ if (true) {
7843
7994
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7844
7995
  pc_moved_p = true;
7845
7996
  }
@@ -7884,7 +8035,8 @@ switch (insn) {
7884
8035
  fprintf(f, "}\n");
7885
8036
  b->finish_p = TRUE;
7886
8037
  break;
7887
- case BIN(getlocal_WC_0):
8038
+ }
8039
+ case BIN(getlocal_WC_0): {
7888
8040
  fprintf(f, "{\n");
7889
8041
  {
7890
8042
  MAYBE_UNUSED(lindex_t idx) = (lindex_t)operands[0];
@@ -7899,7 +8051,7 @@ switch (insn) {
7899
8051
  fprintf(f, " idx = (lindex_t)0x%"PRIxVALUE";", operands[0]);
7900
8052
  fprintf(f, "\n");
7901
8053
  MAYBE_UNUSED(bool pc_moved_p) = false;
7902
- if (body->catch_except_p || FALSE) {
8054
+ if (false) {
7903
8055
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7904
8056
  pc_moved_p = true;
7905
8057
  }
@@ -7918,7 +8070,8 @@ switch (insn) {
7918
8070
  }
7919
8071
  fprintf(f, "}\n");
7920
8072
  break;
7921
- case BIN(getlocal_WC_1):
8073
+ }
8074
+ case BIN(getlocal_WC_1): {
7922
8075
  fprintf(f, "{\n");
7923
8076
  {
7924
8077
  MAYBE_UNUSED(lindex_t idx) = (lindex_t)operands[0];
@@ -7933,7 +8086,7 @@ switch (insn) {
7933
8086
  fprintf(f, " idx = (lindex_t)0x%"PRIxVALUE";", operands[0]);
7934
8087
  fprintf(f, "\n");
7935
8088
  MAYBE_UNUSED(bool pc_moved_p) = false;
7936
- if (body->catch_except_p || FALSE) {
8089
+ if (false) {
7937
8090
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7938
8091
  pc_moved_p = true;
7939
8092
  }
@@ -7952,7 +8105,8 @@ switch (insn) {
7952
8105
  }
7953
8106
  fprintf(f, "}\n");
7954
8107
  break;
7955
- case BIN(setlocal_WC_0):
8108
+ }
8109
+ case BIN(setlocal_WC_0): {
7956
8110
  fprintf(f, "{\n");
7957
8111
  {
7958
8112
  MAYBE_UNUSED(lindex_t idx) = (lindex_t)operands[0];
@@ -7968,7 +8122,7 @@ switch (insn) {
7968
8122
  fprintf(f, "\n");
7969
8123
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
7970
8124
  MAYBE_UNUSED(bool pc_moved_p) = false;
7971
- if (body->catch_except_p || FALSE) {
8125
+ if (false) {
7972
8126
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
7973
8127
  pc_moved_p = true;
7974
8128
  }
@@ -7986,7 +8140,8 @@ switch (insn) {
7986
8140
  }
7987
8141
  fprintf(f, "}\n");
7988
8142
  break;
7989
- case BIN(setlocal_WC_1):
8143
+ }
8144
+ case BIN(setlocal_WC_1): {
7990
8145
  fprintf(f, "{\n");
7991
8146
  {
7992
8147
  MAYBE_UNUSED(lindex_t idx) = (lindex_t)operands[0];
@@ -8002,7 +8157,7 @@ switch (insn) {
8002
8157
  fprintf(f, "\n");
8003
8158
  fprintf(f, " val = stack[%d];\n", b->stack_size - 1);
8004
8159
  MAYBE_UNUSED(bool pc_moved_p) = false;
8005
- if (body->catch_except_p || FALSE) {
8160
+ if (false) {
8006
8161
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
8007
8162
  pc_moved_p = true;
8008
8163
  }
@@ -8020,7 +8175,8 @@ switch (insn) {
8020
8175
  }
8021
8176
  fprintf(f, "}\n");
8022
8177
  break;
8023
- case BIN(putobject_INT2FIX_0_):
8178
+ }
8179
+ case BIN(putobject_INT2FIX_0_): {
8024
8180
  fprintf(f, "{\n");
8025
8181
  {
8026
8182
  if (status->local_stack_p) {
@@ -8030,7 +8186,7 @@ switch (insn) {
8030
8186
 
8031
8187
  fprintf(f, " val = INT2FIX(0);\n");
8032
8188
  MAYBE_UNUSED(bool pc_moved_p) = false;
8033
- if (body->catch_except_p || FALSE) {
8189
+ if (false) {
8034
8190
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
8035
8191
  pc_moved_p = true;
8036
8192
  }
@@ -8047,7 +8203,8 @@ switch (insn) {
8047
8203
  }
8048
8204
  fprintf(f, "}\n");
8049
8205
  break;
8050
- case BIN(putobject_INT2FIX_1_):
8206
+ }
8207
+ case BIN(putobject_INT2FIX_1_): {
8051
8208
  fprintf(f, "{\n");
8052
8209
  {
8053
8210
  if (status->local_stack_p) {
@@ -8057,7 +8214,7 @@ switch (insn) {
8057
8214
 
8058
8215
  fprintf(f, " val = INT2FIX(1);\n");
8059
8216
  MAYBE_UNUSED(bool pc_moved_p) = false;
8060
- if (body->catch_except_p || FALSE) {
8217
+ if (false) {
8061
8218
  fprintf(f, " reg_cfp->pc = original_body_iseq + %d;\n", next_pos); /* ADD_PC(INSN_ATTR(width)); */
8062
8219
  pc_moved_p = true;
8063
8220
  }
@@ -8074,6 +8231,7 @@ switch (insn) {
8074
8231
  }
8075
8232
  fprintf(f, "}\n");
8076
8233
  break;
8234
+ }
8077
8235
  default:
8078
8236
  if (mjit_opts.warnings || mjit_opts.verbose)
8079
8237
  fprintf(stderr, "MJIT warning: Skipped to compile unsupported instruction: %s\n", insn_name(insn));