blob: 9749af7a43ddb0959ee2b8ed9a199c22381dc0aa [file] [log] [blame]
fpizlo@apple.com0309686b2013-12-02 19:49:43 +00001/*
mark.lam@apple.com03916fe2017-02-28 01:20:54 +00002 * Copyright (C) 2013-2017 Apple Inc. All rights reserved.
fpizlo@apple.com0309686b2013-12-02 19:49:43 +00003 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
ryanhaddad@apple.com22104f52016-09-28 17:08:17 +000026#pragma once
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000027
28#include "CodeBlock.h"
29
30namespace JSC {
31
utatane.tea@gmail.comc2585192016-08-25 22:55:10 +000032template<typename Block, typename Functor, typename Instruction>
33void computeUsesForBytecodeOffset(Block* codeBlock, OpcodeID opcodeID, Instruction* instruction, const Functor& functor)
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000034{
sbarati@apple.com60a3be72017-08-25 18:26:15 +000035 if (opcodeID != op_enter && (codeBlock->wasCompiledWithDebuggingOpcodes() || codeBlock->usesEval()) && codeBlock->scopeRegister().isValid())
sbarati@apple.com5c4cd812016-06-02 22:18:27 +000036 functor(codeBlock, instruction, opcodeID, codeBlock->scopeRegister().offset());
37
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000038 switch (opcodeID) {
39 // No uses.
40 case op_new_regexp:
41 case op_new_array_buffer:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000042 case op_debug:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000043 case op_jneq_ptr:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000044 case op_loop_hint:
45 case op_jmp:
46 case op_new_object:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000047 case op_enter:
keith_miller@apple.com85aeabb2016-06-03 23:06:39 +000048 case op_argument_count:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000049 case op_catch:
saambarati1@gmail.comb4f28a52014-12-05 05:58:07 +000050 case op_profile_control_flow:
fpizlo@apple.comda834ae2015-03-26 04:28:43 +000051 case op_create_direct_arguments:
keith_miller@apple.com26367392016-03-14 20:55:15 +000052 case op_create_cloned_arguments:
sbarati@apple.com855d5602015-11-30 20:36:54 +000053 case op_get_rest_length:
mark.lam@apple.com03916fe2017-02-28 01:20:54 +000054 case op_check_traps:
utatane.tea@gmail.combebf7852016-11-10 06:34:05 +000055 case op_get_argument:
sbarati@apple.com12cb9452017-05-25 18:47:38 +000056 case op_nop:
fpizlo@apple.comf5026842017-06-06 18:08:17 +000057 case op_unreachable:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000058 return;
utatane.tea@gmail.com9b3f8662015-11-13 18:52:03 +000059 case op_assert:
msaboff@apple.com8b6b3412014-11-04 03:36:28 +000060 case op_get_scope:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000061 case op_to_this:
rniwa@webkit.orgeb7ac192015-03-13 01:11:15 +000062 case op_check_tdz:
keith_miller@apple.com591a67d2017-08-15 04:18:56 +000063 case op_identity_with_profile:
commit-queue@webkit.org2ed31ec2014-08-21 01:03:20 +000064 case op_profile_type:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000065 case op_throw:
sbarati@apple.comc1f73c32017-09-01 05:41:08 +000066 case op_throw_static_error:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000067 case op_end:
68 case op_ret:
69 case op_jtrue:
70 case op_jfalse:
71 case op_jeq_null:
72 case op_jneq_null:
73 case op_dec:
utatane.tea@gmail.comfdd9bf42015-12-02 03:16:28 +000074 case op_inc:
sbarati@apple.comc1f73c32017-09-01 05:41:08 +000075 case op_log_shadow_chicken_prologue: {
sbarati@apple.comed271f92016-01-19 04:08:56 +000076 ASSERT(opcodeLengths[opcodeID] > 1);
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000077 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
78 return;
79 }
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000080 case op_jlesseq:
81 case op_jgreater:
82 case op_jgreatereq:
83 case op_jnless:
84 case op_jnlesseq:
85 case op_jngreater:
86 case op_jngreatereq:
sbarati@apple.com855d5602015-11-30 20:36:54 +000087 case op_jless:
utatane.tea@gmail.comfcab24f2017-09-27 18:51:12 +000088 case op_jbelow:
89 case op_jbeloweq:
mark.lam@apple.com47c2f142016-03-16 18:16:32 +000090 case op_set_function_name:
sbarati@apple.com6cfefd82016-08-13 02:14:42 +000091 case op_log_shadow_chicken_tail: {
sbarati@apple.comed271f92016-01-19 04:08:56 +000092 ASSERT(opcodeLengths[opcodeID] > 2);
fpizlo@apple.com0309686b2013-12-02 19:49:43 +000093 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
94 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
95 return;
96 }
97 case op_put_by_val_direct:
98 case op_put_by_val: {
sbarati@apple.comed271f92016-01-19 04:08:56 +000099 ASSERT(opcodeLengths[opcodeID] > 3);
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000100 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
101 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
102 functor(codeBlock, instruction, opcodeID, instruction[3].u.operand);
103 return;
104 }
105 case op_put_by_index:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000106 case op_put_by_id:
fpizlo@apple.comda834ae2015-03-26 04:28:43 +0000107 case op_put_to_scope:
108 case op_put_to_arguments: {
sbarati@apple.comed271f92016-01-19 04:08:56 +0000109 ASSERT(opcodeLengths[opcodeID] > 3);
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000110 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
111 functor(codeBlock, instruction, opcodeID, instruction[3].u.operand);
112 return;
113 }
sbarati@apple.com23315d62016-05-09 20:17:23 +0000114 case op_put_by_id_with_this: {
115 ASSERT(opcodeLengths[opcodeID] > 4);
116 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
117 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
118 functor(codeBlock, instruction, opcodeID, instruction[4].u.operand);
119 return;
120 }
121 case op_put_by_val_with_this: {
122 ASSERT(opcodeLengths[opcodeID] > 4);
123 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
124 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
125 functor(codeBlock, instruction, opcodeID, instruction[3].u.operand);
126 functor(codeBlock, instruction, opcodeID, instruction[4].u.operand);
127 return;
128 }
rniwa@webkit.org87ae29c2015-08-14 23:50:25 +0000129 case op_put_getter_by_id:
130 case op_put_setter_by_id: {
sbarati@apple.comed271f92016-01-19 04:08:56 +0000131 ASSERT(opcodeLengths[opcodeID] > 4);
rniwa@webkit.org87ae29c2015-08-14 23:50:25 +0000132 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
133 functor(codeBlock, instruction, opcodeID, instruction[4].u.operand);
134 return;
135 }
utatane.tea@gmail.com059a71f2015-11-02 18:32:55 +0000136 case op_put_getter_setter_by_id: {
sbarati@apple.comed271f92016-01-19 04:08:56 +0000137 ASSERT(opcodeLengths[opcodeID] > 5);
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000138 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000139 functor(codeBlock, instruction, opcodeID, instruction[4].u.operand);
rniwa@webkit.org87ae29c2015-08-14 23:50:25 +0000140 functor(codeBlock, instruction, opcodeID, instruction[5].u.operand);
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000141 return;
142 }
utatane.tea@gmail.comf0153d02015-09-08 19:43:58 +0000143 case op_put_getter_by_val:
144 case op_put_setter_by_val: {
sbarati@apple.comed271f92016-01-19 04:08:56 +0000145 ASSERT(opcodeLengths[opcodeID] > 4);
utatane.tea@gmail.comf0153d02015-09-08 19:43:58 +0000146 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
147 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
148 functor(codeBlock, instruction, opcodeID, instruction[4].u.operand);
149 return;
150 }
utatane.tea@gmail.comf7db5592016-10-04 19:31:24 +0000151 case op_define_data_property: {
152 ASSERT(opcodeLengths[opcodeID] > 4);
153 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
154 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
155 functor(codeBlock, instruction, opcodeID, instruction[3].u.operand);
156 functor(codeBlock, instruction, opcodeID, instruction[4].u.operand);
157 return;
158 }
159 case op_define_accessor_property: {
160 ASSERT(opcodeLengths[opcodeID] > 5);
161 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
162 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
163 functor(codeBlock, instruction, opcodeID, instruction[3].u.operand);
164 functor(codeBlock, instruction, opcodeID, instruction[4].u.operand);
165 functor(codeBlock, instruction, opcodeID, instruction[5].u.operand);
166 return;
167 }
sbarati@apple.com99ed4792016-11-12 02:58:11 +0000168 case op_spread:
msaboff@apple.comb644c252015-03-24 10:05:21 +0000169 case op_get_property_enumerator:
fpizlo@apple.coma398a562014-08-06 21:32:55 +0000170 case op_get_enumerable_length:
msaboff@apple.com5e62e3f2014-11-21 23:41:26 +0000171 case op_new_func_exp:
utatane.tea@gmail.comfdd9bf42015-12-02 03:16:28 +0000172 case op_new_generator_func_exp:
caitp@igalia.com04d4f602016-10-28 16:37:38 +0000173 case op_new_async_func_exp:
fpizlo@apple.coma398a562014-08-06 21:32:55 +0000174 case op_to_index_string:
saambarati1@gmail.com144f17c2015-07-15 21:41:08 +0000175 case op_create_lexical_environment:
msaboff@apple.com5e62e3f2014-11-21 23:41:26 +0000176 case op_resolve_scope:
gskachkov@gmail.com077d7d52017-04-30 08:06:23 +0000177 case op_resolve_scope_for_hoisting_func_decl_in_eval:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000178 case op_get_from_scope:
179 case op_to_primitive:
keith_miller@apple.com8844d302016-04-07 19:38:00 +0000180 case op_try_get_by_id:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000181 case op_get_by_id:
keith_miller@apple.com30e90262016-06-02 21:24:21 +0000182 case op_get_by_id_proto_load:
183 case op_get_by_id_unset:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000184 case op_get_array_length:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000185 case op_typeof:
gskachkov@gmail.com086f8f62016-04-26 18:40:41 +0000186 case op_is_empty:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000187 case op_is_undefined:
188 case op_is_boolean:
189 case op_is_number:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000190 case op_is_object:
utatane.tea@gmail.com0bfb74c2015-02-24 23:01:58 +0000191 case op_is_object_or_null:
utatane.tea@gmail.com3634afe2016-09-19 17:00:25 +0000192 case op_is_cell_with_type:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000193 case op_is_function:
194 case op_to_number:
utatane.tea@gmail.com4014aea2015-04-27 00:27:28 +0000195 case op_to_string:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000196 case op_negate:
197 case op_neq_null:
198 case op_eq_null:
199 case op_not:
200 case op_mov:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000201 case op_new_array_with_size:
commit-queue@webkit.org19660ce2015-05-12 05:48:57 +0000202 case op_create_this:
fpizlo@apple.com9089acb2013-12-14 06:33:42 +0000203 case op_del_by_id:
fpizlo@apple.comda834ae2015-03-26 04:28:43 +0000204 case op_unsigned:
205 case op_new_func:
gskachkov@gmail.comab749fd2017-08-23 17:05:33 +0000206 case op_new_async_generator_func:
207 case op_new_async_generator_func_exp:
utatane.tea@gmail.comfdd9bf42015-12-02 03:16:28 +0000208 case op_new_generator_func:
caitp@igalia.com04d4f602016-10-28 16:37:38 +0000209 case op_new_async_func:
saambarati1@gmail.com144f17c2015-07-15 21:41:08 +0000210 case op_get_parent_scope:
fpizlo@apple.comda834ae2015-03-26 04:28:43 +0000211 case op_create_scoped_arguments:
sbarati@apple.com6cfefd82016-08-13 02:14:42 +0000212 case op_create_rest:
fpizlo@apple.comda834ae2015-03-26 04:28:43 +0000213 case op_get_from_arguments: {
sbarati@apple.comed271f92016-01-19 04:08:56 +0000214 ASSERT(opcodeLengths[opcodeID] > 2);
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000215 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
216 return;
217 }
fpizlo@apple.coma398a562014-08-06 21:32:55 +0000218 case op_has_generic_property:
fpizlo@apple.coma398a562014-08-06 21:32:55 +0000219 case op_has_indexed_property:
msaboff@apple.comb644c252015-03-24 10:05:21 +0000220 case op_enumerator_structure_pname:
221 case op_enumerator_generic_pname:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000222 case op_get_by_val:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000223 case op_in:
keith_miller@apple.comcb11fe42015-12-18 00:37:35 +0000224 case op_overrides_has_instance:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000225 case op_instanceof:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000226 case op_add:
227 case op_mul:
228 case op_div:
229 case op_mod:
230 case op_sub:
utatane.tea@gmail.come9906382016-07-21 07:33:28 +0000231 case op_pow:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000232 case op_lshift:
233 case op_rshift:
234 case op_urshift:
235 case op_bitand:
236 case op_bitxor:
237 case op_bitor:
238 case op_less:
239 case op_lesseq:
240 case op_greater:
241 case op_greatereq:
utatane.tea@gmail.comfcab24f2017-09-27 18:51:12 +0000242 case op_below:
243 case op_beloweq:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000244 case op_nstricteq:
245 case op_stricteq:
246 case op_neq:
247 case op_eq:
saambarati1@gmail.come85426c2015-08-07 17:41:22 +0000248 case op_push_with_scope:
sbarati@apple.com23315d62016-05-09 20:17:23 +0000249 case op_get_by_id_with_this:
keith_miller@apple.come497e202016-06-13 21:05:36 +0000250 case op_del_by_val:
251 case op_tail_call_forward_arguments: {
keith_miller@apple.comcb11fe42015-12-18 00:37:35 +0000252 ASSERT(opcodeLengths[opcodeID] > 3);
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000253 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
254 functor(codeBlock, instruction, opcodeID, instruction[3].u.operand);
255 return;
256 }
sbarati@apple.com23315d62016-05-09 20:17:23 +0000257 case op_get_by_val_with_this: {
258 ASSERT(opcodeLengths[opcodeID] > 4);
259 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
260 functor(codeBlock, instruction, opcodeID, instruction[3].u.operand);
261 functor(codeBlock, instruction, opcodeID, instruction[4].u.operand);
262 return;
263 }
keith_miller@apple.comcb11fe42015-12-18 00:37:35 +0000264 case op_instanceof_custom:
fpizlo@apple.coma398a562014-08-06 21:32:55 +0000265 case op_has_structure_property:
oliver@apple.com177c2b92014-03-28 01:10:25 +0000266 case op_construct_varargs:
msaboff@apple.comc15ae7e2015-09-16 23:40:35 +0000267 case op_call_varargs:
268 case op_tail_call_varargs: {
keith_miller@apple.comcb11fe42015-12-18 00:37:35 +0000269 ASSERT(opcodeLengths[opcodeID] > 4);
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000270 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
271 functor(codeBlock, instruction, opcodeID, instruction[3].u.operand);
272 functor(codeBlock, instruction, opcodeID, instruction[4].u.operand);
273 return;
274 }
fpizlo@apple.coma398a562014-08-06 21:32:55 +0000275 case op_get_direct_pname: {
keith_miller@apple.comcb11fe42015-12-18 00:37:35 +0000276 ASSERT(opcodeLengths[opcodeID] > 5);
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000277 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
278 functor(codeBlock, instruction, opcodeID, instruction[3].u.operand);
279 functor(codeBlock, instruction, opcodeID, instruction[4].u.operand);
280 functor(codeBlock, instruction, opcodeID, instruction[5].u.operand);
281 return;
282 }
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000283 case op_switch_string:
284 case op_switch_char:
285 case op_switch_imm: {
keith_miller@apple.comcb11fe42015-12-18 00:37:35 +0000286 ASSERT(opcodeLengths[opcodeID] > 3);
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000287 functor(codeBlock, instruction, opcodeID, instruction[3].u.operand);
288 return;
289 }
sbarati@apple.com99ed4792016-11-12 02:58:11 +0000290 case op_new_array_with_spread:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000291 case op_new_array:
292 case op_strcat: {
293 int base = instruction[2].u.operand;
294 int count = instruction[3].u.operand;
295 for (int i = 0; i < count; i++)
296 functor(codeBlock, instruction, opcodeID, base - i);
297 return;
298 }
299 case op_construct:
300 case op_call_eval:
msaboff@apple.comc15ae7e2015-09-16 23:40:35 +0000301 case op_call:
302 case op_tail_call: {
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000303 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
304 int argCount = instruction[3].u.operand;
305 int registerOffset = -instruction[4].u.operand;
306 int lastArg = registerOffset + CallFrame::thisArgumentOffset();
rniwa@webkit.orgfda6b5e2015-02-25 00:41:35 +0000307 for (int i = 0; i < argCount; i++)
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000308 functor(codeBlock, instruction, opcodeID, lastArg + i);
fpizlo@apple.com48bf58d2016-07-18 19:32:34 +0000309 if (opcodeID == op_call_eval)
310 functor(codeBlock, instruction, opcodeID, codeBlock->scopeRegister().offset());
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000311 return;
312 }
utatane.tea@gmail.comc2585192016-08-25 22:55:10 +0000313 case op_yield: {
utatane.tea@gmail.comfdd9bf42015-12-02 03:16:28 +0000314 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
utatane.tea@gmail.comc2585192016-08-25 22:55:10 +0000315 functor(codeBlock, instruction, opcodeID, instruction[3].u.operand);
utatane.tea@gmail.comfdd9bf42015-12-02 03:16:28 +0000316 return;
317 }
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000318 default:
319 RELEASE_ASSERT_NOT_REACHED();
320 break;
321 }
322}
323
utatane.tea@gmail.comc2585192016-08-25 22:55:10 +0000324template<typename Block, typename Instruction, typename Functor>
325void computeDefsForBytecodeOffset(Block* codeBlock, OpcodeID opcodeID, Instruction* instruction, const Functor& functor)
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000326{
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000327 switch (opcodeID) {
328 // These don't define anything.
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000329 case op_put_to_scope:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000330 case op_end:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000331 case op_throw:
332 case op_throw_static_error:
youenn.fablet@crf.canon.fr5f0b7be2015-11-09 14:15:21 +0000333 case op_assert:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000334 case op_debug:
335 case op_ret:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000336 case op_jmp:
337 case op_jtrue:
338 case op_jfalse:
339 case op_jeq_null:
340 case op_jneq_null:
341 case op_jneq_ptr:
342 case op_jless:
343 case op_jlesseq:
344 case op_jgreater:
345 case op_jgreatereq:
346 case op_jnless:
347 case op_jnlesseq:
348 case op_jngreater:
349 case op_jngreatereq:
utatane.tea@gmail.comfcab24f2017-09-27 18:51:12 +0000350 case op_jbelow:
351 case op_jbeloweq:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000352 case op_loop_hint:
353 case op_switch_imm:
354 case op_switch_char:
355 case op_switch_string:
356 case op_put_by_id:
sbarati@apple.com23315d62016-05-09 20:17:23 +0000357 case op_put_by_id_with_this:
358 case op_put_by_val_with_this:
commit-queue@webkit.orgfb471b42015-05-14 01:32:25 +0000359 case op_put_getter_by_id:
360 case op_put_setter_by_id:
utatane.tea@gmail.com059a71f2015-11-02 18:32:55 +0000361 case op_put_getter_setter_by_id:
utatane.tea@gmail.comf0153d02015-09-08 19:43:58 +0000362 case op_put_getter_by_val:
363 case op_put_setter_by_val:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000364 case op_put_by_val:
365 case op_put_by_val_direct:
366 case op_put_by_index:
utatane.tea@gmail.comf7db5592016-10-04 19:31:24 +0000367 case op_define_data_property:
368 case op_define_accessor_property:
commit-queue@webkit.org2ed31ec2014-08-21 01:03:20 +0000369 case op_profile_type:
saambarati1@gmail.comb4f28a52014-12-05 05:58:07 +0000370 case op_profile_control_flow:
fpizlo@apple.comda834ae2015-03-26 04:28:43 +0000371 case op_put_to_arguments:
mark.lam@apple.com47c2f142016-03-16 18:16:32 +0000372 case op_set_function_name:
mark.lam@apple.com03916fe2017-02-28 01:20:54 +0000373 case op_check_traps:
fpizlo@apple.com39303e02016-04-05 22:17:35 +0000374 case op_log_shadow_chicken_prologue:
375 case op_log_shadow_chicken_tail:
utatane.tea@gmail.comc2585192016-08-25 22:55:10 +0000376 case op_yield:
sbarati@apple.com12cb9452017-05-25 18:47:38 +0000377 case op_nop:
fpizlo@apple.comf5026842017-06-06 18:08:17 +0000378 case op_unreachable:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000379#define LLINT_HELPER_OPCODES(opcode, length) case opcode:
380 FOR_EACH_LLINT_OPCODE_EXTENSION(LLINT_HELPER_OPCODES);
381#undef LLINT_HELPER_OPCODES
382 return;
383 // These all have a single destination for the first argument.
keith_miller@apple.com85aeabb2016-06-03 23:06:39 +0000384 case op_argument_count:
fpizlo@apple.coma398a562014-08-06 21:32:55 +0000385 case op_to_index_string:
fpizlo@apple.coma398a562014-08-06 21:32:55 +0000386 case op_get_enumerable_length:
387 case op_has_indexed_property:
388 case op_has_structure_property:
389 case op_has_generic_property:
390 case op_get_direct_pname:
msaboff@apple.comb644c252015-03-24 10:05:21 +0000391 case op_get_property_enumerator:
392 case op_enumerator_structure_pname:
393 case op_enumerator_generic_pname:
saambarati1@gmail.com144f17c2015-07-15 21:41:08 +0000394 case op_get_parent_scope:
msaboff@apple.com5e62e3f2014-11-21 23:41:26 +0000395 case op_push_with_scope:
saambarati1@gmail.com144f17c2015-07-15 21:41:08 +0000396 case op_create_lexical_environment:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000397 case op_resolve_scope:
gskachkov@gmail.com077d7d52017-04-30 08:06:23 +0000398 case op_resolve_scope_for_hoisting_func_decl_in_eval:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000399 case op_strcat:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000400 case op_to_primitive:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000401 case op_create_this:
402 case op_new_array:
sbarati@apple.com99ed4792016-11-12 02:58:11 +0000403 case op_new_array_with_spread:
404 case op_spread:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000405 case op_new_array_buffer:
406 case op_new_array_with_size:
407 case op_new_regexp:
408 case op_new_func:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000409 case op_new_func_exp:
utatane.tea@gmail.comfdd9bf42015-12-02 03:16:28 +0000410 case op_new_generator_func:
411 case op_new_generator_func_exp:
gskachkov@gmail.comab749fd2017-08-23 17:05:33 +0000412 case op_new_async_generator_func:
413 case op_new_async_generator_func_exp:
caitp@igalia.com04d4f602016-10-28 16:37:38 +0000414 case op_new_async_func:
415 case op_new_async_func_exp:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000416 case op_call_varargs:
msaboff@apple.comc15ae7e2015-09-16 23:40:35 +0000417 case op_tail_call_varargs:
keith_miller@apple.come497e202016-06-13 21:05:36 +0000418 case op_tail_call_forward_arguments:
oliver@apple.com177c2b92014-03-28 01:10:25 +0000419 case op_construct_varargs:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000420 case op_get_from_scope:
421 case op_call:
msaboff@apple.comc15ae7e2015-09-16 23:40:35 +0000422 case op_tail_call:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000423 case op_call_eval:
424 case op_construct:
keith_miller@apple.com8844d302016-04-07 19:38:00 +0000425 case op_try_get_by_id:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000426 case op_get_by_id:
keith_miller@apple.com30e90262016-06-02 21:24:21 +0000427 case op_get_by_id_proto_load:
428 case op_get_by_id_unset:
sbarati@apple.com23315d62016-05-09 20:17:23 +0000429 case op_get_by_id_with_this:
430 case op_get_by_val_with_this:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000431 case op_get_array_length:
keith_miller@apple.comcb11fe42015-12-18 00:37:35 +0000432 case op_overrides_has_instance:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000433 case op_instanceof:
keith_miller@apple.comcb11fe42015-12-18 00:37:35 +0000434 case op_instanceof_custom:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000435 case op_get_by_val:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000436 case op_typeof:
keith_miller@apple.com591a67d2017-08-15 04:18:56 +0000437 case op_identity_with_profile:
gskachkov@gmail.com086f8f62016-04-26 18:40:41 +0000438 case op_is_empty:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000439 case op_is_undefined:
440 case op_is_boolean:
441 case op_is_number:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000442 case op_is_object:
utatane.tea@gmail.com0bfb74c2015-02-24 23:01:58 +0000443 case op_is_object_or_null:
utatane.tea@gmail.com3634afe2016-09-19 17:00:25 +0000444 case op_is_cell_with_type:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000445 case op_is_function:
446 case op_in:
447 case op_to_number:
utatane.tea@gmail.com4014aea2015-04-27 00:27:28 +0000448 case op_to_string:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000449 case op_negate:
450 case op_add:
451 case op_mul:
452 case op_div:
453 case op_mod:
454 case op_sub:
utatane.tea@gmail.come9906382016-07-21 07:33:28 +0000455 case op_pow:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000456 case op_lshift:
457 case op_rshift:
458 case op_urshift:
459 case op_bitand:
460 case op_bitxor:
461 case op_bitor:
462 case op_inc:
463 case op_dec:
464 case op_eq:
465 case op_neq:
466 case op_stricteq:
467 case op_nstricteq:
468 case op_less:
469 case op_lesseq:
470 case op_greater:
471 case op_greatereq:
utatane.tea@gmail.comfcab24f2017-09-27 18:51:12 +0000472 case op_below:
473 case op_beloweq:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000474 case op_neq_null:
475 case op_eq_null:
476 case op_not:
477 case op_mov:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000478 case op_new_object:
479 case op_to_this:
rniwa@webkit.orgeb7ac192015-03-13 01:11:15 +0000480 case op_check_tdz:
msaboff@apple.com8b6b3412014-11-04 03:36:28 +0000481 case op_get_scope:
fpizlo@apple.comda834ae2015-03-26 04:28:43 +0000482 case op_create_direct_arguments:
483 case op_create_scoped_arguments:
keith_miller@apple.com26367392016-03-14 20:55:15 +0000484 case op_create_cloned_arguments:
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000485 case op_del_by_id:
fpizlo@apple.com9089acb2013-12-14 06:33:42 +0000486 case op_del_by_val:
fpizlo@apple.comda834ae2015-03-26 04:28:43 +0000487 case op_unsigned:
sbarati@apple.com855d5602015-11-30 20:36:54 +0000488 case op_get_from_arguments:
utatane.tea@gmail.combebf7852016-11-10 06:34:05 +0000489 case op_get_argument:
sbarati@apple.com6cfefd82016-08-13 02:14:42 +0000490 case op_create_rest:
sbarati@apple.com855d5602015-11-30 20:36:54 +0000491 case op_get_rest_length: {
keith_miller@apple.comcb11fe42015-12-18 00:37:35 +0000492 ASSERT(opcodeLengths[opcodeID] > 1);
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000493 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
494 return;
495 }
saambarati1@gmail.com144f17c2015-07-15 21:41:08 +0000496 case op_catch: {
keith_miller@apple.comcb11fe42015-12-18 00:37:35 +0000497 ASSERT(opcodeLengths[opcodeID] > 2);
msaboff@apple.com5e62e3f2014-11-21 23:41:26 +0000498 functor(codeBlock, instruction, opcodeID, instruction[1].u.operand);
499 functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
500 return;
501 }
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000502 case op_enter: {
503 for (unsigned i = codeBlock->m_numVars; i--;)
504 functor(codeBlock, instruction, opcodeID, virtualRegisterForLocal(i).offset());
505 return;
utatane.tea@gmail.comfdd9bf42015-12-02 03:16:28 +0000506 }
utatane.tea@gmail.comfdd9bf42015-12-02 03:16:28 +0000507 }
fpizlo@apple.com0309686b2013-12-02 19:49:43 +0000508}
509
510} // namespace JSC