debase-ruby_core_source 0.10.15 → 0.10.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +28 -0
  3. data/debase-ruby_core_source.gemspec +1 -1
  4. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/addr2line.h +1 -1
  5. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/ccan/build_assert/build_assert.h +40 -0
  6. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/ccan/check_type/check_type.h +63 -0
  7. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/ccan/container_of/container_of.h +142 -0
  8. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/ccan/list/list.h +773 -0
  9. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/ccan/str/str.h +16 -0
  10. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/constant.h +51 -0
  11. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/debug_counter.h +109 -0
  12. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/dln.h +10 -9
  13. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/encindex.h +69 -0
  14. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/eval_intern.h +334 -0
  15. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/gc.h +27 -10
  16. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/id.h +250 -0
  17. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/id_table.h +31 -0
  18. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/insns.inc +217 -0
  19. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/insns_info.inc +1570 -0
  20. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/internal.h +2036 -0
  21. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/iseq.h +308 -0
  22. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/known_errors.inc +16 -1
  23. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/method.h +218 -0
  24. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/node.h +115 -79
  25. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/node_name.inc +12 -22
  26. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/opt_sc.inc +1601 -0
  27. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/optinsn.inc +103 -0
  28. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/optunifs.inc +28 -83
  29. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/parse.h +74 -60
  30. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/probes_helper.h +43 -0
  31. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/regenc.h +254 -0
  32. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/regint.h +299 -211
  33. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/regparse.h +45 -37
  34. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/revision.h +1 -0
  35. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/ruby_assert.h +54 -0
  36. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/ruby_atomic.h +84 -26
  37. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/siphash.h +1 -1
  38. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/symbol.h +108 -0
  39. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/thread_pthread.h +14 -11
  40. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/thread_win32.h +2 -6
  41. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/timev.h +42 -0
  42. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/transcode_data.h +34 -12
  43. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/version.h +73 -0
  44. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/vm.inc +3667 -0
  45. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/vm_call_iseq_optimized.inc +213 -0
  46. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/vm_core.h +1768 -0
  47. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550/debug.h → ruby-2.5.4-p155/vm_debug.h} +4 -8
  48. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/vm_exec.h +38 -30
  49. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/vm_insnhelper.h +255 -0
  50. data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/vm_opts.h +14 -9
  51. data/lib/debase/ruby_core_source/ruby-2.5.4-p155/vmtc.inc +214 -0
  52. data/lib/debase/ruby_core_source/version.rb +1 -1
  53. metadata +52 -42
  54. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/constant.h +0 -34
  55. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/encdb.h +0 -167
  56. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/eval_intern.h +0 -234
  57. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/id.h +0 -177
  58. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/insns.inc +0 -179
  59. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/insns_info.inc +0 -695
  60. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/internal.h +0 -242
  61. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/iseq.h +0 -126
  62. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/method.h +0 -105
  63. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/opt_sc.inc +0 -670
  64. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/optinsn.inc +0 -30
  65. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/regenc.h +0 -219
  66. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/revision.h +0 -1
  67. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/timev.h +0 -21
  68. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/transdb.h +0 -189
  69. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/version.h +0 -52
  70. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/vm.inc +0 -3054
  71. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/vm_core.h +0 -763
  72. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/vm_insnhelper.h +0 -220
  73. data/lib/debase/ruby_core_source/ruby-1.9.3-p550/vmtc.inc +0 -97
@@ -0,0 +1,3667 @@
1
+ /* -*-c-*- *********************************************************/
2
+ /*******************************************************************/
3
+ /*******************************************************************/
4
+ /**
5
+ This file is VM main loop.
6
+
7
+ ----
8
+ This file is auto generated by insns2vm.rb
9
+ DO NOT TOUCH!
10
+
11
+ If you want to fix something, you must edit 'insns.def'
12
+ */
13
+
14
+
15
+ INSN_ENTRY(nop){START_OF_ORIGINAL_INSN(nop);
16
+ {
17
+
18
+
19
+ DEBUG_ENTER_INSN("nop");
20
+ ADD_PC(1+0);
21
+ PREFETCH(GET_PC());
22
+ #define CURRENT_INSN_nop 1
23
+ #define INSN_IS_SC() 0
24
+ #define INSN_LABEL(lab) LABEL_nop_##lab
25
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
26
+ COLLECT_USAGE_INSN(BIN(nop));
27
+ {
28
+ #line 40 "insns.def"
29
+ /* none */
30
+
31
+ #line 32 "vm.inc"
32
+ #undef CURRENT_INSN_nop
33
+ #undef INSN_IS_SC
34
+ #undef INSN_LABEL
35
+ #undef LABEL_IS_SC
36
+ END_INSN(nop);}}}
37
+ INSN_ENTRY(getlocal){START_OF_ORIGINAL_INSN(getlocal);
38
+ {
39
+ VALUE val;
40
+ rb_num_t level = (rb_num_t)GET_OPERAND(2);
41
+ lindex_t idx = (lindex_t)GET_OPERAND(1);
42
+
43
+ DEBUG_ENTER_INSN("getlocal");
44
+ ADD_PC(1+2);
45
+ PREFETCH(GET_PC());
46
+ #define CURRENT_INSN_getlocal 1
47
+ #define INSN_IS_SC() 0
48
+ #define INSN_LABEL(lab) LABEL_getlocal_##lab
49
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
50
+ COLLECT_USAGE_INSN(BIN(getlocal));
51
+ COLLECT_USAGE_OPERAND(BIN(getlocal), 0, idx);
52
+ COLLECT_USAGE_OPERAND(BIN(getlocal), 1, level);
53
+ {
54
+ #line 60 "insns.def"
55
+ val = *(vm_get_ep(GET_EP(), level) - idx);
56
+ RB_DEBUG_COUNTER_INC(lvar_get);
57
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
58
+
59
+ #line 60 "vm.inc"
60
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
61
+ PUSH(val);
62
+ #undef CURRENT_INSN_getlocal
63
+ #undef INSN_IS_SC
64
+ #undef INSN_LABEL
65
+ #undef LABEL_IS_SC
66
+ END_INSN(getlocal);}}}
67
+ INSN_ENTRY(setlocal){START_OF_ORIGINAL_INSN(setlocal);
68
+ {
69
+ rb_num_t level = (rb_num_t)GET_OPERAND(2);
70
+ lindex_t idx = (lindex_t)GET_OPERAND(1);
71
+ VALUE val = TOPN(0);
72
+ DEBUG_ENTER_INSN("setlocal");
73
+ ADD_PC(1+2);
74
+ PREFETCH(GET_PC());
75
+ POPN(1);
76
+ #define CURRENT_INSN_setlocal 1
77
+ #define INSN_IS_SC() 0
78
+ #define INSN_LABEL(lab) LABEL_setlocal_##lab
79
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
80
+ COLLECT_USAGE_INSN(BIN(setlocal));
81
+ COLLECT_USAGE_OPERAND(BIN(setlocal), 0, idx);
82
+ COLLECT_USAGE_OPERAND(BIN(setlocal), 1, level);
83
+ {
84
+ #line 78 "insns.def"
85
+ vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val);
86
+ RB_DEBUG_COUNTER_INC(lvar_set);
87
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
88
+
89
+ #line 90 "vm.inc"
90
+ #undef CURRENT_INSN_setlocal
91
+ #undef INSN_IS_SC
92
+ #undef INSN_LABEL
93
+ #undef LABEL_IS_SC
94
+ END_INSN(setlocal);}}}
95
+ INSN_ENTRY(getblockparam){START_OF_ORIGINAL_INSN(getblockparam);
96
+ {
97
+ VALUE val;
98
+ rb_num_t level = (rb_num_t)GET_OPERAND(2);
99
+ lindex_t idx = (lindex_t)GET_OPERAND(1);
100
+
101
+ DEBUG_ENTER_INSN("getblockparam");
102
+ ADD_PC(1+2);
103
+ PREFETCH(GET_PC());
104
+ #define CURRENT_INSN_getblockparam 1
105
+ #define INSN_IS_SC() 0
106
+ #define INSN_LABEL(lab) LABEL_getblockparam_##lab
107
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
108
+ COLLECT_USAGE_INSN(BIN(getblockparam));
109
+ COLLECT_USAGE_OPERAND(BIN(getblockparam), 0, idx);
110
+ COLLECT_USAGE_OPERAND(BIN(getblockparam), 1, level);
111
+ {
112
+ #line 94 "insns.def"
113
+ const VALUE *ep = vm_get_ep(GET_EP(), level);
114
+ VM_ASSERT(VM_ENV_LOCAL_P(ep));
115
+
116
+ if (!VM_ENV_FLAGS(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)) {
117
+ val = rb_vm_bh_to_procval(ec, VM_ENV_BLOCK_HANDLER(ep));
118
+ vm_env_write(ep, -(int)idx, val);
119
+ VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM);
120
+ }
121
+ else {
122
+ val = *(ep - idx);
123
+ RB_DEBUG_COUNTER_INC(lvar_get);
124
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
125
+ }
126
+
127
+ #line 128 "vm.inc"
128
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
129
+ PUSH(val);
130
+ #undef CURRENT_INSN_getblockparam
131
+ #undef INSN_IS_SC
132
+ #undef INSN_LABEL
133
+ #undef LABEL_IS_SC
134
+ END_INSN(getblockparam);}}}
135
+ INSN_ENTRY(setblockparam){START_OF_ORIGINAL_INSN(setblockparam);
136
+ {
137
+ rb_num_t level = (rb_num_t)GET_OPERAND(2);
138
+ lindex_t idx = (lindex_t)GET_OPERAND(1);
139
+ VALUE val = TOPN(0);
140
+ DEBUG_ENTER_INSN("setblockparam");
141
+ ADD_PC(1+2);
142
+ PREFETCH(GET_PC());
143
+ POPN(1);
144
+ #define CURRENT_INSN_setblockparam 1
145
+ #define INSN_IS_SC() 0
146
+ #define INSN_LABEL(lab) LABEL_setblockparam_##lab
147
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
148
+ COLLECT_USAGE_INSN(BIN(setblockparam));
149
+ COLLECT_USAGE_OPERAND(BIN(setblockparam), 0, idx);
150
+ COLLECT_USAGE_OPERAND(BIN(setblockparam), 1, level);
151
+ {
152
+ #line 120 "insns.def"
153
+ const VALUE *ep = vm_get_ep(GET_EP(), level);
154
+ VM_ASSERT(VM_ENV_LOCAL_P(ep));
155
+
156
+ vm_env_write(ep, -(int)idx, val);
157
+ RB_DEBUG_COUNTER_INC(lvar_set);
158
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
159
+
160
+ VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM);
161
+
162
+ #line 163 "vm.inc"
163
+ #undef CURRENT_INSN_setblockparam
164
+ #undef INSN_IS_SC
165
+ #undef INSN_LABEL
166
+ #undef LABEL_IS_SC
167
+ END_INSN(setblockparam);}}}
168
+ INSN_ENTRY(getspecial){START_OF_ORIGINAL_INSN(getspecial);
169
+ {
170
+ VALUE val;
171
+ rb_num_t type = (rb_num_t)GET_OPERAND(2);
172
+ rb_num_t key = (rb_num_t)GET_OPERAND(1);
173
+
174
+ DEBUG_ENTER_INSN("getspecial");
175
+ ADD_PC(1+2);
176
+ PREFETCH(GET_PC());
177
+ #define CURRENT_INSN_getspecial 1
178
+ #define INSN_IS_SC() 0
179
+ #define INSN_LABEL(lab) LABEL_getspecial_##lab
180
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
181
+ COLLECT_USAGE_INSN(BIN(getspecial));
182
+ COLLECT_USAGE_OPERAND(BIN(getspecial), 0, key);
183
+ COLLECT_USAGE_OPERAND(BIN(getspecial), 1, type);
184
+ {
185
+ #line 141 "insns.def"
186
+ val = vm_getspecial(ec, GET_LEP(), key, type);
187
+
188
+ #line 189 "vm.inc"
189
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
190
+ PUSH(val);
191
+ #undef CURRENT_INSN_getspecial
192
+ #undef INSN_IS_SC
193
+ #undef INSN_LABEL
194
+ #undef LABEL_IS_SC
195
+ END_INSN(getspecial);}}}
196
+ INSN_ENTRY(setspecial){START_OF_ORIGINAL_INSN(setspecial);
197
+ {
198
+ rb_num_t key = (rb_num_t)GET_OPERAND(1);
199
+ VALUE obj = TOPN(0);
200
+ DEBUG_ENTER_INSN("setspecial");
201
+ ADD_PC(1+1);
202
+ PREFETCH(GET_PC());
203
+ POPN(1);
204
+ #define CURRENT_INSN_setspecial 1
205
+ #define INSN_IS_SC() 0
206
+ #define INSN_LABEL(lab) LABEL_setspecial_##lab
207
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
208
+ COLLECT_USAGE_INSN(BIN(setspecial));
209
+ COLLECT_USAGE_OPERAND(BIN(setspecial), 0, key);
210
+ {
211
+ #line 155 "insns.def"
212
+ lep_svar_set(ec, GET_LEP(), key, obj);
213
+
214
+ #line 215 "vm.inc"
215
+ #undef CURRENT_INSN_setspecial
216
+ #undef INSN_IS_SC
217
+ #undef INSN_LABEL
218
+ #undef LABEL_IS_SC
219
+ END_INSN(setspecial);}}}
220
+ INSN_ENTRY(getinstancevariable){START_OF_ORIGINAL_INSN(getinstancevariable);
221
+ {
222
+ VALUE val;
223
+ IC ic = (IC)GET_OPERAND(2);
224
+ ID id = (ID)GET_OPERAND(1);
225
+
226
+ DEBUG_ENTER_INSN("getinstancevariable");
227
+ ADD_PC(1+2);
228
+ PREFETCH(GET_PC());
229
+ #define CURRENT_INSN_getinstancevariable 1
230
+ #define INSN_IS_SC() 0
231
+ #define INSN_LABEL(lab) LABEL_getinstancevariable_##lab
232
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
233
+ COLLECT_USAGE_INSN(BIN(getinstancevariable));
234
+ COLLECT_USAGE_OPERAND(BIN(getinstancevariable), 0, id);
235
+ COLLECT_USAGE_OPERAND(BIN(getinstancevariable), 1, ic);
236
+ {
237
+ #line 169 "insns.def"
238
+ val = vm_getinstancevariable(GET_SELF(), id, ic);
239
+
240
+ #line 241 "vm.inc"
241
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
242
+ PUSH(val);
243
+ #undef CURRENT_INSN_getinstancevariable
244
+ #undef INSN_IS_SC
245
+ #undef INSN_LABEL
246
+ #undef LABEL_IS_SC
247
+ END_INSN(getinstancevariable);}}}
248
+ INSN_ENTRY(setinstancevariable){START_OF_ORIGINAL_INSN(setinstancevariable);
249
+ {
250
+ IC ic = (IC)GET_OPERAND(2);
251
+ ID id = (ID)GET_OPERAND(1);
252
+ VALUE val = TOPN(0);
253
+ DEBUG_ENTER_INSN("setinstancevariable");
254
+ ADD_PC(1+2);
255
+ PREFETCH(GET_PC());
256
+ POPN(1);
257
+ #define CURRENT_INSN_setinstancevariable 1
258
+ #define INSN_IS_SC() 0
259
+ #define INSN_LABEL(lab) LABEL_setinstancevariable_##lab
260
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
261
+ COLLECT_USAGE_INSN(BIN(setinstancevariable));
262
+ COLLECT_USAGE_OPERAND(BIN(setinstancevariable), 0, id);
263
+ COLLECT_USAGE_OPERAND(BIN(setinstancevariable), 1, ic);
264
+ {
265
+ #line 183 "insns.def"
266
+ vm_setinstancevariable(GET_SELF(), id, val, ic);
267
+
268
+ #line 269 "vm.inc"
269
+ #undef CURRENT_INSN_setinstancevariable
270
+ #undef INSN_IS_SC
271
+ #undef INSN_LABEL
272
+ #undef LABEL_IS_SC
273
+ END_INSN(setinstancevariable);}}}
274
+ INSN_ENTRY(getclassvariable){START_OF_ORIGINAL_INSN(getclassvariable);
275
+ {
276
+ VALUE val;
277
+ ID id = (ID)GET_OPERAND(1);
278
+
279
+ DEBUG_ENTER_INSN("getclassvariable");
280
+ ADD_PC(1+1);
281
+ PREFETCH(GET_PC());
282
+ #define CURRENT_INSN_getclassvariable 1
283
+ #define INSN_IS_SC() 0
284
+ #define INSN_LABEL(lab) LABEL_getclassvariable_##lab
285
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
286
+ COLLECT_USAGE_INSN(BIN(getclassvariable));
287
+ COLLECT_USAGE_OPERAND(BIN(getclassvariable), 0, id);
288
+ {
289
+ #line 197 "insns.def"
290
+ val = rb_cvar_get(vm_get_cvar_base(rb_vm_get_cref(GET_EP()), GET_CFP()), id);
291
+
292
+ #line 293 "vm.inc"
293
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
294
+ PUSH(val);
295
+ #undef CURRENT_INSN_getclassvariable
296
+ #undef INSN_IS_SC
297
+ #undef INSN_LABEL
298
+ #undef LABEL_IS_SC
299
+ END_INSN(getclassvariable);}}}
300
+ INSN_ENTRY(setclassvariable){START_OF_ORIGINAL_INSN(setclassvariable);
301
+ {
302
+ ID id = (ID)GET_OPERAND(1);
303
+ VALUE val = TOPN(0);
304
+ DEBUG_ENTER_INSN("setclassvariable");
305
+ ADD_PC(1+1);
306
+ PREFETCH(GET_PC());
307
+ POPN(1);
308
+ #define CURRENT_INSN_setclassvariable 1
309
+ #define INSN_IS_SC() 0
310
+ #define INSN_LABEL(lab) LABEL_setclassvariable_##lab
311
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
312
+ COLLECT_USAGE_INSN(BIN(setclassvariable));
313
+ COLLECT_USAGE_OPERAND(BIN(setclassvariable), 0, id);
314
+ {
315
+ #line 211 "insns.def"
316
+ vm_ensure_not_refinement_module(GET_SELF());
317
+ rb_cvar_set(vm_get_cvar_base(rb_vm_get_cref(GET_EP()), GET_CFP()), id, val);
318
+
319
+ #line 320 "vm.inc"
320
+ #undef CURRENT_INSN_setclassvariable
321
+ #undef INSN_IS_SC
322
+ #undef INSN_LABEL
323
+ #undef LABEL_IS_SC
324
+ END_INSN(setclassvariable);}}}
325
+ INSN_ENTRY(getconstant){START_OF_ORIGINAL_INSN(getconstant);
326
+ {
327
+ VALUE val;
328
+ ID id = (ID)GET_OPERAND(1);
329
+ VALUE klass = TOPN(0);
330
+ DEBUG_ENTER_INSN("getconstant");
331
+ ADD_PC(1+1);
332
+ PREFETCH(GET_PC());
333
+ POPN(1);
334
+ #define CURRENT_INSN_getconstant 1
335
+ #define INSN_IS_SC() 0
336
+ #define INSN_LABEL(lab) LABEL_getconstant_##lab
337
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
338
+ COLLECT_USAGE_INSN(BIN(getconstant));
339
+ COLLECT_USAGE_OPERAND(BIN(getconstant), 0, id);
340
+ {
341
+ #line 233 "insns.def"
342
+ val = vm_get_ev_const(ec, klass, id, 0);
343
+
344
+ #line 345 "vm.inc"
345
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
346
+ PUSH(val);
347
+ #undef CURRENT_INSN_getconstant
348
+ #undef INSN_IS_SC
349
+ #undef INSN_LABEL
350
+ #undef LABEL_IS_SC
351
+ END_INSN(getconstant);}}}
352
+ INSN_ENTRY(setconstant){START_OF_ORIGINAL_INSN(setconstant);
353
+ {
354
+ ID id = (ID)GET_OPERAND(1);
355
+ VALUE val = TOPN(1);
356
+ VALUE cbase = TOPN(0);
357
+ DEBUG_ENTER_INSN("setconstant");
358
+ ADD_PC(1+1);
359
+ PREFETCH(GET_PC());
360
+ POPN(2);
361
+ #define CURRENT_INSN_setconstant 1
362
+ #define INSN_IS_SC() 0
363
+ #define INSN_LABEL(lab) LABEL_setconstant_##lab
364
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
365
+ COLLECT_USAGE_INSN(BIN(setconstant));
366
+ COLLECT_USAGE_OPERAND(BIN(setconstant), 0, id);
367
+ {
368
+ #line 255 "insns.def"
369
+ vm_check_if_namespace(cbase);
370
+ vm_ensure_not_refinement_module(GET_SELF());
371
+ rb_const_set(cbase, id, val);
372
+
373
+ #line 374 "vm.inc"
374
+ #undef CURRENT_INSN_setconstant
375
+ #undef INSN_IS_SC
376
+ #undef INSN_LABEL
377
+ #undef LABEL_IS_SC
378
+ END_INSN(setconstant);}}}
379
+ INSN_ENTRY(getglobal){START_OF_ORIGINAL_INSN(getglobal);
380
+ {
381
+ VALUE val;
382
+ GENTRY entry = (GENTRY)GET_OPERAND(1);
383
+
384
+ DEBUG_ENTER_INSN("getglobal");
385
+ ADD_PC(1+1);
386
+ PREFETCH(GET_PC());
387
+ #define CURRENT_INSN_getglobal 1
388
+ #define INSN_IS_SC() 0
389
+ #define INSN_LABEL(lab) LABEL_getglobal_##lab
390
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
391
+ COLLECT_USAGE_INSN(BIN(getglobal));
392
+ COLLECT_USAGE_OPERAND(BIN(getglobal), 0, entry);
393
+ {
394
+ #line 271 "insns.def"
395
+ val = GET_GLOBAL((VALUE)entry);
396
+
397
+ #line 398 "vm.inc"
398
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
399
+ PUSH(val);
400
+ #undef CURRENT_INSN_getglobal
401
+ #undef INSN_IS_SC
402
+ #undef INSN_LABEL
403
+ #undef LABEL_IS_SC
404
+ END_INSN(getglobal);}}}
405
+ INSN_ENTRY(setglobal){START_OF_ORIGINAL_INSN(setglobal);
406
+ {
407
+ GENTRY entry = (GENTRY)GET_OPERAND(1);
408
+ VALUE val = TOPN(0);
409
+ DEBUG_ENTER_INSN("setglobal");
410
+ ADD_PC(1+1);
411
+ PREFETCH(GET_PC());
412
+ POPN(1);
413
+ #define CURRENT_INSN_setglobal 1
414
+ #define INSN_IS_SC() 0
415
+ #define INSN_LABEL(lab) LABEL_setglobal_##lab
416
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
417
+ COLLECT_USAGE_INSN(BIN(setglobal));
418
+ COLLECT_USAGE_OPERAND(BIN(setglobal), 0, entry);
419
+ {
420
+ #line 285 "insns.def"
421
+ SET_GLOBAL((VALUE)entry, val);
422
+
423
+ #line 424 "vm.inc"
424
+ #undef CURRENT_INSN_setglobal
425
+ #undef INSN_IS_SC
426
+ #undef INSN_LABEL
427
+ #undef LABEL_IS_SC
428
+ END_INSN(setglobal);}}}
429
+ INSN_ENTRY(putnil){START_OF_ORIGINAL_INSN(putnil);
430
+ {
431
+ VALUE val;
432
+
433
+
434
+ DEBUG_ENTER_INSN("putnil");
435
+ ADD_PC(1+0);
436
+ PREFETCH(GET_PC());
437
+ #define CURRENT_INSN_putnil 1
438
+ #define INSN_IS_SC() 0
439
+ #define INSN_LABEL(lab) LABEL_putnil_##lab
440
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
441
+ COLLECT_USAGE_INSN(BIN(putnil));
442
+ {
443
+ #line 304 "insns.def"
444
+ val = Qnil;
445
+
446
+ #line 447 "vm.inc"
447
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
448
+ PUSH(val);
449
+ #undef CURRENT_INSN_putnil
450
+ #undef INSN_IS_SC
451
+ #undef INSN_LABEL
452
+ #undef LABEL_IS_SC
453
+ END_INSN(putnil);}}}
454
+ INSN_ENTRY(putself){START_OF_ORIGINAL_INSN(putself);
455
+ {
456
+ VALUE val;
457
+
458
+
459
+ DEBUG_ENTER_INSN("putself");
460
+ ADD_PC(1+0);
461
+ PREFETCH(GET_PC());
462
+ #define CURRENT_INSN_putself 1
463
+ #define INSN_IS_SC() 0
464
+ #define INSN_LABEL(lab) LABEL_putself_##lab
465
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
466
+ COLLECT_USAGE_INSN(BIN(putself));
467
+ {
468
+ #line 318 "insns.def"
469
+ val = GET_SELF();
470
+
471
+ #line 472 "vm.inc"
472
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
473
+ PUSH(val);
474
+ #undef CURRENT_INSN_putself
475
+ #undef INSN_IS_SC
476
+ #undef INSN_LABEL
477
+ #undef LABEL_IS_SC
478
+ END_INSN(putself);}}}
479
+ INSN_ENTRY(putobject){START_OF_ORIGINAL_INSN(putobject);
480
+ {
481
+ VALUE val = (VALUE)GET_OPERAND(1);
482
+
483
+ DEBUG_ENTER_INSN("putobject");
484
+ ADD_PC(1+1);
485
+ PREFETCH(GET_PC());
486
+ #define CURRENT_INSN_putobject 1
487
+ #define INSN_IS_SC() 0
488
+ #define INSN_LABEL(lab) LABEL_putobject_##lab
489
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
490
+ COLLECT_USAGE_INSN(BIN(putobject));
491
+ COLLECT_USAGE_OPERAND(BIN(putobject), 0, val);
492
+ {
493
+ #line 334 "insns.def"
494
+ /* */
495
+
496
+ #line 497 "vm.inc"
497
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
498
+ PUSH(val);
499
+ #undef CURRENT_INSN_putobject
500
+ #undef INSN_IS_SC
501
+ #undef INSN_LABEL
502
+ #undef LABEL_IS_SC
503
+ END_INSN(putobject);}}}
504
+ INSN_ENTRY(putspecialobject){START_OF_ORIGINAL_INSN(putspecialobject);
505
+ {
506
+ VALUE val;
507
+ rb_num_t value_type = (rb_num_t)GET_OPERAND(1);
508
+
509
+ DEBUG_ENTER_INSN("putspecialobject");
510
+ ADD_PC(1+1);
511
+ PREFETCH(GET_PC());
512
+ #define CURRENT_INSN_putspecialobject 1
513
+ #define INSN_IS_SC() 0
514
+ #define INSN_LABEL(lab) LABEL_putspecialobject_##lab
515
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
516
+ COLLECT_USAGE_INSN(BIN(putspecialobject));
517
+ COLLECT_USAGE_OPERAND(BIN(putspecialobject), 0, value_type);
518
+ {
519
+ #line 349 "insns.def"
520
+ enum vm_special_object_type type;
521
+
522
+ type = (enum vm_special_object_type)value_type;
523
+ val = vm_get_special_object(GET_EP(), type);
524
+
525
+ #line 526 "vm.inc"
526
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
527
+ PUSH(val);
528
+ #undef CURRENT_INSN_putspecialobject
529
+ #undef INSN_IS_SC
530
+ #undef INSN_LABEL
531
+ #undef LABEL_IS_SC
532
+ END_INSN(putspecialobject);}}}
533
+ INSN_ENTRY(putiseq){START_OF_ORIGINAL_INSN(putiseq);
534
+ {
535
+ VALUE ret;
536
+ ISEQ iseq = (ISEQ)GET_OPERAND(1);
537
+
538
+ DEBUG_ENTER_INSN("putiseq");
539
+ ADD_PC(1+1);
540
+ PREFETCH(GET_PC());
541
+ #define CURRENT_INSN_putiseq 1
542
+ #define INSN_IS_SC() 0
543
+ #define INSN_LABEL(lab) LABEL_putiseq_##lab
544
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
545
+ COLLECT_USAGE_INSN(BIN(putiseq));
546
+ COLLECT_USAGE_OPERAND(BIN(putiseq), 0, iseq);
547
+ {
548
+ #line 366 "insns.def"
549
+ ret = (VALUE)iseq;
550
+
551
+ #line 552 "vm.inc"
552
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
553
+ PUSH(ret);
554
+ #undef CURRENT_INSN_putiseq
555
+ #undef INSN_IS_SC
556
+ #undef INSN_LABEL
557
+ #undef LABEL_IS_SC
558
+ END_INSN(putiseq);}}}
559
+ INSN_ENTRY(putstring){START_OF_ORIGINAL_INSN(putstring);
560
+ {
561
+ VALUE val;
562
+ VALUE str = (VALUE)GET_OPERAND(1);
563
+
564
+ DEBUG_ENTER_INSN("putstring");
565
+ ADD_PC(1+1);
566
+ PREFETCH(GET_PC());
567
+ #define CURRENT_INSN_putstring 1
568
+ #define INSN_IS_SC() 0
569
+ #define INSN_LABEL(lab) LABEL_putstring_##lab
570
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
571
+ COLLECT_USAGE_INSN(BIN(putstring));
572
+ COLLECT_USAGE_OPERAND(BIN(putstring), 0, str);
573
+ {
574
+ #line 380 "insns.def"
575
+ val = rb_str_resurrect(str);
576
+
577
+ #line 578 "vm.inc"
578
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
579
+ PUSH(val);
580
+ #undef CURRENT_INSN_putstring
581
+ #undef INSN_IS_SC
582
+ #undef INSN_LABEL
583
+ #undef LABEL_IS_SC
584
+ END_INSN(putstring);}}}
585
+ INSN_ENTRY(concatstrings){START_OF_ORIGINAL_INSN(concatstrings);
586
+ {
587
+ VALUE val;
588
+ rb_num_t num = (rb_num_t)GET_OPERAND(1);
589
+
590
+ DEBUG_ENTER_INSN("concatstrings");
591
+ ADD_PC(1+1);
592
+ PREFETCH(GET_PC());
593
+ #define CURRENT_INSN_concatstrings 1
594
+ #define INSN_IS_SC() 0
595
+ #define INSN_LABEL(lab) LABEL_concatstrings_##lab
596
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
597
+ COLLECT_USAGE_INSN(BIN(concatstrings));
598
+ COLLECT_USAGE_OPERAND(BIN(concatstrings), 0, num);
599
+ {
600
+ #line 394 "insns.def"
601
+ val = rb_str_concat_literals(num, STACK_ADDR_FROM_TOP(num));
602
+ POPN(num);
603
+
604
+ #line 605 "vm.inc"
605
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
606
+ PUSH(val);
607
+ #undef CURRENT_INSN_concatstrings
608
+ #undef INSN_IS_SC
609
+ #undef INSN_LABEL
610
+ #undef LABEL_IS_SC
611
+ END_INSN(concatstrings);}}}
612
+ INSN_ENTRY(tostring){START_OF_ORIGINAL_INSN(tostring);
613
+ {
614
+
615
+ VALUE val = TOPN(1);
616
+ VALUE str = TOPN(0);
617
+ DEBUG_ENTER_INSN("tostring");
618
+ ADD_PC(1+0);
619
+ PREFETCH(GET_PC());
620
+ POPN(2);
621
+ #define CURRENT_INSN_tostring 1
622
+ #define INSN_IS_SC() 0
623
+ #define INSN_LABEL(lab) LABEL_tostring_##lab
624
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
625
+ COLLECT_USAGE_INSN(BIN(tostring));
626
+ {
627
+ #line 409 "insns.def"
628
+ VALUE rb_obj_as_string_result(VALUE str, VALUE obj);
629
+ val = rb_obj_as_string_result(str, val);
630
+
631
+ #line 632 "vm.inc"
632
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
633
+ PUSH(val);
634
+ #undef CURRENT_INSN_tostring
635
+ #undef INSN_IS_SC
636
+ #undef INSN_LABEL
637
+ #undef LABEL_IS_SC
638
+ END_INSN(tostring);}}}
639
+ INSN_ENTRY(freezestring){START_OF_ORIGINAL_INSN(freezestring);
640
+ {
641
+ VALUE debug_info = (VALUE)GET_OPERAND(1);
642
+ VALUE str = TOPN(0);
643
+ DEBUG_ENTER_INSN("freezestring");
644
+ ADD_PC(1+1);
645
+ PREFETCH(GET_PC());
646
+ POPN(1);
647
+ #define CURRENT_INSN_freezestring 1
648
+ #define INSN_IS_SC() 0
649
+ #define INSN_LABEL(lab) LABEL_freezestring_##lab
650
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
651
+ COLLECT_USAGE_INSN(BIN(freezestring));
652
+ COLLECT_USAGE_OPERAND(BIN(freezestring), 0, debug_info);
653
+ {
654
+ #line 424 "insns.def"
655
+ vm_freezestring(str, debug_info);
656
+
657
+ #line 658 "vm.inc"
658
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
659
+ PUSH(str);
660
+ #undef CURRENT_INSN_freezestring
661
+ #undef INSN_IS_SC
662
+ #undef INSN_LABEL
663
+ #undef LABEL_IS_SC
664
+ END_INSN(freezestring);}}}
665
+ INSN_ENTRY(toregexp){START_OF_ORIGINAL_INSN(toregexp);
666
+ {
667
+ VALUE val;
668
+ rb_num_t cnt = (rb_num_t)GET_OPERAND(2);
669
+ rb_num_t opt = (rb_num_t)GET_OPERAND(1);
670
+
671
+ DEBUG_ENTER_INSN("toregexp");
672
+ ADD_PC(1+2);
673
+ PREFETCH(GET_PC());
674
+ #define CURRENT_INSN_toregexp 1
675
+ #define INSN_IS_SC() 0
676
+ #define INSN_LABEL(lab) LABEL_toregexp_##lab
677
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
678
+ COLLECT_USAGE_INSN(BIN(toregexp));
679
+ COLLECT_USAGE_OPERAND(BIN(toregexp), 0, opt);
680
+ COLLECT_USAGE_OPERAND(BIN(toregexp), 1, cnt);
681
+ {
682
+ #line 440 "insns.def"
683
+ VALUE rb_reg_new_ary(VALUE ary, int options);
684
+ VALUE rb_ary_tmp_new_from_values(VALUE, long, const VALUE *);
685
+ const VALUE ary = rb_ary_tmp_new_from_values(0, cnt, STACK_ADDR_FROM_TOP(cnt));
686
+ POPN(cnt);
687
+ val = rb_reg_new_ary(ary, (int)opt);
688
+ rb_ary_clear(ary);
689
+
690
+ #line 691 "vm.inc"
691
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
692
+ PUSH(val);
693
+ #undef CURRENT_INSN_toregexp
694
+ #undef INSN_IS_SC
695
+ #undef INSN_LABEL
696
+ #undef LABEL_IS_SC
697
+ END_INSN(toregexp);}}}
698
+ INSN_ENTRY(intern){START_OF_ORIGINAL_INSN(intern);
699
+ {
700
+ VALUE sym;
701
+
702
+ VALUE str = TOPN(0);
703
+ DEBUG_ENTER_INSN("intern");
704
+ ADD_PC(1+0);
705
+ PREFETCH(GET_PC());
706
+ POPN(1);
707
+ #define CURRENT_INSN_intern 1
708
+ #define INSN_IS_SC() 0
709
+ #define INSN_LABEL(lab) LABEL_intern_##lab
710
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
711
+ COLLECT_USAGE_INSN(BIN(intern));
712
+ {
713
+ #line 459 "insns.def"
714
+ sym = rb_str_intern(str);
715
+
716
+ #line 717 "vm.inc"
717
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
718
+ PUSH(sym);
719
+ #undef CURRENT_INSN_intern
720
+ #undef INSN_IS_SC
721
+ #undef INSN_LABEL
722
+ #undef LABEL_IS_SC
723
+ END_INSN(intern);}}}
724
+ INSN_ENTRY(newarray){START_OF_ORIGINAL_INSN(newarray);
725
+ {
726
+ VALUE val;
727
+ rb_num_t num = (rb_num_t)GET_OPERAND(1);
728
+
729
+ DEBUG_ENTER_INSN("newarray");
730
+ ADD_PC(1+1);
731
+ PREFETCH(GET_PC());
732
+ #define CURRENT_INSN_newarray 1
733
+ #define INSN_IS_SC() 0
734
+ #define INSN_LABEL(lab) LABEL_newarray_##lab
735
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
736
+ COLLECT_USAGE_INSN(BIN(newarray));
737
+ COLLECT_USAGE_OPERAND(BIN(newarray), 0, num);
738
+ {
739
+ #line 473 "insns.def"
740
+ val = rb_ary_new4(num, STACK_ADDR_FROM_TOP(num));
741
+ POPN(num);
742
+
743
+ #line 744 "vm.inc"
744
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
745
+ PUSH(val);
746
+ #undef CURRENT_INSN_newarray
747
+ #undef INSN_IS_SC
748
+ #undef INSN_LABEL
749
+ #undef LABEL_IS_SC
750
+ END_INSN(newarray);}}}
751
+ INSN_ENTRY(duparray){START_OF_ORIGINAL_INSN(duparray);
752
+ {
753
+ VALUE val;
754
+ VALUE ary = (VALUE)GET_OPERAND(1);
755
+
756
+ DEBUG_ENTER_INSN("duparray");
757
+ ADD_PC(1+1);
758
+ PREFETCH(GET_PC());
759
+ #define CURRENT_INSN_duparray 1
760
+ #define INSN_IS_SC() 0
761
+ #define INSN_LABEL(lab) LABEL_duparray_##lab
762
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
763
+ COLLECT_USAGE_INSN(BIN(duparray));
764
+ COLLECT_USAGE_OPERAND(BIN(duparray), 0, ary);
765
+ {
766
+ #line 488 "insns.def"
767
+ val = rb_ary_resurrect(ary);
768
+
769
+ #line 770 "vm.inc"
770
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
771
+ PUSH(val);
772
+ #undef CURRENT_INSN_duparray
773
+ #undef INSN_IS_SC
774
+ #undef INSN_LABEL
775
+ #undef LABEL_IS_SC
776
+ END_INSN(duparray);}}}
777
+ INSN_ENTRY(expandarray){START_OF_ORIGINAL_INSN(expandarray);
778
+ {
779
+ rb_num_t flag = (rb_num_t)GET_OPERAND(2);
780
+ rb_num_t num = (rb_num_t)GET_OPERAND(1);
781
+ VALUE ary = TOPN(0);
782
+ DEBUG_ENTER_INSN("expandarray");
783
+ ADD_PC(1+2);
784
+ PREFETCH(GET_PC());
785
+ POPN(1);
786
+ #define CURRENT_INSN_expandarray 1
787
+ #define INSN_IS_SC() 0
788
+ #define INSN_LABEL(lab) LABEL_expandarray_##lab
789
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
790
+ COLLECT_USAGE_INSN(BIN(expandarray));
791
+ COLLECT_USAGE_OPERAND(BIN(expandarray), 0, num);
792
+ COLLECT_USAGE_OPERAND(BIN(expandarray), 1, flag);
793
+ {
794
+ #line 516 "insns.def"
795
+ vm_expandarray(GET_CFP(), ary, num, (int)flag);
796
+
797
+ #line 798 "vm.inc"
798
+ #undef CURRENT_INSN_expandarray
799
+ #undef INSN_IS_SC
800
+ #undef INSN_LABEL
801
+ #undef LABEL_IS_SC
802
+ END_INSN(expandarray);}}}
803
+ INSN_ENTRY(concatarray){START_OF_ORIGINAL_INSN(concatarray);
804
+ {
805
+ VALUE ary;
806
+
807
+ VALUE ary1 = TOPN(1);
808
+ VALUE ary2 = TOPN(0);
809
+ DEBUG_ENTER_INSN("concatarray");
810
+ ADD_PC(1+0);
811
+ PREFETCH(GET_PC());
812
+ POPN(2);
813
+ #define CURRENT_INSN_concatarray 1
814
+ #define INSN_IS_SC() 0
815
+ #define INSN_LABEL(lab) LABEL_concatarray_##lab
816
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
817
+ COLLECT_USAGE_INSN(BIN(concatarray));
818
+ {
819
+ #line 530 "insns.def"
820
+ ary = vm_concat_array(ary1, ary2);
821
+
822
+ #line 823 "vm.inc"
823
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
824
+ PUSH(ary);
825
+ #undef CURRENT_INSN_concatarray
826
+ #undef INSN_IS_SC
827
+ #undef INSN_LABEL
828
+ #undef LABEL_IS_SC
829
+ END_INSN(concatarray);}}}
830
+ INSN_ENTRY(splatarray){START_OF_ORIGINAL_INSN(splatarray);
831
+ {
832
+ VALUE obj;
833
+ VALUE flag = (VALUE)GET_OPERAND(1);
834
+ VALUE ary = TOPN(0);
835
+ DEBUG_ENTER_INSN("splatarray");
836
+ ADD_PC(1+1);
837
+ PREFETCH(GET_PC());
838
+ POPN(1);
839
+ #define CURRENT_INSN_splatarray 1
840
+ #define INSN_IS_SC() 0
841
+ #define INSN_LABEL(lab) LABEL_splatarray_##lab
842
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
843
+ COLLECT_USAGE_INSN(BIN(splatarray));
844
+ COLLECT_USAGE_OPERAND(BIN(splatarray), 0, flag);
845
+ {
846
+ #line 544 "insns.def"
847
+ obj = vm_splat_array(flag, ary);
848
+
849
+ #line 850 "vm.inc"
850
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
851
+ PUSH(obj);
852
+ #undef CURRENT_INSN_splatarray
853
+ #undef INSN_IS_SC
854
+ #undef INSN_LABEL
855
+ #undef LABEL_IS_SC
856
+ END_INSN(splatarray);}}}
857
+ INSN_ENTRY(newhash){START_OF_ORIGINAL_INSN(newhash);
858
+ {
859
+ VALUE val;
860
+ rb_num_t num = (rb_num_t)GET_OPERAND(1);
861
+
862
+ DEBUG_ENTER_INSN("newhash");
863
+ ADD_PC(1+1);
864
+ PREFETCH(GET_PC());
865
+ #define CURRENT_INSN_newhash 1
866
+ #define INSN_IS_SC() 0
867
+ #define INSN_LABEL(lab) LABEL_newhash_##lab
868
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
869
+ COLLECT_USAGE_INSN(BIN(newhash));
870
+ COLLECT_USAGE_OPERAND(BIN(newhash), 0, num);
871
+ {
872
+ #line 559 "insns.def"
873
+ RUBY_DTRACE_CREATE_HOOK(HASH, num);
874
+
875
+ val = rb_hash_new_with_size(num / 2);
876
+
877
+ if (num) {
878
+ rb_hash_bulk_insert(num, STACK_ADDR_FROM_TOP(num), val);
879
+ }
880
+ POPN(num);
881
+
882
+ #line 883 "vm.inc"
883
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
884
+ PUSH(val);
885
+ #undef CURRENT_INSN_newhash
886
+ #undef INSN_IS_SC
887
+ #undef INSN_LABEL
888
+ #undef LABEL_IS_SC
889
+ END_INSN(newhash);}}}
890
+ INSN_ENTRY(newrange){START_OF_ORIGINAL_INSN(newrange);
891
+ {
892
+ VALUE val;
893
+ rb_num_t flag = (rb_num_t)GET_OPERAND(1);
894
+ VALUE low = TOPN(1);
895
+ VALUE high = TOPN(0);
896
+ DEBUG_ENTER_INSN("newrange");
897
+ ADD_PC(1+1);
898
+ PREFETCH(GET_PC());
899
+ POPN(2);
900
+ #define CURRENT_INSN_newrange 1
901
+ #define INSN_IS_SC() 0
902
+ #define INSN_LABEL(lab) LABEL_newrange_##lab
903
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
904
+ COLLECT_USAGE_INSN(BIN(newrange));
905
+ COLLECT_USAGE_OPERAND(BIN(newrange), 0, flag);
906
+ {
907
+ #line 580 "insns.def"
908
+ val = rb_range_new(low, high, (int)flag);
909
+
910
+ #line 911 "vm.inc"
911
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
912
+ PUSH(val);
913
+ #undef CURRENT_INSN_newrange
914
+ #undef INSN_IS_SC
915
+ #undef INSN_LABEL
916
+ #undef LABEL_IS_SC
917
+ END_INSN(newrange);}}}
918
+ INSN_ENTRY(pop){START_OF_ORIGINAL_INSN(pop);
919
+ {
920
+
921
+ VALUE val = TOPN(0);
922
+ DEBUG_ENTER_INSN("pop");
923
+ ADD_PC(1+0);
924
+ PREFETCH(GET_PC());
925
+ POPN(1);
926
+ #define CURRENT_INSN_pop 1
927
+ #define INSN_IS_SC() 0
928
+ #define INSN_LABEL(lab) LABEL_pop_##lab
929
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
930
+ COLLECT_USAGE_INSN(BIN(pop));
931
+ {
932
+ #line 598 "insns.def"
933
+ (void)val;
934
+ /* none */
935
+
936
+ #line 937 "vm.inc"
937
+ #undef CURRENT_INSN_pop
938
+ #undef INSN_IS_SC
939
+ #undef INSN_LABEL
940
+ #undef LABEL_IS_SC
941
+ END_INSN(pop);}}}
942
+ INSN_ENTRY(dup){START_OF_ORIGINAL_INSN(dup);
943
+ {
944
+ VALUE val2;
945
+ VALUE val1;
946
+
947
+ VALUE val = TOPN(0);
948
+ DEBUG_ENTER_INSN("dup");
949
+ ADD_PC(1+0);
950
+ PREFETCH(GET_PC());
951
+ POPN(1);
952
+ #define CURRENT_INSN_dup 1
953
+ #define INSN_IS_SC() 0
954
+ #define INSN_LABEL(lab) LABEL_dup_##lab
955
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
956
+ COLLECT_USAGE_INSN(BIN(dup));
957
+ {
958
+ #line 613 "insns.def"
959
+ val1 = val2 = val;
960
+
961
+ #line 962 "vm.inc"
962
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 2);
963
+ PUSH(val1);
964
+ PUSH(val2);
965
+ #undef CURRENT_INSN_dup
966
+ #undef INSN_IS_SC
967
+ #undef INSN_LABEL
968
+ #undef LABEL_IS_SC
969
+ END_INSN(dup);}}}
970
+ INSN_ENTRY(dupn){START_OF_ORIGINAL_INSN(dupn);
971
+ {
972
+ rb_num_t n = (rb_num_t)GET_OPERAND(1);
973
+
974
+ DEBUG_ENTER_INSN("dupn");
975
+ ADD_PC(1+1);
976
+ PREFETCH(GET_PC());
977
+ #define CURRENT_INSN_dupn 1
978
+ #define INSN_IS_SC() 0
979
+ #define INSN_LABEL(lab) LABEL_dupn_##lab
980
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
981
+ COLLECT_USAGE_INSN(BIN(dupn));
982
+ COLLECT_USAGE_OPERAND(BIN(dupn), 0, n);
983
+ {
984
+ #line 627 "insns.def"
985
+ void *dst = GET_SP();
986
+ void *src = STACK_ADDR_FROM_TOP(n);
987
+
988
+ INC_SP(n); /* alloca */
989
+ MEMCPY(dst, src, VALUE, n);
990
+
991
+ #line 992 "vm.inc"
992
+ #undef CURRENT_INSN_dupn
993
+ #undef INSN_IS_SC
994
+ #undef INSN_LABEL
995
+ #undef LABEL_IS_SC
996
+ END_INSN(dupn);}}}
997
+ INSN_ENTRY(swap){START_OF_ORIGINAL_INSN(swap);
998
+ {
999
+
1000
+ VALUE val = TOPN(1);
1001
+ VALUE obj = TOPN(0);
1002
+ DEBUG_ENTER_INSN("swap");
1003
+ ADD_PC(1+0);
1004
+ PREFETCH(GET_PC());
1005
+ POPN(2);
1006
+ #define CURRENT_INSN_swap 1
1007
+ #define INSN_IS_SC() 0
1008
+ #define INSN_LABEL(lab) LABEL_swap_##lab
1009
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1010
+ COLLECT_USAGE_INSN(BIN(swap));
1011
+ {
1012
+ #line 646 "insns.def"
1013
+ /* none */
1014
+
1015
+ #line 1016 "vm.inc"
1016
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 2);
1017
+ PUSH(obj);
1018
+ PUSH(val);
1019
+ #undef CURRENT_INSN_swap
1020
+ #undef INSN_IS_SC
1021
+ #undef INSN_LABEL
1022
+ #undef LABEL_IS_SC
1023
+ END_INSN(swap);}}}
1024
+ INSN_ENTRY(reverse){START_OF_ORIGINAL_INSN(reverse);
1025
+ {
1026
+ rb_num_t n = (rb_num_t)GET_OPERAND(1);
1027
+
1028
+ DEBUG_ENTER_INSN("reverse");
1029
+ ADD_PC(1+1);
1030
+ PREFETCH(GET_PC());
1031
+ #define CURRENT_INSN_reverse 1
1032
+ #define INSN_IS_SC() 0
1033
+ #define INSN_LABEL(lab) LABEL_reverse_##lab
1034
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1035
+ COLLECT_USAGE_INSN(BIN(reverse));
1036
+ COLLECT_USAGE_OPERAND(BIN(reverse), 0, n);
1037
+ {
1038
+ #line 660 "insns.def"
1039
+ rb_num_t i;
1040
+ VALUE *sp = STACK_ADDR_FROM_TOP(n);
1041
+
1042
+ for (i=0; i<n/2; i++) {
1043
+ VALUE v0 = sp[i];
1044
+ VALUE v1 = TOPN(i);
1045
+ sp[i] = v1;
1046
+ TOPN(i) = v0;
1047
+ }
1048
+
1049
+ #line 1050 "vm.inc"
1050
+ #undef CURRENT_INSN_reverse
1051
+ #undef INSN_IS_SC
1052
+ #undef INSN_LABEL
1053
+ #undef LABEL_IS_SC
1054
+ END_INSN(reverse);}}}
1055
+ INSN_ENTRY(reput){START_OF_ORIGINAL_INSN(reput);
1056
+ {
1057
+
1058
+ VALUE val = TOPN(0);
1059
+ DEBUG_ENTER_INSN("reput");
1060
+ ADD_PC(1+0);
1061
+ PREFETCH(GET_PC());
1062
+ POPN(1);
1063
+ #define CURRENT_INSN_reput 1
1064
+ #define INSN_IS_SC() 0
1065
+ #define INSN_LABEL(lab) LABEL_reput_##lab
1066
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1067
+ COLLECT_USAGE_INSN(BIN(reput));
1068
+ {
1069
+ #line 682 "insns.def"
1070
+ /* none */
1071
+
1072
+ #line 1073 "vm.inc"
1073
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1074
+ PUSH(val);
1075
+ #undef CURRENT_INSN_reput
1076
+ #undef INSN_IS_SC
1077
+ #undef INSN_LABEL
1078
+ #undef LABEL_IS_SC
1079
+ END_INSN(reput);}}}
1080
+ INSN_ENTRY(topn){START_OF_ORIGINAL_INSN(topn);
1081
+ {
1082
+ VALUE val;
1083
+ rb_num_t n = (rb_num_t)GET_OPERAND(1);
1084
+
1085
+ DEBUG_ENTER_INSN("topn");
1086
+ ADD_PC(1+1);
1087
+ PREFETCH(GET_PC());
1088
+ #define CURRENT_INSN_topn 1
1089
+ #define INSN_IS_SC() 0
1090
+ #define INSN_LABEL(lab) LABEL_topn_##lab
1091
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1092
+ COLLECT_USAGE_INSN(BIN(topn));
1093
+ COLLECT_USAGE_OPERAND(BIN(topn), 0, n);
1094
+ {
1095
+ #line 696 "insns.def"
1096
+ val = TOPN(n);
1097
+
1098
+ #line 1099 "vm.inc"
1099
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1100
+ PUSH(val);
1101
+ #undef CURRENT_INSN_topn
1102
+ #undef INSN_IS_SC
1103
+ #undef INSN_LABEL
1104
+ #undef LABEL_IS_SC
1105
+ END_INSN(topn);}}}
1106
+ INSN_ENTRY(setn){START_OF_ORIGINAL_INSN(setn);
1107
+ {
1108
+ rb_num_t n = (rb_num_t)GET_OPERAND(1);
1109
+ VALUE val = TOPN(0);
1110
+ DEBUG_ENTER_INSN("setn");
1111
+ ADD_PC(1+1);
1112
+ PREFETCH(GET_PC());
1113
+ POPN(1);
1114
+ #define CURRENT_INSN_setn 1
1115
+ #define INSN_IS_SC() 0
1116
+ #define INSN_LABEL(lab) LABEL_setn_##lab
1117
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1118
+ COLLECT_USAGE_INSN(BIN(setn));
1119
+ COLLECT_USAGE_OPERAND(BIN(setn), 0, n);
1120
+ {
1121
+ #line 710 "insns.def"
1122
+ TOPN(n-1) = val;
1123
+
1124
+ #line 1125 "vm.inc"
1125
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1126
+ PUSH(val);
1127
+ #undef CURRENT_INSN_setn
1128
+ #undef INSN_IS_SC
1129
+ #undef INSN_LABEL
1130
+ #undef LABEL_IS_SC
1131
+ END_INSN(setn);}}}
1132
+ INSN_ENTRY(adjuststack){START_OF_ORIGINAL_INSN(adjuststack);
1133
+ {
1134
+ rb_num_t n = (rb_num_t)GET_OPERAND(1);
1135
+
1136
+ DEBUG_ENTER_INSN("adjuststack");
1137
+ ADD_PC(1+1);
1138
+ PREFETCH(GET_PC());
1139
+ #define CURRENT_INSN_adjuststack 1
1140
+ #define INSN_IS_SC() 0
1141
+ #define INSN_LABEL(lab) LABEL_adjuststack_##lab
1142
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1143
+ COLLECT_USAGE_INSN(BIN(adjuststack));
1144
+ COLLECT_USAGE_OPERAND(BIN(adjuststack), 0, n);
1145
+ {
1146
+ #line 724 "insns.def"
1147
+ DEC_SP(n);
1148
+
1149
+ #line 1150 "vm.inc"
1150
+ #undef CURRENT_INSN_adjuststack
1151
+ #undef INSN_IS_SC
1152
+ #undef INSN_LABEL
1153
+ #undef LABEL_IS_SC
1154
+ END_INSN(adjuststack);}}}
1155
+ INSN_ENTRY(defined){START_OF_ORIGINAL_INSN(defined);
1156
+ {
1157
+ VALUE val;
1158
+ VALUE needstr = (VALUE)GET_OPERAND(3);
1159
+ VALUE obj = (VALUE)GET_OPERAND(2);
1160
+ rb_num_t op_type = (rb_num_t)GET_OPERAND(1);
1161
+ VALUE v = TOPN(0);
1162
+ DEBUG_ENTER_INSN("defined");
1163
+ ADD_PC(1+3);
1164
+ PREFETCH(GET_PC());
1165
+ POPN(1);
1166
+ #define CURRENT_INSN_defined 1
1167
+ #define INSN_IS_SC() 0
1168
+ #define INSN_LABEL(lab) LABEL_defined_##lab
1169
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1170
+ COLLECT_USAGE_INSN(BIN(defined));
1171
+ COLLECT_USAGE_OPERAND(BIN(defined), 0, op_type);
1172
+ COLLECT_USAGE_OPERAND(BIN(defined), 1, obj);
1173
+ COLLECT_USAGE_OPERAND(BIN(defined), 2, needstr);
1174
+ {
1175
+ #line 743 "insns.def"
1176
+ val = vm_defined(ec, GET_CFP(), op_type, obj, needstr, v);
1177
+
1178
+ #line 1179 "vm.inc"
1179
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1180
+ PUSH(val);
1181
+ #undef CURRENT_INSN_defined
1182
+ #undef INSN_IS_SC
1183
+ #undef INSN_LABEL
1184
+ #undef LABEL_IS_SC
1185
+ END_INSN(defined);}}}
1186
+ INSN_ENTRY(checkmatch){START_OF_ORIGINAL_INSN(checkmatch);
1187
+ {
1188
+ VALUE result;
1189
+ rb_num_t flag = (rb_num_t)GET_OPERAND(1);
1190
+ VALUE target = TOPN(1);
1191
+ VALUE pattern = TOPN(0);
1192
+ DEBUG_ENTER_INSN("checkmatch");
1193
+ ADD_PC(1+1);
1194
+ PREFETCH(GET_PC());
1195
+ POPN(2);
1196
+ #define CURRENT_INSN_checkmatch 1
1197
+ #define INSN_IS_SC() 0
1198
+ #define INSN_LABEL(lab) LABEL_checkmatch_##lab
1199
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1200
+ COLLECT_USAGE_INSN(BIN(checkmatch));
1201
+ COLLECT_USAGE_OPERAND(BIN(checkmatch), 0, flag);
1202
+ {
1203
+ #line 762 "insns.def"
1204
+ result = vm_check_match(ec, target, pattern, flag);
1205
+
1206
+ #line 1207 "vm.inc"
1207
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1208
+ PUSH(result);
1209
+ #undef CURRENT_INSN_checkmatch
1210
+ #undef INSN_IS_SC
1211
+ #undef INSN_LABEL
1212
+ #undef LABEL_IS_SC
1213
+ END_INSN(checkmatch);}}}
1214
+ INSN_ENTRY(checkkeyword){START_OF_ORIGINAL_INSN(checkkeyword);
1215
+ {
1216
+ VALUE ret;
1217
+ lindex_t keyword_index = (lindex_t)GET_OPERAND(2);
1218
+ lindex_t kw_bits_index = (lindex_t)GET_OPERAND(1);
1219
+
1220
+ DEBUG_ENTER_INSN("checkkeyword");
1221
+ ADD_PC(1+2);
1222
+ PREFETCH(GET_PC());
1223
+ #define CURRENT_INSN_checkkeyword 1
1224
+ #define INSN_IS_SC() 0
1225
+ #define INSN_LABEL(lab) LABEL_checkkeyword_##lab
1226
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1227
+ COLLECT_USAGE_INSN(BIN(checkkeyword));
1228
+ COLLECT_USAGE_OPERAND(BIN(checkkeyword), 0, kw_bits_index);
1229
+ COLLECT_USAGE_OPERAND(BIN(checkkeyword), 1, keyword_index);
1230
+ {
1231
+ #line 776 "insns.def"
1232
+ ret = vm_check_keyword(kw_bits_index, keyword_index, GET_EP());
1233
+
1234
+ #line 1235 "vm.inc"
1235
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1236
+ PUSH(ret);
1237
+ #undef CURRENT_INSN_checkkeyword
1238
+ #undef INSN_IS_SC
1239
+ #undef INSN_LABEL
1240
+ #undef LABEL_IS_SC
1241
+ END_INSN(checkkeyword);}}}
1242
+ INSN_ENTRY(tracecoverage){START_OF_ORIGINAL_INSN(tracecoverage);
1243
+ {
1244
+ VALUE data = (VALUE)GET_OPERAND(2);
1245
+ rb_num_t nf = (rb_num_t)GET_OPERAND(1);
1246
+
1247
+ DEBUG_ENTER_INSN("tracecoverage");
1248
+ ADD_PC(1+2);
1249
+ PREFETCH(GET_PC());
1250
+ #define CURRENT_INSN_tracecoverage 1
1251
+ #define INSN_IS_SC() 0
1252
+ #define INSN_LABEL(lab) LABEL_tracecoverage_##lab
1253
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1254
+ COLLECT_USAGE_INSN(BIN(tracecoverage));
1255
+ COLLECT_USAGE_OPERAND(BIN(tracecoverage), 0, nf);
1256
+ COLLECT_USAGE_OPERAND(BIN(tracecoverage), 1, data);
1257
+ {
1258
+ #line 790 "insns.def"
1259
+ rb_event_flag_t flag = (rb_event_flag_t)nf;
1260
+
1261
+ vm_dtrace(flag, ec);
1262
+ EXEC_EVENT_HOOK(ec, flag, GET_SELF(), 0, 0, 0 /* id and klass are resolved at callee */, data);
1263
+
1264
+ #line 1265 "vm.inc"
1265
+ #undef CURRENT_INSN_tracecoverage
1266
+ #undef INSN_IS_SC
1267
+ #undef INSN_LABEL
1268
+ #undef LABEL_IS_SC
1269
+ END_INSN(tracecoverage);}}}
1270
+ INSN_ENTRY(defineclass){START_OF_ORIGINAL_INSN(defineclass);
1271
+ {
1272
+ VALUE val;
1273
+ rb_num_t flags = (rb_num_t)GET_OPERAND(3);
1274
+ ISEQ class_iseq = (ISEQ)GET_OPERAND(2);
1275
+ ID id = (ID)GET_OPERAND(1);
1276
+ VALUE cbase = TOPN(1);
1277
+ VALUE super = TOPN(0);
1278
+ DEBUG_ENTER_INSN("defineclass");
1279
+ ADD_PC(1+3);
1280
+ PREFETCH(GET_PC());
1281
+ POPN(2);
1282
+ #define CURRENT_INSN_defineclass 1
1283
+ #define INSN_IS_SC() 0
1284
+ #define INSN_LABEL(lab) LABEL_defineclass_##lab
1285
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1286
+ COLLECT_USAGE_INSN(BIN(defineclass));
1287
+ COLLECT_USAGE_OPERAND(BIN(defineclass), 0, id);
1288
+ COLLECT_USAGE_OPERAND(BIN(defineclass), 1, class_iseq);
1289
+ COLLECT_USAGE_OPERAND(BIN(defineclass), 2, flags);
1290
+ {
1291
+ #line 815 "insns.def"
1292
+ VALUE klass = vm_find_or_create_class_by_id(id, flags, cbase, super);
1293
+
1294
+ rb_iseq_check(class_iseq);
1295
+
1296
+ /* enter scope */
1297
+ vm_push_frame(ec, class_iseq, VM_FRAME_MAGIC_CLASS | VM_ENV_FLAG_LOCAL, klass,
1298
+ GET_BLOCK_HANDLER(),
1299
+ (VALUE)vm_cref_push(ec, klass, NULL, FALSE),
1300
+ class_iseq->body->iseq_encoded, GET_SP(),
1301
+ class_iseq->body->local_table_size,
1302
+ class_iseq->body->stack_max);
1303
+ RESTORE_REGS();
1304
+ NEXT_INSN();
1305
+
1306
+ #line 1307 "vm.inc"
1307
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1308
+ PUSH(val);
1309
+ #undef CURRENT_INSN_defineclass
1310
+ #undef INSN_IS_SC
1311
+ #undef INSN_LABEL
1312
+ #undef LABEL_IS_SC
1313
+ END_INSN(defineclass);}}}
1314
+ INSN_ENTRY(send){START_OF_ORIGINAL_INSN(send);
1315
+ {
1316
+ VALUE val;
1317
+ ISEQ blockiseq = (ISEQ)GET_OPERAND(3);
1318
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
1319
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
1320
+
1321
+ DEBUG_ENTER_INSN("send");
1322
+ ADD_PC(1+3);
1323
+ PREFETCH(GET_PC());
1324
+ #define CURRENT_INSN_send 1
1325
+ #define INSN_IS_SC() 0
1326
+ #define INSN_LABEL(lab) LABEL_send_##lab
1327
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1328
+ COLLECT_USAGE_INSN(BIN(send));
1329
+ COLLECT_USAGE_OPERAND(BIN(send), 0, ci);
1330
+ COLLECT_USAGE_OPERAND(BIN(send), 1, cc);
1331
+ COLLECT_USAGE_OPERAND(BIN(send), 2, blockiseq);
1332
+ {
1333
+ #line 846 "insns.def"
1334
+ struct rb_calling_info calling;
1335
+
1336
+ vm_caller_setup_arg_block(ec, reg_cfp, &calling, ci, blockiseq, FALSE);
1337
+ vm_search_method(ci, cc, calling.recv = TOPN(calling.argc = ci->orig_argc));
1338
+ CALL_METHOD(&calling, ci, cc);
1339
+
1340
+ #line 1341 "vm.inc"
1341
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1342
+ PUSH(val);
1343
+ #undef CURRENT_INSN_send
1344
+ #undef INSN_IS_SC
1345
+ #undef INSN_LABEL
1346
+ #undef LABEL_IS_SC
1347
+ END_INSN(send);}}}
1348
+ INSN_ENTRY(opt_str_freeze){START_OF_ORIGINAL_INSN(opt_str_freeze);
1349
+ {
1350
+ VALUE val;
1351
+ VALUE str = (VALUE)GET_OPERAND(1);
1352
+
1353
+ DEBUG_ENTER_INSN("opt_str_freeze");
1354
+ ADD_PC(1+1);
1355
+ PREFETCH(GET_PC());
1356
+ #define CURRENT_INSN_opt_str_freeze 1
1357
+ #define INSN_IS_SC() 0
1358
+ #define INSN_LABEL(lab) LABEL_opt_str_freeze_##lab
1359
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1360
+ COLLECT_USAGE_INSN(BIN(opt_str_freeze));
1361
+ COLLECT_USAGE_OPERAND(BIN(opt_str_freeze), 0, str);
1362
+ {
1363
+ #line 859 "insns.def"
1364
+ if (BASIC_OP_UNREDEFINED_P(BOP_FREEZE, STRING_REDEFINED_OP_FLAG)) {
1365
+ val = str;
1366
+ }
1367
+ else {
1368
+ val = rb_funcall(rb_str_resurrect(str), idFreeze, 0);
1369
+ }
1370
+
1371
+ #line 1372 "vm.inc"
1372
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1373
+ PUSH(val);
1374
+ #undef CURRENT_INSN_opt_str_freeze
1375
+ #undef INSN_IS_SC
1376
+ #undef INSN_LABEL
1377
+ #undef LABEL_IS_SC
1378
+ END_INSN(opt_str_freeze);}}}
1379
+ INSN_ENTRY(opt_str_uminus){START_OF_ORIGINAL_INSN(opt_str_uminus);
1380
+ {
1381
+ VALUE val;
1382
+ VALUE str = (VALUE)GET_OPERAND(1);
1383
+
1384
+ DEBUG_ENTER_INSN("opt_str_uminus");
1385
+ ADD_PC(1+1);
1386
+ PREFETCH(GET_PC());
1387
+ #define CURRENT_INSN_opt_str_uminus 1
1388
+ #define INSN_IS_SC() 0
1389
+ #define INSN_LABEL(lab) LABEL_opt_str_uminus_##lab
1390
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1391
+ COLLECT_USAGE_INSN(BIN(opt_str_uminus));
1392
+ COLLECT_USAGE_OPERAND(BIN(opt_str_uminus), 0, str);
1393
+ {
1394
+ #line 873 "insns.def"
1395
+ if (BASIC_OP_UNREDEFINED_P(BOP_UMINUS, STRING_REDEFINED_OP_FLAG)) {
1396
+ val = str;
1397
+ }
1398
+ else {
1399
+ val = rb_funcall(rb_str_resurrect(str), idUMinus, 0);
1400
+ }
1401
+
1402
+ #line 1403 "vm.inc"
1403
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1404
+ PUSH(val);
1405
+ #undef CURRENT_INSN_opt_str_uminus
1406
+ #undef INSN_IS_SC
1407
+ #undef INSN_LABEL
1408
+ #undef LABEL_IS_SC
1409
+ END_INSN(opt_str_uminus);}}}
1410
+ INSN_ENTRY(opt_newarray_max){START_OF_ORIGINAL_INSN(opt_newarray_max);
1411
+ {
1412
+ VALUE val;
1413
+ rb_num_t num = (rb_num_t)GET_OPERAND(1);
1414
+
1415
+ DEBUG_ENTER_INSN("opt_newarray_max");
1416
+ ADD_PC(1+1);
1417
+ PREFETCH(GET_PC());
1418
+ #define CURRENT_INSN_opt_newarray_max 1
1419
+ #define INSN_IS_SC() 0
1420
+ #define INSN_LABEL(lab) LABEL_opt_newarray_max_##lab
1421
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1422
+ COLLECT_USAGE_INSN(BIN(opt_newarray_max));
1423
+ COLLECT_USAGE_OPERAND(BIN(opt_newarray_max), 0, num);
1424
+ {
1425
+ #line 887 "insns.def"
1426
+ val = vm_opt_newarray_max(num, STACK_ADDR_FROM_TOP(num));
1427
+ POPN(num);
1428
+
1429
+ #line 1430 "vm.inc"
1430
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1431
+ PUSH(val);
1432
+ #undef CURRENT_INSN_opt_newarray_max
1433
+ #undef INSN_IS_SC
1434
+ #undef INSN_LABEL
1435
+ #undef LABEL_IS_SC
1436
+ END_INSN(opt_newarray_max);}}}
1437
+ INSN_ENTRY(opt_newarray_min){START_OF_ORIGINAL_INSN(opt_newarray_min);
1438
+ {
1439
+ VALUE val;
1440
+ rb_num_t num = (rb_num_t)GET_OPERAND(1);
1441
+
1442
+ DEBUG_ENTER_INSN("opt_newarray_min");
1443
+ ADD_PC(1+1);
1444
+ PREFETCH(GET_PC());
1445
+ #define CURRENT_INSN_opt_newarray_min 1
1446
+ #define INSN_IS_SC() 0
1447
+ #define INSN_LABEL(lab) LABEL_opt_newarray_min_##lab
1448
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1449
+ COLLECT_USAGE_INSN(BIN(opt_newarray_min));
1450
+ COLLECT_USAGE_OPERAND(BIN(opt_newarray_min), 0, num);
1451
+ {
1452
+ #line 897 "insns.def"
1453
+ val = vm_opt_newarray_min(num, STACK_ADDR_FROM_TOP(num));
1454
+ POPN(num);
1455
+
1456
+ #line 1457 "vm.inc"
1457
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1458
+ PUSH(val);
1459
+ #undef CURRENT_INSN_opt_newarray_min
1460
+ #undef INSN_IS_SC
1461
+ #undef INSN_LABEL
1462
+ #undef LABEL_IS_SC
1463
+ END_INSN(opt_newarray_min);}}}
1464
+ INSN_ENTRY(opt_send_without_block){START_OF_ORIGINAL_INSN(opt_send_without_block);
1465
+ {
1466
+ VALUE val;
1467
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
1468
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
1469
+
1470
+ DEBUG_ENTER_INSN("opt_send_without_block");
1471
+ ADD_PC(1+2);
1472
+ PREFETCH(GET_PC());
1473
+ #define CURRENT_INSN_opt_send_without_block 1
1474
+ #define INSN_IS_SC() 0
1475
+ #define INSN_LABEL(lab) LABEL_opt_send_without_block_##lab
1476
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1477
+ COLLECT_USAGE_INSN(BIN(opt_send_without_block));
1478
+ COLLECT_USAGE_OPERAND(BIN(opt_send_without_block), 0, ci);
1479
+ COLLECT_USAGE_OPERAND(BIN(opt_send_without_block), 1, cc);
1480
+ {
1481
+ #line 912 "insns.def"
1482
+ struct rb_calling_info calling;
1483
+ calling.block_handler = VM_BLOCK_HANDLER_NONE;
1484
+ vm_search_method(ci, cc, calling.recv = TOPN(calling.argc = ci->orig_argc));
1485
+ CALL_METHOD(&calling, ci, cc);
1486
+
1487
+ #line 1488 "vm.inc"
1488
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1489
+ PUSH(val);
1490
+ #undef CURRENT_INSN_opt_send_without_block
1491
+ #undef INSN_IS_SC
1492
+ #undef INSN_LABEL
1493
+ #undef LABEL_IS_SC
1494
+ END_INSN(opt_send_without_block);}}}
1495
+ INSN_ENTRY(invokesuper){START_OF_ORIGINAL_INSN(invokesuper);
1496
+ {
1497
+ VALUE val;
1498
+ ISEQ blockiseq = (ISEQ)GET_OPERAND(3);
1499
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
1500
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
1501
+
1502
+ DEBUG_ENTER_INSN("invokesuper");
1503
+ ADD_PC(1+3);
1504
+ PREFETCH(GET_PC());
1505
+ #define CURRENT_INSN_invokesuper 1
1506
+ #define INSN_IS_SC() 0
1507
+ #define INSN_LABEL(lab) LABEL_invokesuper_##lab
1508
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1509
+ COLLECT_USAGE_INSN(BIN(invokesuper));
1510
+ COLLECT_USAGE_OPERAND(BIN(invokesuper), 0, ci);
1511
+ COLLECT_USAGE_OPERAND(BIN(invokesuper), 1, cc);
1512
+ COLLECT_USAGE_OPERAND(BIN(invokesuper), 2, blockiseq);
1513
+ {
1514
+ #line 929 "insns.def"
1515
+ struct rb_calling_info calling;
1516
+ calling.argc = ci->orig_argc;
1517
+
1518
+ vm_caller_setup_arg_block(ec, reg_cfp, &calling, ci, blockiseq, TRUE);
1519
+ calling.recv = GET_SELF();
1520
+ vm_search_super_method(ec, GET_CFP(), &calling, ci, cc);
1521
+ CALL_METHOD(&calling, ci, cc);
1522
+
1523
+ #line 1524 "vm.inc"
1524
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1525
+ PUSH(val);
1526
+ #undef CURRENT_INSN_invokesuper
1527
+ #undef INSN_IS_SC
1528
+ #undef INSN_LABEL
1529
+ #undef LABEL_IS_SC
1530
+ END_INSN(invokesuper);}}}
1531
+ INSN_ENTRY(invokeblock){START_OF_ORIGINAL_INSN(invokeblock);
1532
+ {
1533
+ VALUE val;
1534
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
1535
+
1536
+ DEBUG_ENTER_INSN("invokeblock");
1537
+ ADD_PC(1+1);
1538
+ PREFETCH(GET_PC());
1539
+ #define CURRENT_INSN_invokeblock 1
1540
+ #define INSN_IS_SC() 0
1541
+ #define INSN_LABEL(lab) LABEL_invokeblock_##lab
1542
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1543
+ COLLECT_USAGE_INSN(BIN(invokeblock));
1544
+ COLLECT_USAGE_OPERAND(BIN(invokeblock), 0, ci);
1545
+ {
1546
+ #line 949 "insns.def"
1547
+ struct rb_calling_info calling;
1548
+ calling.argc = ci->orig_argc;
1549
+ calling.block_handler = VM_BLOCK_HANDLER_NONE;
1550
+ calling.recv = GET_SELF();
1551
+
1552
+ val = vm_invoke_block(ec, GET_CFP(), &calling, ci);
1553
+ if (val == Qundef) {
1554
+ RESTORE_REGS();
1555
+ NEXT_INSN();
1556
+ }
1557
+
1558
+ #line 1559 "vm.inc"
1559
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1560
+ PUSH(val);
1561
+ #undef CURRENT_INSN_invokeblock
1562
+ #undef INSN_IS_SC
1563
+ #undef INSN_LABEL
1564
+ #undef LABEL_IS_SC
1565
+ END_INSN(invokeblock);}}}
1566
+ INSN_ENTRY(leave){START_OF_ORIGINAL_INSN(leave);
1567
+ {
1568
+
1569
+ VALUE val = TOPN(0);
1570
+ DEBUG_ENTER_INSN("leave");
1571
+ ADD_PC(1+0);
1572
+ PREFETCH(GET_PC());
1573
+ POPN(1);
1574
+ #define CURRENT_INSN_leave 1
1575
+ #define INSN_IS_SC() 0
1576
+ #define INSN_LABEL(lab) LABEL_leave_##lab
1577
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1578
+ COLLECT_USAGE_INSN(BIN(leave));
1579
+ {
1580
+ #line 972 "insns.def"
1581
+ if (OPT_CHECKED_RUN) {
1582
+ const VALUE *const bp = vm_base_ptr(reg_cfp);
1583
+ if (reg_cfp->sp != bp) {
1584
+ vm_stack_consistency_error(ec, reg_cfp, bp);
1585
+ }
1586
+ }
1587
+
1588
+ RUBY_VM_CHECK_INTS(ec);
1589
+
1590
+ if (vm_pop_frame(ec, GET_CFP(), GET_EP())) {
1591
+ #if OPT_CALL_THREADED_CODE
1592
+ rb_ec_thread_ptr(ec)->retval = val;
1593
+ return 0;
1594
+ #else
1595
+ return val;
1596
+ #endif
1597
+ }
1598
+ else {
1599
+ RESTORE_REGS();
1600
+ }
1601
+
1602
+ #line 1603 "vm.inc"
1603
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1604
+ PUSH(val);
1605
+ #undef CURRENT_INSN_leave
1606
+ #undef INSN_IS_SC
1607
+ #undef INSN_LABEL
1608
+ #undef LABEL_IS_SC
1609
+ END_INSN(leave);}}}
1610
+ INSN_ENTRY(throw){START_OF_ORIGINAL_INSN(throw);
1611
+ {
1612
+ VALUE val;
1613
+ rb_num_t throw_state = (rb_num_t)GET_OPERAND(1);
1614
+ VALUE throwobj = TOPN(0);
1615
+ DEBUG_ENTER_INSN("throw");
1616
+ ADD_PC(1+1);
1617
+ PREFETCH(GET_PC());
1618
+ POPN(1);
1619
+ #define CURRENT_INSN_throw 1
1620
+ #define INSN_IS_SC() 0
1621
+ #define INSN_LABEL(lab) LABEL_throw_##lab
1622
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1623
+ COLLECT_USAGE_INSN(BIN(throw));
1624
+ COLLECT_USAGE_OPERAND(BIN(throw), 0, throw_state);
1625
+ {
1626
+ #line 1009 "insns.def"
1627
+ RUBY_VM_CHECK_INTS(ec);
1628
+ val = vm_throw(ec, GET_CFP(), throw_state, throwobj);
1629
+ THROW_EXCEPTION(val);
1630
+ /* unreachable */
1631
+
1632
+ #line 1633 "vm.inc"
1633
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1634
+ PUSH(val);
1635
+ #undef CURRENT_INSN_throw
1636
+ #undef INSN_IS_SC
1637
+ #undef INSN_LABEL
1638
+ #undef LABEL_IS_SC
1639
+ END_INSN(throw);}}}
1640
+ INSN_ENTRY(jump){START_OF_ORIGINAL_INSN(jump);
1641
+ {
1642
+ OFFSET dst = (OFFSET)GET_OPERAND(1);
1643
+
1644
+ DEBUG_ENTER_INSN("jump");
1645
+ ADD_PC(1+1);
1646
+ PREFETCH(GET_PC());
1647
+ #define CURRENT_INSN_jump 1
1648
+ #define INSN_IS_SC() 0
1649
+ #define INSN_LABEL(lab) LABEL_jump_##lab
1650
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1651
+ COLLECT_USAGE_INSN(BIN(jump));
1652
+ COLLECT_USAGE_OPERAND(BIN(jump), 0, dst);
1653
+ {
1654
+ #line 1030 "insns.def"
1655
+ RUBY_VM_CHECK_INTS(ec);
1656
+ JUMP(dst);
1657
+
1658
+ #line 1659 "vm.inc"
1659
+ #undef CURRENT_INSN_jump
1660
+ #undef INSN_IS_SC
1661
+ #undef INSN_LABEL
1662
+ #undef LABEL_IS_SC
1663
+ END_INSN(jump);}}}
1664
+ INSN_ENTRY(branchif){START_OF_ORIGINAL_INSN(branchif);
1665
+ {
1666
+ OFFSET dst = (OFFSET)GET_OPERAND(1);
1667
+ VALUE val = TOPN(0);
1668
+ DEBUG_ENTER_INSN("branchif");
1669
+ ADD_PC(1+1);
1670
+ PREFETCH(GET_PC());
1671
+ POPN(1);
1672
+ #define CURRENT_INSN_branchif 1
1673
+ #define INSN_IS_SC() 0
1674
+ #define INSN_LABEL(lab) LABEL_branchif_##lab
1675
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1676
+ COLLECT_USAGE_INSN(BIN(branchif));
1677
+ COLLECT_USAGE_OPERAND(BIN(branchif), 0, dst);
1678
+ {
1679
+ #line 1045 "insns.def"
1680
+ if (RTEST(val)) {
1681
+ RUBY_VM_CHECK_INTS(ec);
1682
+ JUMP(dst);
1683
+ }
1684
+
1685
+ #line 1686 "vm.inc"
1686
+ #undef CURRENT_INSN_branchif
1687
+ #undef INSN_IS_SC
1688
+ #undef INSN_LABEL
1689
+ #undef LABEL_IS_SC
1690
+ END_INSN(branchif);}}}
1691
+ INSN_ENTRY(branchunless){START_OF_ORIGINAL_INSN(branchunless);
1692
+ {
1693
+ OFFSET dst = (OFFSET)GET_OPERAND(1);
1694
+ VALUE val = TOPN(0);
1695
+ DEBUG_ENTER_INSN("branchunless");
1696
+ ADD_PC(1+1);
1697
+ PREFETCH(GET_PC());
1698
+ POPN(1);
1699
+ #define CURRENT_INSN_branchunless 1
1700
+ #define INSN_IS_SC() 0
1701
+ #define INSN_LABEL(lab) LABEL_branchunless_##lab
1702
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1703
+ COLLECT_USAGE_INSN(BIN(branchunless));
1704
+ COLLECT_USAGE_OPERAND(BIN(branchunless), 0, dst);
1705
+ {
1706
+ #line 1062 "insns.def"
1707
+ if (!RTEST(val)) {
1708
+ RUBY_VM_CHECK_INTS(ec);
1709
+ JUMP(dst);
1710
+ }
1711
+
1712
+ #line 1713 "vm.inc"
1713
+ #undef CURRENT_INSN_branchunless
1714
+ #undef INSN_IS_SC
1715
+ #undef INSN_LABEL
1716
+ #undef LABEL_IS_SC
1717
+ END_INSN(branchunless);}}}
1718
+ INSN_ENTRY(branchnil){START_OF_ORIGINAL_INSN(branchnil);
1719
+ {
1720
+ OFFSET dst = (OFFSET)GET_OPERAND(1);
1721
+ VALUE val = TOPN(0);
1722
+ DEBUG_ENTER_INSN("branchnil");
1723
+ ADD_PC(1+1);
1724
+ PREFETCH(GET_PC());
1725
+ POPN(1);
1726
+ #define CURRENT_INSN_branchnil 1
1727
+ #define INSN_IS_SC() 0
1728
+ #define INSN_LABEL(lab) LABEL_branchnil_##lab
1729
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1730
+ COLLECT_USAGE_INSN(BIN(branchnil));
1731
+ COLLECT_USAGE_OPERAND(BIN(branchnil), 0, dst);
1732
+ {
1733
+ #line 1079 "insns.def"
1734
+ if (NIL_P(val)) {
1735
+ RUBY_VM_CHECK_INTS(ec);
1736
+ JUMP(dst);
1737
+ }
1738
+
1739
+ #line 1740 "vm.inc"
1740
+ #undef CURRENT_INSN_branchnil
1741
+ #undef INSN_IS_SC
1742
+ #undef INSN_LABEL
1743
+ #undef LABEL_IS_SC
1744
+ END_INSN(branchnil);}}}
1745
+ INSN_ENTRY(branchiftype){START_OF_ORIGINAL_INSN(branchiftype);
1746
+ {
1747
+ OFFSET dst = (OFFSET)GET_OPERAND(2);
1748
+ rb_num_t type = (rb_num_t)GET_OPERAND(1);
1749
+ VALUE val = TOPN(0);
1750
+ DEBUG_ENTER_INSN("branchiftype");
1751
+ ADD_PC(1+2);
1752
+ PREFETCH(GET_PC());
1753
+ POPN(1);
1754
+ #define CURRENT_INSN_branchiftype 1
1755
+ #define INSN_IS_SC() 0
1756
+ #define INSN_LABEL(lab) LABEL_branchiftype_##lab
1757
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1758
+ COLLECT_USAGE_INSN(BIN(branchiftype));
1759
+ COLLECT_USAGE_OPERAND(BIN(branchiftype), 0, type);
1760
+ COLLECT_USAGE_OPERAND(BIN(branchiftype), 1, dst);
1761
+ {
1762
+ #line 1096 "insns.def"
1763
+ if (TYPE(val) == (int)type) {
1764
+ RUBY_VM_CHECK_INTS(ec);
1765
+ JUMP(dst);
1766
+ }
1767
+
1768
+ #line 1769 "vm.inc"
1769
+ #undef CURRENT_INSN_branchiftype
1770
+ #undef INSN_IS_SC
1771
+ #undef INSN_LABEL
1772
+ #undef LABEL_IS_SC
1773
+ END_INSN(branchiftype);}}}
1774
+ INSN_ENTRY(getinlinecache){START_OF_ORIGINAL_INSN(getinlinecache);
1775
+ {
1776
+ VALUE val;
1777
+ IC ic = (IC)GET_OPERAND(2);
1778
+ OFFSET dst = (OFFSET)GET_OPERAND(1);
1779
+
1780
+ DEBUG_ENTER_INSN("getinlinecache");
1781
+ ADD_PC(1+2);
1782
+ PREFETCH(GET_PC());
1783
+ #define CURRENT_INSN_getinlinecache 1
1784
+ #define INSN_IS_SC() 0
1785
+ #define INSN_LABEL(lab) LABEL_getinlinecache_##lab
1786
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1787
+ COLLECT_USAGE_INSN(BIN(getinlinecache));
1788
+ COLLECT_USAGE_OPERAND(BIN(getinlinecache), 0, dst);
1789
+ COLLECT_USAGE_OPERAND(BIN(getinlinecache), 1, ic);
1790
+ {
1791
+ #line 1118 "insns.def"
1792
+ val = vm_ic_hit_p(ic, GET_EP());
1793
+ if (val != Qnil) {
1794
+ JUMP(dst);
1795
+ }
1796
+
1797
+ #line 1798 "vm.inc"
1798
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1799
+ PUSH(val);
1800
+ #undef CURRENT_INSN_getinlinecache
1801
+ #undef INSN_IS_SC
1802
+ #undef INSN_LABEL
1803
+ #undef LABEL_IS_SC
1804
+ END_INSN(getinlinecache);}}}
1805
+ INSN_ENTRY(setinlinecache){START_OF_ORIGINAL_INSN(setinlinecache);
1806
+ {
1807
+ IC ic = (IC)GET_OPERAND(1);
1808
+ VALUE val = TOPN(0);
1809
+ DEBUG_ENTER_INSN("setinlinecache");
1810
+ ADD_PC(1+1);
1811
+ PREFETCH(GET_PC());
1812
+ POPN(1);
1813
+ #define CURRENT_INSN_setinlinecache 1
1814
+ #define INSN_IS_SC() 0
1815
+ #define INSN_LABEL(lab) LABEL_setinlinecache_##lab
1816
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1817
+ COLLECT_USAGE_INSN(BIN(setinlinecache));
1818
+ COLLECT_USAGE_OPERAND(BIN(setinlinecache), 0, ic);
1819
+ {
1820
+ #line 1135 "insns.def"
1821
+ vm_ic_update(ic, val, GET_EP());
1822
+
1823
+ #line 1824 "vm.inc"
1824
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1825
+ PUSH(val);
1826
+ #undef CURRENT_INSN_setinlinecache
1827
+ #undef INSN_IS_SC
1828
+ #undef INSN_LABEL
1829
+ #undef LABEL_IS_SC
1830
+ END_INSN(setinlinecache);}}}
1831
+ INSN_ENTRY(once){START_OF_ORIGINAL_INSN(once);
1832
+ {
1833
+ VALUE val;
1834
+ IC ic = (IC)GET_OPERAND(2);
1835
+ ISEQ iseq = (ISEQ)GET_OPERAND(1);
1836
+
1837
+ DEBUG_ENTER_INSN("once");
1838
+ ADD_PC(1+2);
1839
+ PREFETCH(GET_PC());
1840
+ #define CURRENT_INSN_once 1
1841
+ #define INSN_IS_SC() 0
1842
+ #define INSN_LABEL(lab) LABEL_once_##lab
1843
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1844
+ COLLECT_USAGE_INSN(BIN(once));
1845
+ COLLECT_USAGE_OPERAND(BIN(once), 0, iseq);
1846
+ COLLECT_USAGE_OPERAND(BIN(once), 1, ic);
1847
+ {
1848
+ #line 1149 "insns.def"
1849
+ val = vm_once_dispatch(ec, iseq, ic);
1850
+
1851
+ #line 1852 "vm.inc"
1852
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1853
+ PUSH(val);
1854
+ #undef CURRENT_INSN_once
1855
+ #undef INSN_IS_SC
1856
+ #undef INSN_LABEL
1857
+ #undef LABEL_IS_SC
1858
+ END_INSN(once);}}}
1859
+ INSN_ENTRY(opt_case_dispatch){START_OF_ORIGINAL_INSN(opt_case_dispatch);
1860
+ {
1861
+ OFFSET else_offset = (OFFSET)GET_OPERAND(2);
1862
+ CDHASH hash = (CDHASH)GET_OPERAND(1);
1863
+ VALUE key = TOPN(0);
1864
+ DEBUG_ENTER_INSN("opt_case_dispatch");
1865
+ ADD_PC(1+2);
1866
+ PREFETCH(GET_PC());
1867
+ POPN(1);
1868
+ #define CURRENT_INSN_opt_case_dispatch 1
1869
+ #define INSN_IS_SC() 0
1870
+ #define INSN_LABEL(lab) LABEL_opt_case_dispatch_##lab
1871
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1872
+ COLLECT_USAGE_INSN(BIN(opt_case_dispatch));
1873
+ COLLECT_USAGE_OPERAND(BIN(opt_case_dispatch), 0, hash);
1874
+ COLLECT_USAGE_OPERAND(BIN(opt_case_dispatch), 1, else_offset);
1875
+ {
1876
+ #line 1163 "insns.def"
1877
+ OFFSET dst = vm_case_dispatch(hash, else_offset, key);
1878
+
1879
+ if (dst) {
1880
+ JUMP(dst);
1881
+ }
1882
+
1883
+ #line 1884 "vm.inc"
1884
+ #undef CURRENT_INSN_opt_case_dispatch
1885
+ #undef INSN_IS_SC
1886
+ #undef INSN_LABEL
1887
+ #undef LABEL_IS_SC
1888
+ END_INSN(opt_case_dispatch);}}}
1889
+ INSN_ENTRY(opt_plus){START_OF_ORIGINAL_INSN(opt_plus);
1890
+ {
1891
+ VALUE val;
1892
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
1893
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
1894
+ VALUE recv = TOPN(1);
1895
+ VALUE obj = TOPN(0);
1896
+ DEBUG_ENTER_INSN("opt_plus");
1897
+ ADD_PC(1+2);
1898
+ PREFETCH(GET_PC());
1899
+ POPN(2);
1900
+ #define CURRENT_INSN_opt_plus 1
1901
+ #define INSN_IS_SC() 0
1902
+ #define INSN_LABEL(lab) LABEL_opt_plus_##lab
1903
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1904
+ COLLECT_USAGE_INSN(BIN(opt_plus));
1905
+ COLLECT_USAGE_OPERAND(BIN(opt_plus), 0, ci);
1906
+ COLLECT_USAGE_OPERAND(BIN(opt_plus), 1, cc);
1907
+ {
1908
+ #line 1183 "insns.def"
1909
+ val = vm_opt_plus(recv, obj);
1910
+
1911
+ if (val == Qundef) {
1912
+ /* other */
1913
+ PUSH(recv);
1914
+ PUSH(obj);
1915
+ CALL_SIMPLE_METHOD(recv);
1916
+ }
1917
+
1918
+ #line 1919 "vm.inc"
1919
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1920
+ PUSH(val);
1921
+ #undef CURRENT_INSN_opt_plus
1922
+ #undef INSN_IS_SC
1923
+ #undef INSN_LABEL
1924
+ #undef LABEL_IS_SC
1925
+ END_INSN(opt_plus);}}}
1926
+ INSN_ENTRY(opt_minus){START_OF_ORIGINAL_INSN(opt_minus);
1927
+ {
1928
+ VALUE val;
1929
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
1930
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
1931
+ VALUE recv = TOPN(1);
1932
+ VALUE obj = TOPN(0);
1933
+ DEBUG_ENTER_INSN("opt_minus");
1934
+ ADD_PC(1+2);
1935
+ PREFETCH(GET_PC());
1936
+ POPN(2);
1937
+ #define CURRENT_INSN_opt_minus 1
1938
+ #define INSN_IS_SC() 0
1939
+ #define INSN_LABEL(lab) LABEL_opt_minus_##lab
1940
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1941
+ COLLECT_USAGE_INSN(BIN(opt_minus));
1942
+ COLLECT_USAGE_OPERAND(BIN(opt_minus), 0, ci);
1943
+ COLLECT_USAGE_OPERAND(BIN(opt_minus), 1, cc);
1944
+ {
1945
+ #line 1204 "insns.def"
1946
+ val = vm_opt_minus(recv, obj);
1947
+
1948
+ if (val == Qundef) {
1949
+ /* other */
1950
+ PUSH(recv);
1951
+ PUSH(obj);
1952
+ CALL_SIMPLE_METHOD(recv);
1953
+ }
1954
+
1955
+ #line 1956 "vm.inc"
1956
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1957
+ PUSH(val);
1958
+ #undef CURRENT_INSN_opt_minus
1959
+ #undef INSN_IS_SC
1960
+ #undef INSN_LABEL
1961
+ #undef LABEL_IS_SC
1962
+ END_INSN(opt_minus);}}}
1963
+ INSN_ENTRY(opt_mult){START_OF_ORIGINAL_INSN(opt_mult);
1964
+ {
1965
+ VALUE val;
1966
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
1967
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
1968
+ VALUE recv = TOPN(1);
1969
+ VALUE obj = TOPN(0);
1970
+ DEBUG_ENTER_INSN("opt_mult");
1971
+ ADD_PC(1+2);
1972
+ PREFETCH(GET_PC());
1973
+ POPN(2);
1974
+ #define CURRENT_INSN_opt_mult 1
1975
+ #define INSN_IS_SC() 0
1976
+ #define INSN_LABEL(lab) LABEL_opt_mult_##lab
1977
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1978
+ COLLECT_USAGE_INSN(BIN(opt_mult));
1979
+ COLLECT_USAGE_OPERAND(BIN(opt_mult), 0, ci);
1980
+ COLLECT_USAGE_OPERAND(BIN(opt_mult), 1, cc);
1981
+ {
1982
+ #line 1225 "insns.def"
1983
+ val = vm_opt_mult(recv, obj);
1984
+
1985
+ if (val == Qundef) {
1986
+ /* other */
1987
+ PUSH(recv);
1988
+ PUSH(obj);
1989
+ CALL_SIMPLE_METHOD(recv);
1990
+ }
1991
+
1992
+ #line 1993 "vm.inc"
1993
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
1994
+ PUSH(val);
1995
+ #undef CURRENT_INSN_opt_mult
1996
+ #undef INSN_IS_SC
1997
+ #undef INSN_LABEL
1998
+ #undef LABEL_IS_SC
1999
+ END_INSN(opt_mult);}}}
2000
+ INSN_ENTRY(opt_div){START_OF_ORIGINAL_INSN(opt_div);
2001
+ {
2002
+ VALUE val;
2003
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2004
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2005
+ VALUE recv = TOPN(1);
2006
+ VALUE obj = TOPN(0);
2007
+ DEBUG_ENTER_INSN("opt_div");
2008
+ ADD_PC(1+2);
2009
+ PREFETCH(GET_PC());
2010
+ POPN(2);
2011
+ #define CURRENT_INSN_opt_div 1
2012
+ #define INSN_IS_SC() 0
2013
+ #define INSN_LABEL(lab) LABEL_opt_div_##lab
2014
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2015
+ COLLECT_USAGE_INSN(BIN(opt_div));
2016
+ COLLECT_USAGE_OPERAND(BIN(opt_div), 0, ci);
2017
+ COLLECT_USAGE_OPERAND(BIN(opt_div), 1, cc);
2018
+ {
2019
+ #line 1246 "insns.def"
2020
+ val = vm_opt_div(recv, obj);
2021
+
2022
+ if (val == Qundef) {
2023
+ /* other */
2024
+ PUSH(recv);
2025
+ PUSH(obj);
2026
+ CALL_SIMPLE_METHOD(recv);
2027
+ }
2028
+
2029
+ #line 2030 "vm.inc"
2030
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2031
+ PUSH(val);
2032
+ #undef CURRENT_INSN_opt_div
2033
+ #undef INSN_IS_SC
2034
+ #undef INSN_LABEL
2035
+ #undef LABEL_IS_SC
2036
+ END_INSN(opt_div);}}}
2037
+ INSN_ENTRY(opt_mod){START_OF_ORIGINAL_INSN(opt_mod);
2038
+ {
2039
+ VALUE val;
2040
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2041
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2042
+ VALUE recv = TOPN(1);
2043
+ VALUE obj = TOPN(0);
2044
+ DEBUG_ENTER_INSN("opt_mod");
2045
+ ADD_PC(1+2);
2046
+ PREFETCH(GET_PC());
2047
+ POPN(2);
2048
+ #define CURRENT_INSN_opt_mod 1
2049
+ #define INSN_IS_SC() 0
2050
+ #define INSN_LABEL(lab) LABEL_opt_mod_##lab
2051
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2052
+ COLLECT_USAGE_INSN(BIN(opt_mod));
2053
+ COLLECT_USAGE_OPERAND(BIN(opt_mod), 0, ci);
2054
+ COLLECT_USAGE_OPERAND(BIN(opt_mod), 1, cc);
2055
+ {
2056
+ #line 1267 "insns.def"
2057
+ val = vm_opt_mod(recv, obj);
2058
+
2059
+ if (val == Qundef) {
2060
+ /* other */
2061
+ PUSH(recv);
2062
+ PUSH(obj);
2063
+ CALL_SIMPLE_METHOD(recv);
2064
+ }
2065
+
2066
+ #line 2067 "vm.inc"
2067
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2068
+ PUSH(val);
2069
+ #undef CURRENT_INSN_opt_mod
2070
+ #undef INSN_IS_SC
2071
+ #undef INSN_LABEL
2072
+ #undef LABEL_IS_SC
2073
+ END_INSN(opt_mod);}}}
2074
+ INSN_ENTRY(opt_eq){START_OF_ORIGINAL_INSN(opt_eq);
2075
+ {
2076
+ VALUE val;
2077
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2078
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2079
+ VALUE recv = TOPN(1);
2080
+ VALUE obj = TOPN(0);
2081
+ DEBUG_ENTER_INSN("opt_eq");
2082
+ ADD_PC(1+2);
2083
+ PREFETCH(GET_PC());
2084
+ POPN(2);
2085
+ #define CURRENT_INSN_opt_eq 1
2086
+ #define INSN_IS_SC() 0
2087
+ #define INSN_LABEL(lab) LABEL_opt_eq_##lab
2088
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2089
+ COLLECT_USAGE_INSN(BIN(opt_eq));
2090
+ COLLECT_USAGE_OPERAND(BIN(opt_eq), 0, ci);
2091
+ COLLECT_USAGE_OPERAND(BIN(opt_eq), 1, cc);
2092
+ {
2093
+ #line 1288 "insns.def"
2094
+ val = opt_eq_func(recv, obj, ci, cc);
2095
+
2096
+ if (val == Qundef) {
2097
+ /* other */
2098
+ PUSH(recv);
2099
+ PUSH(obj);
2100
+ CALL_SIMPLE_METHOD(recv);
2101
+ }
2102
+
2103
+ #line 2104 "vm.inc"
2104
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2105
+ PUSH(val);
2106
+ #undef CURRENT_INSN_opt_eq
2107
+ #undef INSN_IS_SC
2108
+ #undef INSN_LABEL
2109
+ #undef LABEL_IS_SC
2110
+ END_INSN(opt_eq);}}}
2111
+ INSN_ENTRY(opt_neq){START_OF_ORIGINAL_INSN(opt_neq);
2112
+ {
2113
+ VALUE val;
2114
+ CALL_CACHE cc_eq = (CALL_CACHE)GET_OPERAND(4);
2115
+ CALL_INFO ci_eq = (CALL_INFO)GET_OPERAND(3);
2116
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2117
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2118
+ VALUE recv = TOPN(1);
2119
+ VALUE obj = TOPN(0);
2120
+ DEBUG_ENTER_INSN("opt_neq");
2121
+ ADD_PC(1+4);
2122
+ PREFETCH(GET_PC());
2123
+ POPN(2);
2124
+ #define CURRENT_INSN_opt_neq 1
2125
+ #define INSN_IS_SC() 0
2126
+ #define INSN_LABEL(lab) LABEL_opt_neq_##lab
2127
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2128
+ COLLECT_USAGE_INSN(BIN(opt_neq));
2129
+ COLLECT_USAGE_OPERAND(BIN(opt_neq), 0, ci);
2130
+ COLLECT_USAGE_OPERAND(BIN(opt_neq), 1, cc);
2131
+ COLLECT_USAGE_OPERAND(BIN(opt_neq), 2, ci_eq);
2132
+ COLLECT_USAGE_OPERAND(BIN(opt_neq), 3, cc_eq);
2133
+ {
2134
+ #line 1309 "insns.def"
2135
+ val = vm_opt_neq(ci, cc, ci_eq, cc_eq, recv, obj);
2136
+
2137
+ if (val == Qundef) {
2138
+ /* other */
2139
+ PUSH(recv);
2140
+ PUSH(obj);
2141
+ CALL_SIMPLE_METHOD(recv);
2142
+ }
2143
+
2144
+ #line 2145 "vm.inc"
2145
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2146
+ PUSH(val);
2147
+ #undef CURRENT_INSN_opt_neq
2148
+ #undef INSN_IS_SC
2149
+ #undef INSN_LABEL
2150
+ #undef LABEL_IS_SC
2151
+ END_INSN(opt_neq);}}}
2152
+ INSN_ENTRY(opt_lt){START_OF_ORIGINAL_INSN(opt_lt);
2153
+ {
2154
+ VALUE val;
2155
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2156
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2157
+ VALUE recv = TOPN(1);
2158
+ VALUE obj = TOPN(0);
2159
+ DEBUG_ENTER_INSN("opt_lt");
2160
+ ADD_PC(1+2);
2161
+ PREFETCH(GET_PC());
2162
+ POPN(2);
2163
+ #define CURRENT_INSN_opt_lt 1
2164
+ #define INSN_IS_SC() 0
2165
+ #define INSN_LABEL(lab) LABEL_opt_lt_##lab
2166
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2167
+ COLLECT_USAGE_INSN(BIN(opt_lt));
2168
+ COLLECT_USAGE_OPERAND(BIN(opt_lt), 0, ci);
2169
+ COLLECT_USAGE_OPERAND(BIN(opt_lt), 1, cc);
2170
+ {
2171
+ #line 1330 "insns.def"
2172
+ val = vm_opt_lt(recv, obj);
2173
+
2174
+ if (val == Qundef) {
2175
+ /* other */
2176
+ PUSH(recv);
2177
+ PUSH(obj);
2178
+ CALL_SIMPLE_METHOD(recv);
2179
+ }
2180
+
2181
+ #line 2182 "vm.inc"
2182
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2183
+ PUSH(val);
2184
+ #undef CURRENT_INSN_opt_lt
2185
+ #undef INSN_IS_SC
2186
+ #undef INSN_LABEL
2187
+ #undef LABEL_IS_SC
2188
+ END_INSN(opt_lt);}}}
2189
+ INSN_ENTRY(opt_le){START_OF_ORIGINAL_INSN(opt_le);
2190
+ {
2191
+ VALUE val;
2192
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2193
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2194
+ VALUE recv = TOPN(1);
2195
+ VALUE obj = TOPN(0);
2196
+ DEBUG_ENTER_INSN("opt_le");
2197
+ ADD_PC(1+2);
2198
+ PREFETCH(GET_PC());
2199
+ POPN(2);
2200
+ #define CURRENT_INSN_opt_le 1
2201
+ #define INSN_IS_SC() 0
2202
+ #define INSN_LABEL(lab) LABEL_opt_le_##lab
2203
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2204
+ COLLECT_USAGE_INSN(BIN(opt_le));
2205
+ COLLECT_USAGE_OPERAND(BIN(opt_le), 0, ci);
2206
+ COLLECT_USAGE_OPERAND(BIN(opt_le), 1, cc);
2207
+ {
2208
+ #line 1351 "insns.def"
2209
+ val = vm_opt_le(recv, obj);
2210
+
2211
+ if (val == Qundef) {
2212
+ /* other */
2213
+ PUSH(recv);
2214
+ PUSH(obj);
2215
+ CALL_SIMPLE_METHOD(recv);
2216
+ }
2217
+
2218
+ #line 2219 "vm.inc"
2219
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2220
+ PUSH(val);
2221
+ #undef CURRENT_INSN_opt_le
2222
+ #undef INSN_IS_SC
2223
+ #undef INSN_LABEL
2224
+ #undef LABEL_IS_SC
2225
+ END_INSN(opt_le);}}}
2226
+ INSN_ENTRY(opt_gt){START_OF_ORIGINAL_INSN(opt_gt);
2227
+ {
2228
+ VALUE val;
2229
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2230
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2231
+ VALUE recv = TOPN(1);
2232
+ VALUE obj = TOPN(0);
2233
+ DEBUG_ENTER_INSN("opt_gt");
2234
+ ADD_PC(1+2);
2235
+ PREFETCH(GET_PC());
2236
+ POPN(2);
2237
+ #define CURRENT_INSN_opt_gt 1
2238
+ #define INSN_IS_SC() 0
2239
+ #define INSN_LABEL(lab) LABEL_opt_gt_##lab
2240
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2241
+ COLLECT_USAGE_INSN(BIN(opt_gt));
2242
+ COLLECT_USAGE_OPERAND(BIN(opt_gt), 0, ci);
2243
+ COLLECT_USAGE_OPERAND(BIN(opt_gt), 1, cc);
2244
+ {
2245
+ #line 1372 "insns.def"
2246
+ val = vm_opt_gt(recv, obj);
2247
+
2248
+ if (val == Qundef) {
2249
+ /* other */
2250
+ PUSH(recv);
2251
+ PUSH(obj);
2252
+ CALL_SIMPLE_METHOD(recv);
2253
+ }
2254
+
2255
+ #line 2256 "vm.inc"
2256
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2257
+ PUSH(val);
2258
+ #undef CURRENT_INSN_opt_gt
2259
+ #undef INSN_IS_SC
2260
+ #undef INSN_LABEL
2261
+ #undef LABEL_IS_SC
2262
+ END_INSN(opt_gt);}}}
2263
+ INSN_ENTRY(opt_ge){START_OF_ORIGINAL_INSN(opt_ge);
2264
+ {
2265
+ VALUE val;
2266
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2267
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2268
+ VALUE recv = TOPN(1);
2269
+ VALUE obj = TOPN(0);
2270
+ DEBUG_ENTER_INSN("opt_ge");
2271
+ ADD_PC(1+2);
2272
+ PREFETCH(GET_PC());
2273
+ POPN(2);
2274
+ #define CURRENT_INSN_opt_ge 1
2275
+ #define INSN_IS_SC() 0
2276
+ #define INSN_LABEL(lab) LABEL_opt_ge_##lab
2277
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2278
+ COLLECT_USAGE_INSN(BIN(opt_ge));
2279
+ COLLECT_USAGE_OPERAND(BIN(opt_ge), 0, ci);
2280
+ COLLECT_USAGE_OPERAND(BIN(opt_ge), 1, cc);
2281
+ {
2282
+ #line 1393 "insns.def"
2283
+ val = vm_opt_ge(recv, obj);
2284
+
2285
+ if (val == Qundef) {
2286
+ /* other */
2287
+ PUSH(recv);
2288
+ PUSH(obj);
2289
+ CALL_SIMPLE_METHOD(recv);
2290
+ }
2291
+
2292
+ #line 2293 "vm.inc"
2293
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2294
+ PUSH(val);
2295
+ #undef CURRENT_INSN_opt_ge
2296
+ #undef INSN_IS_SC
2297
+ #undef INSN_LABEL
2298
+ #undef LABEL_IS_SC
2299
+ END_INSN(opt_ge);}}}
2300
+ INSN_ENTRY(opt_ltlt){START_OF_ORIGINAL_INSN(opt_ltlt);
2301
+ {
2302
+ VALUE val;
2303
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2304
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2305
+ VALUE recv = TOPN(1);
2306
+ VALUE obj = TOPN(0);
2307
+ DEBUG_ENTER_INSN("opt_ltlt");
2308
+ ADD_PC(1+2);
2309
+ PREFETCH(GET_PC());
2310
+ POPN(2);
2311
+ #define CURRENT_INSN_opt_ltlt 1
2312
+ #define INSN_IS_SC() 0
2313
+ #define INSN_LABEL(lab) LABEL_opt_ltlt_##lab
2314
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2315
+ COLLECT_USAGE_INSN(BIN(opt_ltlt));
2316
+ COLLECT_USAGE_OPERAND(BIN(opt_ltlt), 0, ci);
2317
+ COLLECT_USAGE_OPERAND(BIN(opt_ltlt), 1, cc);
2318
+ {
2319
+ #line 1414 "insns.def"
2320
+ val = vm_opt_ltlt(recv, obj);
2321
+
2322
+ if (val == Qundef) {
2323
+ /* other */
2324
+ PUSH(recv);
2325
+ PUSH(obj);
2326
+ CALL_SIMPLE_METHOD(recv);
2327
+ }
2328
+
2329
+ #line 2330 "vm.inc"
2330
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2331
+ PUSH(val);
2332
+ #undef CURRENT_INSN_opt_ltlt
2333
+ #undef INSN_IS_SC
2334
+ #undef INSN_LABEL
2335
+ #undef LABEL_IS_SC
2336
+ END_INSN(opt_ltlt);}}}
2337
+ INSN_ENTRY(opt_aref){START_OF_ORIGINAL_INSN(opt_aref);
2338
+ {
2339
+ VALUE val;
2340
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2341
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2342
+ VALUE recv = TOPN(1);
2343
+ VALUE obj = TOPN(0);
2344
+ DEBUG_ENTER_INSN("opt_aref");
2345
+ ADD_PC(1+2);
2346
+ PREFETCH(GET_PC());
2347
+ POPN(2);
2348
+ #define CURRENT_INSN_opt_aref 1
2349
+ #define INSN_IS_SC() 0
2350
+ #define INSN_LABEL(lab) LABEL_opt_aref_##lab
2351
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2352
+ COLLECT_USAGE_INSN(BIN(opt_aref));
2353
+ COLLECT_USAGE_OPERAND(BIN(opt_aref), 0, ci);
2354
+ COLLECT_USAGE_OPERAND(BIN(opt_aref), 1, cc);
2355
+ {
2356
+ #line 1435 "insns.def"
2357
+ val = vm_opt_aref(recv, obj);
2358
+
2359
+ if (val == Qundef) {
2360
+ /* other */
2361
+ PUSH(recv);
2362
+ PUSH(obj);
2363
+ CALL_SIMPLE_METHOD(recv);
2364
+ }
2365
+
2366
+ #line 2367 "vm.inc"
2367
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2368
+ PUSH(val);
2369
+ #undef CURRENT_INSN_opt_aref
2370
+ #undef INSN_IS_SC
2371
+ #undef INSN_LABEL
2372
+ #undef LABEL_IS_SC
2373
+ END_INSN(opt_aref);}}}
2374
+ INSN_ENTRY(opt_aset){START_OF_ORIGINAL_INSN(opt_aset);
2375
+ {
2376
+ VALUE val;
2377
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2378
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2379
+ VALUE recv = TOPN(2);
2380
+ VALUE obj = TOPN(1);
2381
+ VALUE set = TOPN(0);
2382
+ DEBUG_ENTER_INSN("opt_aset");
2383
+ ADD_PC(1+2);
2384
+ PREFETCH(GET_PC());
2385
+ POPN(3);
2386
+ #define CURRENT_INSN_opt_aset 1
2387
+ #define INSN_IS_SC() 0
2388
+ #define INSN_LABEL(lab) LABEL_opt_aset_##lab
2389
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2390
+ COLLECT_USAGE_INSN(BIN(opt_aset));
2391
+ COLLECT_USAGE_OPERAND(BIN(opt_aset), 0, ci);
2392
+ COLLECT_USAGE_OPERAND(BIN(opt_aset), 1, cc);
2393
+ {
2394
+ #line 1456 "insns.def"
2395
+ val = vm_opt_aset(recv, obj, set);
2396
+
2397
+ if (val == Qundef) {
2398
+ /* other */
2399
+ PUSH(recv);
2400
+ PUSH(obj);
2401
+ PUSH(set);
2402
+ CALL_SIMPLE_METHOD(recv);
2403
+ }
2404
+
2405
+ #line 2406 "vm.inc"
2406
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2407
+ PUSH(val);
2408
+ #undef CURRENT_INSN_opt_aset
2409
+ #undef INSN_IS_SC
2410
+ #undef INSN_LABEL
2411
+ #undef LABEL_IS_SC
2412
+ END_INSN(opt_aset);}}}
2413
+ INSN_ENTRY(opt_aset_with){START_OF_ORIGINAL_INSN(opt_aset_with);
2414
+ {
2415
+ VALUE key = (VALUE)GET_OPERAND(3);
2416
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2417
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2418
+ VALUE recv = TOPN(1);
2419
+ VALUE val = TOPN(0);
2420
+ DEBUG_ENTER_INSN("opt_aset_with");
2421
+ ADD_PC(1+3);
2422
+ PREFETCH(GET_PC());
2423
+ POPN(2);
2424
+ #define CURRENT_INSN_opt_aset_with 1
2425
+ #define INSN_IS_SC() 0
2426
+ #define INSN_LABEL(lab) LABEL_opt_aset_with_##lab
2427
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2428
+ COLLECT_USAGE_INSN(BIN(opt_aset_with));
2429
+ COLLECT_USAGE_OPERAND(BIN(opt_aset_with), 0, ci);
2430
+ COLLECT_USAGE_OPERAND(BIN(opt_aset_with), 1, cc);
2431
+ COLLECT_USAGE_OPERAND(BIN(opt_aset_with), 2, key);
2432
+ {
2433
+ #line 1478 "insns.def"
2434
+ VALUE tmp = vm_opt_aset_with(recv, key, val);
2435
+
2436
+ if (tmp != Qundef) {
2437
+ val = tmp;
2438
+ }
2439
+ else {
2440
+ /* other */
2441
+ PUSH(recv);
2442
+ PUSH(rb_str_resurrect(key));
2443
+ PUSH(val);
2444
+ CALL_SIMPLE_METHOD(recv);
2445
+ }
2446
+
2447
+ #line 2448 "vm.inc"
2448
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2449
+ PUSH(val);
2450
+ #undef CURRENT_INSN_opt_aset_with
2451
+ #undef INSN_IS_SC
2452
+ #undef INSN_LABEL
2453
+ #undef LABEL_IS_SC
2454
+ END_INSN(opt_aset_with);}}}
2455
+ INSN_ENTRY(opt_aref_with){START_OF_ORIGINAL_INSN(opt_aref_with);
2456
+ {
2457
+ VALUE val;
2458
+ VALUE key = (VALUE)GET_OPERAND(3);
2459
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2460
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2461
+ VALUE recv = TOPN(0);
2462
+ DEBUG_ENTER_INSN("opt_aref_with");
2463
+ ADD_PC(1+3);
2464
+ PREFETCH(GET_PC());
2465
+ POPN(1);
2466
+ #define CURRENT_INSN_opt_aref_with 1
2467
+ #define INSN_IS_SC() 0
2468
+ #define INSN_LABEL(lab) LABEL_opt_aref_with_##lab
2469
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2470
+ COLLECT_USAGE_INSN(BIN(opt_aref_with));
2471
+ COLLECT_USAGE_OPERAND(BIN(opt_aref_with), 0, ci);
2472
+ COLLECT_USAGE_OPERAND(BIN(opt_aref_with), 1, cc);
2473
+ COLLECT_USAGE_OPERAND(BIN(opt_aref_with), 2, key);
2474
+ {
2475
+ #line 1503 "insns.def"
2476
+ val = vm_opt_aref_with(recv, key);
2477
+
2478
+ if (val == Qundef) {
2479
+ /* other */
2480
+ PUSH(recv);
2481
+ PUSH(rb_str_resurrect(key));
2482
+ CALL_SIMPLE_METHOD(recv);
2483
+ }
2484
+
2485
+ #line 2486 "vm.inc"
2486
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2487
+ PUSH(val);
2488
+ #undef CURRENT_INSN_opt_aref_with
2489
+ #undef INSN_IS_SC
2490
+ #undef INSN_LABEL
2491
+ #undef LABEL_IS_SC
2492
+ END_INSN(opt_aref_with);}}}
2493
+ INSN_ENTRY(opt_length){START_OF_ORIGINAL_INSN(opt_length);
2494
+ {
2495
+ VALUE val;
2496
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2497
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2498
+ VALUE recv = TOPN(0);
2499
+ DEBUG_ENTER_INSN("opt_length");
2500
+ ADD_PC(1+2);
2501
+ PREFETCH(GET_PC());
2502
+ POPN(1);
2503
+ #define CURRENT_INSN_opt_length 1
2504
+ #define INSN_IS_SC() 0
2505
+ #define INSN_LABEL(lab) LABEL_opt_length_##lab
2506
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2507
+ COLLECT_USAGE_INSN(BIN(opt_length));
2508
+ COLLECT_USAGE_OPERAND(BIN(opt_length), 0, ci);
2509
+ COLLECT_USAGE_OPERAND(BIN(opt_length), 1, cc);
2510
+ {
2511
+ #line 1524 "insns.def"
2512
+ val = vm_opt_length(recv, BOP_LENGTH);
2513
+
2514
+ if (val == Qundef) {
2515
+ /* other */
2516
+ PUSH(recv);
2517
+ CALL_SIMPLE_METHOD(recv);
2518
+ }
2519
+
2520
+ #line 2521 "vm.inc"
2521
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2522
+ PUSH(val);
2523
+ #undef CURRENT_INSN_opt_length
2524
+ #undef INSN_IS_SC
2525
+ #undef INSN_LABEL
2526
+ #undef LABEL_IS_SC
2527
+ END_INSN(opt_length);}}}
2528
+ INSN_ENTRY(opt_size){START_OF_ORIGINAL_INSN(opt_size);
2529
+ {
2530
+ VALUE val;
2531
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2532
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2533
+ VALUE recv = TOPN(0);
2534
+ DEBUG_ENTER_INSN("opt_size");
2535
+ ADD_PC(1+2);
2536
+ PREFETCH(GET_PC());
2537
+ POPN(1);
2538
+ #define CURRENT_INSN_opt_size 1
2539
+ #define INSN_IS_SC() 0
2540
+ #define INSN_LABEL(lab) LABEL_opt_size_##lab
2541
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2542
+ COLLECT_USAGE_INSN(BIN(opt_size));
2543
+ COLLECT_USAGE_OPERAND(BIN(opt_size), 0, ci);
2544
+ COLLECT_USAGE_OPERAND(BIN(opt_size), 1, cc);
2545
+ {
2546
+ #line 1544 "insns.def"
2547
+ val = vm_opt_length(recv, BOP_SIZE);
2548
+
2549
+ if (val == Qundef) {
2550
+ /* other */
2551
+ PUSH(recv);
2552
+ CALL_SIMPLE_METHOD(recv);
2553
+ }
2554
+
2555
+ #line 2556 "vm.inc"
2556
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2557
+ PUSH(val);
2558
+ #undef CURRENT_INSN_opt_size
2559
+ #undef INSN_IS_SC
2560
+ #undef INSN_LABEL
2561
+ #undef LABEL_IS_SC
2562
+ END_INSN(opt_size);}}}
2563
+ INSN_ENTRY(opt_empty_p){START_OF_ORIGINAL_INSN(opt_empty_p);
2564
+ {
2565
+ VALUE val;
2566
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2567
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2568
+ VALUE recv = TOPN(0);
2569
+ DEBUG_ENTER_INSN("opt_empty_p");
2570
+ ADD_PC(1+2);
2571
+ PREFETCH(GET_PC());
2572
+ POPN(1);
2573
+ #define CURRENT_INSN_opt_empty_p 1
2574
+ #define INSN_IS_SC() 0
2575
+ #define INSN_LABEL(lab) LABEL_opt_empty_p_##lab
2576
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2577
+ COLLECT_USAGE_INSN(BIN(opt_empty_p));
2578
+ COLLECT_USAGE_OPERAND(BIN(opt_empty_p), 0, ci);
2579
+ COLLECT_USAGE_OPERAND(BIN(opt_empty_p), 1, cc);
2580
+ {
2581
+ #line 1564 "insns.def"
2582
+ val = vm_opt_empty_p(recv);
2583
+
2584
+ if (val == Qundef) {
2585
+ /* other */
2586
+ PUSH(recv);
2587
+ CALL_SIMPLE_METHOD(recv);
2588
+ }
2589
+
2590
+ #line 2591 "vm.inc"
2591
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2592
+ PUSH(val);
2593
+ #undef CURRENT_INSN_opt_empty_p
2594
+ #undef INSN_IS_SC
2595
+ #undef INSN_LABEL
2596
+ #undef LABEL_IS_SC
2597
+ END_INSN(opt_empty_p);}}}
2598
+ INSN_ENTRY(opt_succ){START_OF_ORIGINAL_INSN(opt_succ);
2599
+ {
2600
+ VALUE val;
2601
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2602
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2603
+ VALUE recv = TOPN(0);
2604
+ DEBUG_ENTER_INSN("opt_succ");
2605
+ ADD_PC(1+2);
2606
+ PREFETCH(GET_PC());
2607
+ POPN(1);
2608
+ #define CURRENT_INSN_opt_succ 1
2609
+ #define INSN_IS_SC() 0
2610
+ #define INSN_LABEL(lab) LABEL_opt_succ_##lab
2611
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2612
+ COLLECT_USAGE_INSN(BIN(opt_succ));
2613
+ COLLECT_USAGE_OPERAND(BIN(opt_succ), 0, ci);
2614
+ COLLECT_USAGE_OPERAND(BIN(opt_succ), 1, cc);
2615
+ {
2616
+ #line 1584 "insns.def"
2617
+ val = vm_opt_succ(recv);
2618
+
2619
+ if (val == Qundef) {
2620
+ /* other */
2621
+ PUSH(recv);
2622
+ CALL_SIMPLE_METHOD(recv);
2623
+ }
2624
+
2625
+ #line 2626 "vm.inc"
2626
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2627
+ PUSH(val);
2628
+ #undef CURRENT_INSN_opt_succ
2629
+ #undef INSN_IS_SC
2630
+ #undef INSN_LABEL
2631
+ #undef LABEL_IS_SC
2632
+ END_INSN(opt_succ);}}}
2633
+ INSN_ENTRY(opt_not){START_OF_ORIGINAL_INSN(opt_not);
2634
+ {
2635
+ VALUE val;
2636
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2637
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2638
+ VALUE recv = TOPN(0);
2639
+ DEBUG_ENTER_INSN("opt_not");
2640
+ ADD_PC(1+2);
2641
+ PREFETCH(GET_PC());
2642
+ POPN(1);
2643
+ #define CURRENT_INSN_opt_not 1
2644
+ #define INSN_IS_SC() 0
2645
+ #define INSN_LABEL(lab) LABEL_opt_not_##lab
2646
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2647
+ COLLECT_USAGE_INSN(BIN(opt_not));
2648
+ COLLECT_USAGE_OPERAND(BIN(opt_not), 0, ci);
2649
+ COLLECT_USAGE_OPERAND(BIN(opt_not), 1, cc);
2650
+ {
2651
+ #line 1604 "insns.def"
2652
+ val = vm_opt_not(ci, cc, recv);
2653
+
2654
+ if (val == Qundef) {
2655
+ /* other */
2656
+ PUSH(recv);
2657
+ CALL_SIMPLE_METHOD(recv);
2658
+ }
2659
+
2660
+ #line 2661 "vm.inc"
2661
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2662
+ PUSH(val);
2663
+ #undef CURRENT_INSN_opt_not
2664
+ #undef INSN_IS_SC
2665
+ #undef INSN_LABEL
2666
+ #undef LABEL_IS_SC
2667
+ END_INSN(opt_not);}}}
2668
+ INSN_ENTRY(opt_regexpmatch1){START_OF_ORIGINAL_INSN(opt_regexpmatch1);
2669
+ {
2670
+ VALUE val;
2671
+ VALUE recv = (VALUE)GET_OPERAND(1);
2672
+ VALUE obj = TOPN(0);
2673
+ DEBUG_ENTER_INSN("opt_regexpmatch1");
2674
+ ADD_PC(1+1);
2675
+ PREFETCH(GET_PC());
2676
+ POPN(1);
2677
+ #define CURRENT_INSN_opt_regexpmatch1 1
2678
+ #define INSN_IS_SC() 0
2679
+ #define INSN_LABEL(lab) LABEL_opt_regexpmatch1_##lab
2680
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2681
+ COLLECT_USAGE_INSN(BIN(opt_regexpmatch1));
2682
+ COLLECT_USAGE_OPERAND(BIN(opt_regexpmatch1), 0, recv);
2683
+ {
2684
+ #line 1625 "insns.def"
2685
+ val = vm_opt_regexpmatch1(recv, obj);
2686
+
2687
+ #line 2688 "vm.inc"
2688
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2689
+ PUSH(val);
2690
+ #undef CURRENT_INSN_opt_regexpmatch1
2691
+ #undef INSN_IS_SC
2692
+ #undef INSN_LABEL
2693
+ #undef LABEL_IS_SC
2694
+ END_INSN(opt_regexpmatch1);}}}
2695
+ INSN_ENTRY(opt_regexpmatch2){START_OF_ORIGINAL_INSN(opt_regexpmatch2);
2696
+ {
2697
+ VALUE val;
2698
+ CALL_CACHE cc = (CALL_CACHE)GET_OPERAND(2);
2699
+ CALL_INFO ci = (CALL_INFO)GET_OPERAND(1);
2700
+ VALUE obj2 = TOPN(1);
2701
+ VALUE obj1 = TOPN(0);
2702
+ DEBUG_ENTER_INSN("opt_regexpmatch2");
2703
+ ADD_PC(1+2);
2704
+ PREFETCH(GET_PC());
2705
+ POPN(2);
2706
+ #define CURRENT_INSN_opt_regexpmatch2 1
2707
+ #define INSN_IS_SC() 0
2708
+ #define INSN_LABEL(lab) LABEL_opt_regexpmatch2_##lab
2709
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2710
+ COLLECT_USAGE_INSN(BIN(opt_regexpmatch2));
2711
+ COLLECT_USAGE_OPERAND(BIN(opt_regexpmatch2), 0, ci);
2712
+ COLLECT_USAGE_OPERAND(BIN(opt_regexpmatch2), 1, cc);
2713
+ {
2714
+ #line 1639 "insns.def"
2715
+ val = vm_opt_regexpmatch2(obj2, obj1);
2716
+
2717
+ if (val == Qundef) {
2718
+ /* other */
2719
+ PUSH(obj2);
2720
+ PUSH(obj1);
2721
+ CALL_SIMPLE_METHOD(obj2);
2722
+ }
2723
+
2724
+ #line 2725 "vm.inc"
2725
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2726
+ PUSH(val);
2727
+ #undef CURRENT_INSN_opt_regexpmatch2
2728
+ #undef INSN_IS_SC
2729
+ #undef INSN_LABEL
2730
+ #undef LABEL_IS_SC
2731
+ END_INSN(opt_regexpmatch2);}}}
2732
+ INSN_ENTRY(opt_call_c_function){START_OF_ORIGINAL_INSN(opt_call_c_function);
2733
+ {
2734
+ rb_insn_func_t funcptr = (rb_insn_func_t)GET_OPERAND(1);
2735
+
2736
+ DEBUG_ENTER_INSN("opt_call_c_function");
2737
+ ADD_PC(1+1);
2738
+ PREFETCH(GET_PC());
2739
+ #define CURRENT_INSN_opt_call_c_function 1
2740
+ #define INSN_IS_SC() 0
2741
+ #define INSN_LABEL(lab) LABEL_opt_call_c_function_##lab
2742
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2743
+ COLLECT_USAGE_INSN(BIN(opt_call_c_function));
2744
+ COLLECT_USAGE_OPERAND(BIN(opt_call_c_function), 0, funcptr);
2745
+ {
2746
+ #line 1660 "insns.def"
2747
+ reg_cfp = (funcptr)(ec, reg_cfp);
2748
+
2749
+ if (reg_cfp == 0) {
2750
+ VALUE err = ec->errinfo;
2751
+ ec->errinfo = Qnil;
2752
+ THROW_EXCEPTION(err);
2753
+ }
2754
+
2755
+ RESTORE_REGS();
2756
+ NEXT_INSN();
2757
+
2758
+ #line 2759 "vm.inc"
2759
+ #undef CURRENT_INSN_opt_call_c_function
2760
+ #undef INSN_IS_SC
2761
+ #undef INSN_LABEL
2762
+ #undef LABEL_IS_SC
2763
+ END_INSN(opt_call_c_function);}}}
2764
+ INSN_ENTRY(bitblt){START_OF_ORIGINAL_INSN(bitblt);
2765
+ {
2766
+ VALUE ret;
2767
+
2768
+
2769
+ DEBUG_ENTER_INSN("bitblt");
2770
+ ADD_PC(1+0);
2771
+ PREFETCH(GET_PC());
2772
+ #define CURRENT_INSN_bitblt 1
2773
+ #define INSN_IS_SC() 0
2774
+ #define INSN_LABEL(lab) LABEL_bitblt_##lab
2775
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2776
+ COLLECT_USAGE_INSN(BIN(bitblt));
2777
+ {
2778
+ #line 1683 "insns.def"
2779
+ ret = rb_str_new2("a bit of bacon, lettuce and tomato");
2780
+
2781
+ #line 2782 "vm.inc"
2782
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2783
+ PUSH(ret);
2784
+ #undef CURRENT_INSN_bitblt
2785
+ #undef INSN_IS_SC
2786
+ #undef INSN_LABEL
2787
+ #undef LABEL_IS_SC
2788
+ END_INSN(bitblt);}}}
2789
+ INSN_ENTRY(answer){START_OF_ORIGINAL_INSN(answer);
2790
+ {
2791
+ VALUE ret;
2792
+
2793
+
2794
+ DEBUG_ENTER_INSN("answer");
2795
+ ADD_PC(1+0);
2796
+ PREFETCH(GET_PC());
2797
+ #define CURRENT_INSN_answer 1
2798
+ #define INSN_IS_SC() 0
2799
+ #define INSN_LABEL(lab) LABEL_answer_##lab
2800
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2801
+ COLLECT_USAGE_INSN(BIN(answer));
2802
+ {
2803
+ #line 1697 "insns.def"
2804
+ ret = INT2FIX(42);
2805
+
2806
+ #line 2807 "vm.inc"
2807
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2808
+ PUSH(ret);
2809
+ #undef CURRENT_INSN_answer
2810
+ #undef INSN_IS_SC
2811
+ #undef INSN_LABEL
2812
+ #undef LABEL_IS_SC
2813
+ END_INSN(answer);}}}
2814
+ INSN_ENTRY(getlocal_OP__WC__0){START_OF_ORIGINAL_INSN(getlocal_OP__WC__0);
2815
+ {
2816
+ VALUE val;
2817
+ #define level 0
2818
+ lindex_t idx = (lindex_t)GET_OPERAND(1);
2819
+
2820
+ DEBUG_ENTER_INSN("getlocal_OP__WC__0");
2821
+ ADD_PC(1+1);
2822
+ PREFETCH(GET_PC());
2823
+ #define CURRENT_INSN_getlocal_OP__WC__0 1
2824
+ #define INSN_IS_SC() 0
2825
+ #define INSN_LABEL(lab) LABEL_getlocal_OP__WC__0_##lab
2826
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2827
+ COLLECT_USAGE_INSN(BIN(getlocal_OP__WC__0));
2828
+ COLLECT_USAGE_OPERAND(BIN(getlocal_OP__WC__0), 0, idx);
2829
+ {
2830
+ #line 60 "insns.def"
2831
+ val = *(vm_get_ep(GET_EP(), level) - idx);
2832
+ RB_DEBUG_COUNTER_INC(lvar_get);
2833
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
2834
+
2835
+ #line 2836 "vm.inc"
2836
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2837
+ PUSH(val);
2838
+ #undef level
2839
+ #undef CURRENT_INSN_getlocal_OP__WC__0
2840
+ #undef INSN_IS_SC
2841
+ #undef INSN_LABEL
2842
+ #undef LABEL_IS_SC
2843
+ END_INSN(getlocal_OP__WC__0);}}}
2844
+ INSN_ENTRY(getlocal_OP__WC__1){START_OF_ORIGINAL_INSN(getlocal_OP__WC__1);
2845
+ {
2846
+ VALUE val;
2847
+ #define level 1
2848
+ lindex_t idx = (lindex_t)GET_OPERAND(1);
2849
+
2850
+ DEBUG_ENTER_INSN("getlocal_OP__WC__1");
2851
+ ADD_PC(1+1);
2852
+ PREFETCH(GET_PC());
2853
+ #define CURRENT_INSN_getlocal_OP__WC__1 1
2854
+ #define INSN_IS_SC() 0
2855
+ #define INSN_LABEL(lab) LABEL_getlocal_OP__WC__1_##lab
2856
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2857
+ COLLECT_USAGE_INSN(BIN(getlocal_OP__WC__1));
2858
+ COLLECT_USAGE_OPERAND(BIN(getlocal_OP__WC__1), 0, idx);
2859
+ {
2860
+ #line 60 "insns.def"
2861
+ val = *(vm_get_ep(GET_EP(), level) - idx);
2862
+ RB_DEBUG_COUNTER_INC(lvar_get);
2863
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
2864
+
2865
+ #line 2866 "vm.inc"
2866
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2867
+ PUSH(val);
2868
+ #undef level
2869
+ #undef CURRENT_INSN_getlocal_OP__WC__1
2870
+ #undef INSN_IS_SC
2871
+ #undef INSN_LABEL
2872
+ #undef LABEL_IS_SC
2873
+ END_INSN(getlocal_OP__WC__1);}}}
2874
+ INSN_ENTRY(setlocal_OP__WC__0){START_OF_ORIGINAL_INSN(setlocal_OP__WC__0);
2875
+ {
2876
+ #define level 0
2877
+ lindex_t idx = (lindex_t)GET_OPERAND(1);
2878
+ VALUE val = TOPN(0);
2879
+ DEBUG_ENTER_INSN("setlocal_OP__WC__0");
2880
+ ADD_PC(1+1);
2881
+ PREFETCH(GET_PC());
2882
+ POPN(1);
2883
+ #define CURRENT_INSN_setlocal_OP__WC__0 1
2884
+ #define INSN_IS_SC() 0
2885
+ #define INSN_LABEL(lab) LABEL_setlocal_OP__WC__0_##lab
2886
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2887
+ COLLECT_USAGE_INSN(BIN(setlocal_OP__WC__0));
2888
+ COLLECT_USAGE_OPERAND(BIN(setlocal_OP__WC__0), 0, idx);
2889
+ {
2890
+ #line 78 "insns.def"
2891
+ vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val);
2892
+ RB_DEBUG_COUNTER_INC(lvar_set);
2893
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
2894
+
2895
+ #line 2896 "vm.inc"
2896
+ #undef level
2897
+ #undef CURRENT_INSN_setlocal_OP__WC__0
2898
+ #undef INSN_IS_SC
2899
+ #undef INSN_LABEL
2900
+ #undef LABEL_IS_SC
2901
+ END_INSN(setlocal_OP__WC__0);}}}
2902
+ INSN_ENTRY(setlocal_OP__WC__1){START_OF_ORIGINAL_INSN(setlocal_OP__WC__1);
2903
+ {
2904
+ #define level 1
2905
+ lindex_t idx = (lindex_t)GET_OPERAND(1);
2906
+ VALUE val = TOPN(0);
2907
+ DEBUG_ENTER_INSN("setlocal_OP__WC__1");
2908
+ ADD_PC(1+1);
2909
+ PREFETCH(GET_PC());
2910
+ POPN(1);
2911
+ #define CURRENT_INSN_setlocal_OP__WC__1 1
2912
+ #define INSN_IS_SC() 0
2913
+ #define INSN_LABEL(lab) LABEL_setlocal_OP__WC__1_##lab
2914
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2915
+ COLLECT_USAGE_INSN(BIN(setlocal_OP__WC__1));
2916
+ COLLECT_USAGE_OPERAND(BIN(setlocal_OP__WC__1), 0, idx);
2917
+ {
2918
+ #line 78 "insns.def"
2919
+ vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val);
2920
+ RB_DEBUG_COUNTER_INC(lvar_set);
2921
+ (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
2922
+
2923
+ #line 2924 "vm.inc"
2924
+ #undef level
2925
+ #undef CURRENT_INSN_setlocal_OP__WC__1
2926
+ #undef INSN_IS_SC
2927
+ #undef INSN_LABEL
2928
+ #undef LABEL_IS_SC
2929
+ END_INSN(setlocal_OP__WC__1);}}}
2930
+ INSN_ENTRY(putobject_OP_INT2FIX_O_0_C_){START_OF_ORIGINAL_INSN(putobject_OP_INT2FIX_O_0_C_);
2931
+ {
2932
+ #define val INT2FIX(0)
2933
+
2934
+
2935
+ DEBUG_ENTER_INSN("putobject_OP_INT2FIX_O_0_C_");
2936
+ ADD_PC(1+0);
2937
+ PREFETCH(GET_PC());
2938
+ #define CURRENT_INSN_putobject_OP_INT2FIX_O_0_C_ 1
2939
+ #define INSN_IS_SC() 0
2940
+ #define INSN_LABEL(lab) LABEL_putobject_OP_INT2FIX_O_0_C__##lab
2941
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2942
+ COLLECT_USAGE_INSN(BIN(putobject_OP_INT2FIX_O_0_C_));
2943
+ {
2944
+ #line 334 "insns.def"
2945
+ /* */
2946
+
2947
+ #line 2948 "vm.inc"
2948
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2949
+ PUSH(val);
2950
+ #undef val
2951
+ #undef CURRENT_INSN_putobject_OP_INT2FIX_O_0_C_
2952
+ #undef INSN_IS_SC
2953
+ #undef INSN_LABEL
2954
+ #undef LABEL_IS_SC
2955
+ END_INSN(putobject_OP_INT2FIX_O_0_C_);}}}
2956
+ INSN_ENTRY(putobject_OP_INT2FIX_O_1_C_){START_OF_ORIGINAL_INSN(putobject_OP_INT2FIX_O_1_C_);
2957
+ {
2958
+ #define val INT2FIX(1)
2959
+
2960
+
2961
+ DEBUG_ENTER_INSN("putobject_OP_INT2FIX_O_1_C_");
2962
+ ADD_PC(1+0);
2963
+ PREFETCH(GET_PC());
2964
+ #define CURRENT_INSN_putobject_OP_INT2FIX_O_1_C_ 1
2965
+ #define INSN_IS_SC() 0
2966
+ #define INSN_LABEL(lab) LABEL_putobject_OP_INT2FIX_O_1_C__##lab
2967
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
2968
+ COLLECT_USAGE_INSN(BIN(putobject_OP_INT2FIX_O_1_C_));
2969
+ {
2970
+ #line 334 "insns.def"
2971
+ /* */
2972
+
2973
+ #line 2974 "vm.inc"
2974
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, 1);
2975
+ PUSH(val);
2976
+ #undef val
2977
+ #undef CURRENT_INSN_putobject_OP_INT2FIX_O_1_C_
2978
+ #undef INSN_IS_SC
2979
+ #undef INSN_LABEL
2980
+ #undef LABEL_IS_SC
2981
+ END_INSN(putobject_OP_INT2FIX_O_1_C_);}}}
2982
+ INSN_ENTRY(trace_nop){
2983
+ {
2984
+ {
2985
+ vm_trace(ec, GET_CFP(), GET_PC());
2986
+ DISPATCH_ORIGINAL_INSN(nop);
2987
+
2988
+ END_INSN(trace_nop);}}}
2989
+ INSN_ENTRY(trace_getlocal){
2990
+ {
2991
+ {
2992
+ vm_trace(ec, GET_CFP(), GET_PC());
2993
+ DISPATCH_ORIGINAL_INSN(getlocal);
2994
+
2995
+ END_INSN(trace_getlocal);}}}
2996
+ INSN_ENTRY(trace_setlocal){
2997
+ {
2998
+ {
2999
+ vm_trace(ec, GET_CFP(), GET_PC());
3000
+ DISPATCH_ORIGINAL_INSN(setlocal);
3001
+
3002
+ END_INSN(trace_setlocal);}}}
3003
+ INSN_ENTRY(trace_getblockparam){
3004
+ {
3005
+ {
3006
+ vm_trace(ec, GET_CFP(), GET_PC());
3007
+ DISPATCH_ORIGINAL_INSN(getblockparam);
3008
+
3009
+ END_INSN(trace_getblockparam);}}}
3010
+ INSN_ENTRY(trace_setblockparam){
3011
+ {
3012
+ {
3013
+ vm_trace(ec, GET_CFP(), GET_PC());
3014
+ DISPATCH_ORIGINAL_INSN(setblockparam);
3015
+
3016
+ END_INSN(trace_setblockparam);}}}
3017
+ INSN_ENTRY(trace_getspecial){
3018
+ {
3019
+ {
3020
+ vm_trace(ec, GET_CFP(), GET_PC());
3021
+ DISPATCH_ORIGINAL_INSN(getspecial);
3022
+
3023
+ END_INSN(trace_getspecial);}}}
3024
+ INSN_ENTRY(trace_setspecial){
3025
+ {
3026
+ {
3027
+ vm_trace(ec, GET_CFP(), GET_PC());
3028
+ DISPATCH_ORIGINAL_INSN(setspecial);
3029
+
3030
+ END_INSN(trace_setspecial);}}}
3031
+ INSN_ENTRY(trace_getinstancevariable){
3032
+ {
3033
+ {
3034
+ vm_trace(ec, GET_CFP(), GET_PC());
3035
+ DISPATCH_ORIGINAL_INSN(getinstancevariable);
3036
+
3037
+ END_INSN(trace_getinstancevariable);}}}
3038
+ INSN_ENTRY(trace_setinstancevariable){
3039
+ {
3040
+ {
3041
+ vm_trace(ec, GET_CFP(), GET_PC());
3042
+ DISPATCH_ORIGINAL_INSN(setinstancevariable);
3043
+
3044
+ END_INSN(trace_setinstancevariable);}}}
3045
+ INSN_ENTRY(trace_getclassvariable){
3046
+ {
3047
+ {
3048
+ vm_trace(ec, GET_CFP(), GET_PC());
3049
+ DISPATCH_ORIGINAL_INSN(getclassvariable);
3050
+
3051
+ END_INSN(trace_getclassvariable);}}}
3052
+ INSN_ENTRY(trace_setclassvariable){
3053
+ {
3054
+ {
3055
+ vm_trace(ec, GET_CFP(), GET_PC());
3056
+ DISPATCH_ORIGINAL_INSN(setclassvariable);
3057
+
3058
+ END_INSN(trace_setclassvariable);}}}
3059
+ INSN_ENTRY(trace_getconstant){
3060
+ {
3061
+ {
3062
+ vm_trace(ec, GET_CFP(), GET_PC());
3063
+ DISPATCH_ORIGINAL_INSN(getconstant);
3064
+
3065
+ END_INSN(trace_getconstant);}}}
3066
+ INSN_ENTRY(trace_setconstant){
3067
+ {
3068
+ {
3069
+ vm_trace(ec, GET_CFP(), GET_PC());
3070
+ DISPATCH_ORIGINAL_INSN(setconstant);
3071
+
3072
+ END_INSN(trace_setconstant);}}}
3073
+ INSN_ENTRY(trace_getglobal){
3074
+ {
3075
+ {
3076
+ vm_trace(ec, GET_CFP(), GET_PC());
3077
+ DISPATCH_ORIGINAL_INSN(getglobal);
3078
+
3079
+ END_INSN(trace_getglobal);}}}
3080
+ INSN_ENTRY(trace_setglobal){
3081
+ {
3082
+ {
3083
+ vm_trace(ec, GET_CFP(), GET_PC());
3084
+ DISPATCH_ORIGINAL_INSN(setglobal);
3085
+
3086
+ END_INSN(trace_setglobal);}}}
3087
+ INSN_ENTRY(trace_putnil){
3088
+ {
3089
+ {
3090
+ vm_trace(ec, GET_CFP(), GET_PC());
3091
+ DISPATCH_ORIGINAL_INSN(putnil);
3092
+
3093
+ END_INSN(trace_putnil);}}}
3094
+ INSN_ENTRY(trace_putself){
3095
+ {
3096
+ {
3097
+ vm_trace(ec, GET_CFP(), GET_PC());
3098
+ DISPATCH_ORIGINAL_INSN(putself);
3099
+
3100
+ END_INSN(trace_putself);}}}
3101
+ INSN_ENTRY(trace_putobject){
3102
+ {
3103
+ {
3104
+ vm_trace(ec, GET_CFP(), GET_PC());
3105
+ DISPATCH_ORIGINAL_INSN(putobject);
3106
+
3107
+ END_INSN(trace_putobject);}}}
3108
+ INSN_ENTRY(trace_putspecialobject){
3109
+ {
3110
+ {
3111
+ vm_trace(ec, GET_CFP(), GET_PC());
3112
+ DISPATCH_ORIGINAL_INSN(putspecialobject);
3113
+
3114
+ END_INSN(trace_putspecialobject);}}}
3115
+ INSN_ENTRY(trace_putiseq){
3116
+ {
3117
+ {
3118
+ vm_trace(ec, GET_CFP(), GET_PC());
3119
+ DISPATCH_ORIGINAL_INSN(putiseq);
3120
+
3121
+ END_INSN(trace_putiseq);}}}
3122
+ INSN_ENTRY(trace_putstring){
3123
+ {
3124
+ {
3125
+ vm_trace(ec, GET_CFP(), GET_PC());
3126
+ DISPATCH_ORIGINAL_INSN(putstring);
3127
+
3128
+ END_INSN(trace_putstring);}}}
3129
+ INSN_ENTRY(trace_concatstrings){
3130
+ {
3131
+ {
3132
+ vm_trace(ec, GET_CFP(), GET_PC());
3133
+ DISPATCH_ORIGINAL_INSN(concatstrings);
3134
+
3135
+ END_INSN(trace_concatstrings);}}}
3136
+ INSN_ENTRY(trace_tostring){
3137
+ {
3138
+ {
3139
+ vm_trace(ec, GET_CFP(), GET_PC());
3140
+ DISPATCH_ORIGINAL_INSN(tostring);
3141
+
3142
+ END_INSN(trace_tostring);}}}
3143
+ INSN_ENTRY(trace_freezestring){
3144
+ {
3145
+ {
3146
+ vm_trace(ec, GET_CFP(), GET_PC());
3147
+ DISPATCH_ORIGINAL_INSN(freezestring);
3148
+
3149
+ END_INSN(trace_freezestring);}}}
3150
+ INSN_ENTRY(trace_toregexp){
3151
+ {
3152
+ {
3153
+ vm_trace(ec, GET_CFP(), GET_PC());
3154
+ DISPATCH_ORIGINAL_INSN(toregexp);
3155
+
3156
+ END_INSN(trace_toregexp);}}}
3157
+ INSN_ENTRY(trace_intern){
3158
+ {
3159
+ {
3160
+ vm_trace(ec, GET_CFP(), GET_PC());
3161
+ DISPATCH_ORIGINAL_INSN(intern);
3162
+
3163
+ END_INSN(trace_intern);}}}
3164
+ INSN_ENTRY(trace_newarray){
3165
+ {
3166
+ {
3167
+ vm_trace(ec, GET_CFP(), GET_PC());
3168
+ DISPATCH_ORIGINAL_INSN(newarray);
3169
+
3170
+ END_INSN(trace_newarray);}}}
3171
+ INSN_ENTRY(trace_duparray){
3172
+ {
3173
+ {
3174
+ vm_trace(ec, GET_CFP(), GET_PC());
3175
+ DISPATCH_ORIGINAL_INSN(duparray);
3176
+
3177
+ END_INSN(trace_duparray);}}}
3178
+ INSN_ENTRY(trace_expandarray){
3179
+ {
3180
+ {
3181
+ vm_trace(ec, GET_CFP(), GET_PC());
3182
+ DISPATCH_ORIGINAL_INSN(expandarray);
3183
+
3184
+ END_INSN(trace_expandarray);}}}
3185
+ INSN_ENTRY(trace_concatarray){
3186
+ {
3187
+ {
3188
+ vm_trace(ec, GET_CFP(), GET_PC());
3189
+ DISPATCH_ORIGINAL_INSN(concatarray);
3190
+
3191
+ END_INSN(trace_concatarray);}}}
3192
+ INSN_ENTRY(trace_splatarray){
3193
+ {
3194
+ {
3195
+ vm_trace(ec, GET_CFP(), GET_PC());
3196
+ DISPATCH_ORIGINAL_INSN(splatarray);
3197
+
3198
+ END_INSN(trace_splatarray);}}}
3199
+ INSN_ENTRY(trace_newhash){
3200
+ {
3201
+ {
3202
+ vm_trace(ec, GET_CFP(), GET_PC());
3203
+ DISPATCH_ORIGINAL_INSN(newhash);
3204
+
3205
+ END_INSN(trace_newhash);}}}
3206
+ INSN_ENTRY(trace_newrange){
3207
+ {
3208
+ {
3209
+ vm_trace(ec, GET_CFP(), GET_PC());
3210
+ DISPATCH_ORIGINAL_INSN(newrange);
3211
+
3212
+ END_INSN(trace_newrange);}}}
3213
+ INSN_ENTRY(trace_pop){
3214
+ {
3215
+ {
3216
+ vm_trace(ec, GET_CFP(), GET_PC());
3217
+ DISPATCH_ORIGINAL_INSN(pop);
3218
+
3219
+ END_INSN(trace_pop);}}}
3220
+ INSN_ENTRY(trace_dup){
3221
+ {
3222
+ {
3223
+ vm_trace(ec, GET_CFP(), GET_PC());
3224
+ DISPATCH_ORIGINAL_INSN(dup);
3225
+
3226
+ END_INSN(trace_dup);}}}
3227
+ INSN_ENTRY(trace_dupn){
3228
+ {
3229
+ {
3230
+ vm_trace(ec, GET_CFP(), GET_PC());
3231
+ DISPATCH_ORIGINAL_INSN(dupn);
3232
+
3233
+ END_INSN(trace_dupn);}}}
3234
+ INSN_ENTRY(trace_swap){
3235
+ {
3236
+ {
3237
+ vm_trace(ec, GET_CFP(), GET_PC());
3238
+ DISPATCH_ORIGINAL_INSN(swap);
3239
+
3240
+ END_INSN(trace_swap);}}}
3241
+ INSN_ENTRY(trace_reverse){
3242
+ {
3243
+ {
3244
+ vm_trace(ec, GET_CFP(), GET_PC());
3245
+ DISPATCH_ORIGINAL_INSN(reverse);
3246
+
3247
+ END_INSN(trace_reverse);}}}
3248
+ INSN_ENTRY(trace_reput){
3249
+ {
3250
+ {
3251
+ vm_trace(ec, GET_CFP(), GET_PC());
3252
+ DISPATCH_ORIGINAL_INSN(reput);
3253
+
3254
+ END_INSN(trace_reput);}}}
3255
+ INSN_ENTRY(trace_topn){
3256
+ {
3257
+ {
3258
+ vm_trace(ec, GET_CFP(), GET_PC());
3259
+ DISPATCH_ORIGINAL_INSN(topn);
3260
+
3261
+ END_INSN(trace_topn);}}}
3262
+ INSN_ENTRY(trace_setn){
3263
+ {
3264
+ {
3265
+ vm_trace(ec, GET_CFP(), GET_PC());
3266
+ DISPATCH_ORIGINAL_INSN(setn);
3267
+
3268
+ END_INSN(trace_setn);}}}
3269
+ INSN_ENTRY(trace_adjuststack){
3270
+ {
3271
+ {
3272
+ vm_trace(ec, GET_CFP(), GET_PC());
3273
+ DISPATCH_ORIGINAL_INSN(adjuststack);
3274
+
3275
+ END_INSN(trace_adjuststack);}}}
3276
+ INSN_ENTRY(trace_defined){
3277
+ {
3278
+ {
3279
+ vm_trace(ec, GET_CFP(), GET_PC());
3280
+ DISPATCH_ORIGINAL_INSN(defined);
3281
+
3282
+ END_INSN(trace_defined);}}}
3283
+ INSN_ENTRY(trace_checkmatch){
3284
+ {
3285
+ {
3286
+ vm_trace(ec, GET_CFP(), GET_PC());
3287
+ DISPATCH_ORIGINAL_INSN(checkmatch);
3288
+
3289
+ END_INSN(trace_checkmatch);}}}
3290
+ INSN_ENTRY(trace_checkkeyword){
3291
+ {
3292
+ {
3293
+ vm_trace(ec, GET_CFP(), GET_PC());
3294
+ DISPATCH_ORIGINAL_INSN(checkkeyword);
3295
+
3296
+ END_INSN(trace_checkkeyword);}}}
3297
+ INSN_ENTRY(trace_tracecoverage){
3298
+ {
3299
+ {
3300
+ vm_trace(ec, GET_CFP(), GET_PC());
3301
+ DISPATCH_ORIGINAL_INSN(tracecoverage);
3302
+
3303
+ END_INSN(trace_tracecoverage);}}}
3304
+ INSN_ENTRY(trace_defineclass){
3305
+ {
3306
+ {
3307
+ vm_trace(ec, GET_CFP(), GET_PC());
3308
+ DISPATCH_ORIGINAL_INSN(defineclass);
3309
+
3310
+ END_INSN(trace_defineclass);}}}
3311
+ INSN_ENTRY(trace_send){
3312
+ {
3313
+ {
3314
+ vm_trace(ec, GET_CFP(), GET_PC());
3315
+ DISPATCH_ORIGINAL_INSN(send);
3316
+
3317
+ END_INSN(trace_send);}}}
3318
+ INSN_ENTRY(trace_opt_str_freeze){
3319
+ {
3320
+ {
3321
+ vm_trace(ec, GET_CFP(), GET_PC());
3322
+ DISPATCH_ORIGINAL_INSN(opt_str_freeze);
3323
+
3324
+ END_INSN(trace_opt_str_freeze);}}}
3325
+ INSN_ENTRY(trace_opt_str_uminus){
3326
+ {
3327
+ {
3328
+ vm_trace(ec, GET_CFP(), GET_PC());
3329
+ DISPATCH_ORIGINAL_INSN(opt_str_uminus);
3330
+
3331
+ END_INSN(trace_opt_str_uminus);}}}
3332
+ INSN_ENTRY(trace_opt_newarray_max){
3333
+ {
3334
+ {
3335
+ vm_trace(ec, GET_CFP(), GET_PC());
3336
+ DISPATCH_ORIGINAL_INSN(opt_newarray_max);
3337
+
3338
+ END_INSN(trace_opt_newarray_max);}}}
3339
+ INSN_ENTRY(trace_opt_newarray_min){
3340
+ {
3341
+ {
3342
+ vm_trace(ec, GET_CFP(), GET_PC());
3343
+ DISPATCH_ORIGINAL_INSN(opt_newarray_min);
3344
+
3345
+ END_INSN(trace_opt_newarray_min);}}}
3346
+ INSN_ENTRY(trace_opt_send_without_block){
3347
+ {
3348
+ {
3349
+ vm_trace(ec, GET_CFP(), GET_PC());
3350
+ DISPATCH_ORIGINAL_INSN(opt_send_without_block);
3351
+
3352
+ END_INSN(trace_opt_send_without_block);}}}
3353
+ INSN_ENTRY(trace_invokesuper){
3354
+ {
3355
+ {
3356
+ vm_trace(ec, GET_CFP(), GET_PC());
3357
+ DISPATCH_ORIGINAL_INSN(invokesuper);
3358
+
3359
+ END_INSN(trace_invokesuper);}}}
3360
+ INSN_ENTRY(trace_invokeblock){
3361
+ {
3362
+ {
3363
+ vm_trace(ec, GET_CFP(), GET_PC());
3364
+ DISPATCH_ORIGINAL_INSN(invokeblock);
3365
+
3366
+ END_INSN(trace_invokeblock);}}}
3367
+ INSN_ENTRY(trace_leave){
3368
+ {
3369
+ {
3370
+ vm_trace(ec, GET_CFP(), GET_PC());
3371
+ DISPATCH_ORIGINAL_INSN(leave);
3372
+
3373
+ END_INSN(trace_leave);}}}
3374
+ INSN_ENTRY(trace_throw){
3375
+ {
3376
+ {
3377
+ vm_trace(ec, GET_CFP(), GET_PC());
3378
+ DISPATCH_ORIGINAL_INSN(throw);
3379
+
3380
+ END_INSN(trace_throw);}}}
3381
+ INSN_ENTRY(trace_jump){
3382
+ {
3383
+ {
3384
+ vm_trace(ec, GET_CFP(), GET_PC());
3385
+ DISPATCH_ORIGINAL_INSN(jump);
3386
+
3387
+ END_INSN(trace_jump);}}}
3388
+ INSN_ENTRY(trace_branchif){
3389
+ {
3390
+ {
3391
+ vm_trace(ec, GET_CFP(), GET_PC());
3392
+ DISPATCH_ORIGINAL_INSN(branchif);
3393
+
3394
+ END_INSN(trace_branchif);}}}
3395
+ INSN_ENTRY(trace_branchunless){
3396
+ {
3397
+ {
3398
+ vm_trace(ec, GET_CFP(), GET_PC());
3399
+ DISPATCH_ORIGINAL_INSN(branchunless);
3400
+
3401
+ END_INSN(trace_branchunless);}}}
3402
+ INSN_ENTRY(trace_branchnil){
3403
+ {
3404
+ {
3405
+ vm_trace(ec, GET_CFP(), GET_PC());
3406
+ DISPATCH_ORIGINAL_INSN(branchnil);
3407
+
3408
+ END_INSN(trace_branchnil);}}}
3409
+ INSN_ENTRY(trace_branchiftype){
3410
+ {
3411
+ {
3412
+ vm_trace(ec, GET_CFP(), GET_PC());
3413
+ DISPATCH_ORIGINAL_INSN(branchiftype);
3414
+
3415
+ END_INSN(trace_branchiftype);}}}
3416
+ INSN_ENTRY(trace_getinlinecache){
3417
+ {
3418
+ {
3419
+ vm_trace(ec, GET_CFP(), GET_PC());
3420
+ DISPATCH_ORIGINAL_INSN(getinlinecache);
3421
+
3422
+ END_INSN(trace_getinlinecache);}}}
3423
+ INSN_ENTRY(trace_setinlinecache){
3424
+ {
3425
+ {
3426
+ vm_trace(ec, GET_CFP(), GET_PC());
3427
+ DISPATCH_ORIGINAL_INSN(setinlinecache);
3428
+
3429
+ END_INSN(trace_setinlinecache);}}}
3430
+ INSN_ENTRY(trace_once){
3431
+ {
3432
+ {
3433
+ vm_trace(ec, GET_CFP(), GET_PC());
3434
+ DISPATCH_ORIGINAL_INSN(once);
3435
+
3436
+ END_INSN(trace_once);}}}
3437
+ INSN_ENTRY(trace_opt_case_dispatch){
3438
+ {
3439
+ {
3440
+ vm_trace(ec, GET_CFP(), GET_PC());
3441
+ DISPATCH_ORIGINAL_INSN(opt_case_dispatch);
3442
+
3443
+ END_INSN(trace_opt_case_dispatch);}}}
3444
+ INSN_ENTRY(trace_opt_plus){
3445
+ {
3446
+ {
3447
+ vm_trace(ec, GET_CFP(), GET_PC());
3448
+ DISPATCH_ORIGINAL_INSN(opt_plus);
3449
+
3450
+ END_INSN(trace_opt_plus);}}}
3451
+ INSN_ENTRY(trace_opt_minus){
3452
+ {
3453
+ {
3454
+ vm_trace(ec, GET_CFP(), GET_PC());
3455
+ DISPATCH_ORIGINAL_INSN(opt_minus);
3456
+
3457
+ END_INSN(trace_opt_minus);}}}
3458
+ INSN_ENTRY(trace_opt_mult){
3459
+ {
3460
+ {
3461
+ vm_trace(ec, GET_CFP(), GET_PC());
3462
+ DISPATCH_ORIGINAL_INSN(opt_mult);
3463
+
3464
+ END_INSN(trace_opt_mult);}}}
3465
+ INSN_ENTRY(trace_opt_div){
3466
+ {
3467
+ {
3468
+ vm_trace(ec, GET_CFP(), GET_PC());
3469
+ DISPATCH_ORIGINAL_INSN(opt_div);
3470
+
3471
+ END_INSN(trace_opt_div);}}}
3472
+ INSN_ENTRY(trace_opt_mod){
3473
+ {
3474
+ {
3475
+ vm_trace(ec, GET_CFP(), GET_PC());
3476
+ DISPATCH_ORIGINAL_INSN(opt_mod);
3477
+
3478
+ END_INSN(trace_opt_mod);}}}
3479
+ INSN_ENTRY(trace_opt_eq){
3480
+ {
3481
+ {
3482
+ vm_trace(ec, GET_CFP(), GET_PC());
3483
+ DISPATCH_ORIGINAL_INSN(opt_eq);
3484
+
3485
+ END_INSN(trace_opt_eq);}}}
3486
+ INSN_ENTRY(trace_opt_neq){
3487
+ {
3488
+ {
3489
+ vm_trace(ec, GET_CFP(), GET_PC());
3490
+ DISPATCH_ORIGINAL_INSN(opt_neq);
3491
+
3492
+ END_INSN(trace_opt_neq);}}}
3493
+ INSN_ENTRY(trace_opt_lt){
3494
+ {
3495
+ {
3496
+ vm_trace(ec, GET_CFP(), GET_PC());
3497
+ DISPATCH_ORIGINAL_INSN(opt_lt);
3498
+
3499
+ END_INSN(trace_opt_lt);}}}
3500
+ INSN_ENTRY(trace_opt_le){
3501
+ {
3502
+ {
3503
+ vm_trace(ec, GET_CFP(), GET_PC());
3504
+ DISPATCH_ORIGINAL_INSN(opt_le);
3505
+
3506
+ END_INSN(trace_opt_le);}}}
3507
+ INSN_ENTRY(trace_opt_gt){
3508
+ {
3509
+ {
3510
+ vm_trace(ec, GET_CFP(), GET_PC());
3511
+ DISPATCH_ORIGINAL_INSN(opt_gt);
3512
+
3513
+ END_INSN(trace_opt_gt);}}}
3514
+ INSN_ENTRY(trace_opt_ge){
3515
+ {
3516
+ {
3517
+ vm_trace(ec, GET_CFP(), GET_PC());
3518
+ DISPATCH_ORIGINAL_INSN(opt_ge);
3519
+
3520
+ END_INSN(trace_opt_ge);}}}
3521
+ INSN_ENTRY(trace_opt_ltlt){
3522
+ {
3523
+ {
3524
+ vm_trace(ec, GET_CFP(), GET_PC());
3525
+ DISPATCH_ORIGINAL_INSN(opt_ltlt);
3526
+
3527
+ END_INSN(trace_opt_ltlt);}}}
3528
+ INSN_ENTRY(trace_opt_aref){
3529
+ {
3530
+ {
3531
+ vm_trace(ec, GET_CFP(), GET_PC());
3532
+ DISPATCH_ORIGINAL_INSN(opt_aref);
3533
+
3534
+ END_INSN(trace_opt_aref);}}}
3535
+ INSN_ENTRY(trace_opt_aset){
3536
+ {
3537
+ {
3538
+ vm_trace(ec, GET_CFP(), GET_PC());
3539
+ DISPATCH_ORIGINAL_INSN(opt_aset);
3540
+
3541
+ END_INSN(trace_opt_aset);}}}
3542
+ INSN_ENTRY(trace_opt_aset_with){
3543
+ {
3544
+ {
3545
+ vm_trace(ec, GET_CFP(), GET_PC());
3546
+ DISPATCH_ORIGINAL_INSN(opt_aset_with);
3547
+
3548
+ END_INSN(trace_opt_aset_with);}}}
3549
+ INSN_ENTRY(trace_opt_aref_with){
3550
+ {
3551
+ {
3552
+ vm_trace(ec, GET_CFP(), GET_PC());
3553
+ DISPATCH_ORIGINAL_INSN(opt_aref_with);
3554
+
3555
+ END_INSN(trace_opt_aref_with);}}}
3556
+ INSN_ENTRY(trace_opt_length){
3557
+ {
3558
+ {
3559
+ vm_trace(ec, GET_CFP(), GET_PC());
3560
+ DISPATCH_ORIGINAL_INSN(opt_length);
3561
+
3562
+ END_INSN(trace_opt_length);}}}
3563
+ INSN_ENTRY(trace_opt_size){
3564
+ {
3565
+ {
3566
+ vm_trace(ec, GET_CFP(), GET_PC());
3567
+ DISPATCH_ORIGINAL_INSN(opt_size);
3568
+
3569
+ END_INSN(trace_opt_size);}}}
3570
+ INSN_ENTRY(trace_opt_empty_p){
3571
+ {
3572
+ {
3573
+ vm_trace(ec, GET_CFP(), GET_PC());
3574
+ DISPATCH_ORIGINAL_INSN(opt_empty_p);
3575
+
3576
+ END_INSN(trace_opt_empty_p);}}}
3577
+ INSN_ENTRY(trace_opt_succ){
3578
+ {
3579
+ {
3580
+ vm_trace(ec, GET_CFP(), GET_PC());
3581
+ DISPATCH_ORIGINAL_INSN(opt_succ);
3582
+
3583
+ END_INSN(trace_opt_succ);}}}
3584
+ INSN_ENTRY(trace_opt_not){
3585
+ {
3586
+ {
3587
+ vm_trace(ec, GET_CFP(), GET_PC());
3588
+ DISPATCH_ORIGINAL_INSN(opt_not);
3589
+
3590
+ END_INSN(trace_opt_not);}}}
3591
+ INSN_ENTRY(trace_opt_regexpmatch1){
3592
+ {
3593
+ {
3594
+ vm_trace(ec, GET_CFP(), GET_PC());
3595
+ DISPATCH_ORIGINAL_INSN(opt_regexpmatch1);
3596
+
3597
+ END_INSN(trace_opt_regexpmatch1);}}}
3598
+ INSN_ENTRY(trace_opt_regexpmatch2){
3599
+ {
3600
+ {
3601
+ vm_trace(ec, GET_CFP(), GET_PC());
3602
+ DISPATCH_ORIGINAL_INSN(opt_regexpmatch2);
3603
+
3604
+ END_INSN(trace_opt_regexpmatch2);}}}
3605
+ INSN_ENTRY(trace_opt_call_c_function){
3606
+ {
3607
+ {
3608
+ vm_trace(ec, GET_CFP(), GET_PC());
3609
+ DISPATCH_ORIGINAL_INSN(opt_call_c_function);
3610
+
3611
+ END_INSN(trace_opt_call_c_function);}}}
3612
+ INSN_ENTRY(trace_bitblt){
3613
+ {
3614
+ {
3615
+ vm_trace(ec, GET_CFP(), GET_PC());
3616
+ DISPATCH_ORIGINAL_INSN(bitblt);
3617
+
3618
+ END_INSN(trace_bitblt);}}}
3619
+ INSN_ENTRY(trace_answer){
3620
+ {
3621
+ {
3622
+ vm_trace(ec, GET_CFP(), GET_PC());
3623
+ DISPATCH_ORIGINAL_INSN(answer);
3624
+
3625
+ END_INSN(trace_answer);}}}
3626
+ INSN_ENTRY(trace_getlocal_OP__WC__0){
3627
+ {
3628
+ {
3629
+ vm_trace(ec, GET_CFP(), GET_PC());
3630
+ DISPATCH_ORIGINAL_INSN(getlocal_OP__WC__0);
3631
+
3632
+ END_INSN(trace_getlocal_OP__WC__0);}}}
3633
+ INSN_ENTRY(trace_getlocal_OP__WC__1){
3634
+ {
3635
+ {
3636
+ vm_trace(ec, GET_CFP(), GET_PC());
3637
+ DISPATCH_ORIGINAL_INSN(getlocal_OP__WC__1);
3638
+
3639
+ END_INSN(trace_getlocal_OP__WC__1);}}}
3640
+ INSN_ENTRY(trace_setlocal_OP__WC__0){
3641
+ {
3642
+ {
3643
+ vm_trace(ec, GET_CFP(), GET_PC());
3644
+ DISPATCH_ORIGINAL_INSN(setlocal_OP__WC__0);
3645
+
3646
+ END_INSN(trace_setlocal_OP__WC__0);}}}
3647
+ INSN_ENTRY(trace_setlocal_OP__WC__1){
3648
+ {
3649
+ {
3650
+ vm_trace(ec, GET_CFP(), GET_PC());
3651
+ DISPATCH_ORIGINAL_INSN(setlocal_OP__WC__1);
3652
+
3653
+ END_INSN(trace_setlocal_OP__WC__1);}}}
3654
+ INSN_ENTRY(trace_putobject_OP_INT2FIX_O_0_C_){
3655
+ {
3656
+ {
3657
+ vm_trace(ec, GET_CFP(), GET_PC());
3658
+ DISPATCH_ORIGINAL_INSN(putobject_OP_INT2FIX_O_0_C_);
3659
+
3660
+ END_INSN(trace_putobject_OP_INT2FIX_O_0_C_);}}}
3661
+ INSN_ENTRY(trace_putobject_OP_INT2FIX_O_1_C_){
3662
+ {
3663
+ {
3664
+ vm_trace(ec, GET_CFP(), GET_PC());
3665
+ DISPATCH_ORIGINAL_INSN(putobject_OP_INT2FIX_O_1_C_);
3666
+
3667
+ END_INSN(trace_putobject_OP_INT2FIX_O_1_C_);}}}