debase-ruby_core_source 0.10.11 → 0.10.12

Sign up to get free protection for your applications and to get access to all the features.
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));