// SHA1Hash: 44b45f856c275b4e4b4411d352030916578d55cc
/*
* Copyright (C) 2014 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1.  Redistributions of source code must retain the above copyright
*     notice, this list of conditions and the following disclaimer. 
* 2.  Redistributions in binary form must reproduce the above copyright
*     notice, this list of conditions and the following disclaimer in the
*     documentation and/or other materials provided with the distribution. 
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

* Autogenerated from Source/JavaScriptCore/bytecode/BytecodeList.json, do not modify.
*/

#ifndef Bytecodes_h
#define Bytecodes_h

#define FOR_EACH_BYTECODE_ID(macro) \
    macro(op_enter, 1) \
    macro(op_get_scope, 2) \
    macro(op_create_direct_arguments, 2) \
    macro(op_create_scoped_arguments, 3) \
    macro(op_create_cloned_arguments, 2) \
    macro(op_create_this, 5) \
    macro(op_argument_count, 2) \
    macro(op_to_this, 4) \
    macro(op_check_tdz, 2) \
    macro(op_new_object, 4) \
    macro(op_new_array, 5) \
    macro(op_new_array_with_size, 4) \
    macro(op_new_array_buffer, 5) \
    macro(op_new_regexp, 3) \
    macro(op_mov, 3) \
    macro(op_not, 3) \
    macro(op_eq, 4) \
    macro(op_eq_null, 3) \
    macro(op_neq, 4) \
    macro(op_neq_null, 3) \
    macro(op_stricteq, 4) \
    macro(op_nstricteq, 4) \
    macro(op_less, 4) \
    macro(op_lesseq, 4) \
    macro(op_greater, 4) \
    macro(op_greatereq, 4) \
    macro(op_inc, 2) \
    macro(op_dec, 2) \
    macro(op_to_number, 4) \
    macro(op_to_string, 3) \
    macro(op_negate, 4) \
    macro(op_add, 5) \
    macro(op_mul, 5) \
    macro(op_div, 5) \
    macro(op_mod, 4) \
    macro(op_sub, 5) \
    macro(op_pow, 4) \
    macro(op_lshift, 4) \
    macro(op_rshift, 4) \
    macro(op_urshift, 4) \
    macro(op_unsigned, 3) \
    macro(op_bitand, 5) \
    macro(op_bitxor, 5) \
    macro(op_bitor, 5) \
    macro(op_overrides_has_instance, 4) \
    macro(op_instanceof, 4) \
    macro(op_instanceof_custom, 5) \
    macro(op_typeof, 3) \
    macro(op_is_empty, 3) \
    macro(op_is_undefined, 3) \
    macro(op_is_boolean, 3) \
    macro(op_is_number, 3) \
    macro(op_is_object, 3) \
    macro(op_is_object_or_null, 3) \
    macro(op_is_function, 3) \
    macro(op_is_cell_with_type, 4) \
    macro(op_in, 4) \
    macro(op_get_array_length, 9) \
    macro(op_get_by_id, 9) \
    macro(op_get_by_id_proto_load, 9) \
    macro(op_get_by_id_unset, 9) \
    macro(op_get_by_id_with_this, 6) \
    macro(op_get_by_val_with_this, 6) \
    macro(op_try_get_by_id, 5) \
    macro(op_put_by_id, 9) \
    macro(op_put_by_id_with_this, 5) \
    macro(op_del_by_id, 4) \
    macro(op_get_by_val, 6) \
    macro(op_put_by_val, 5) \
    macro(op_put_by_val_with_this, 5) \
    macro(op_put_by_val_direct, 5) \
    macro(op_del_by_val, 4) \
    macro(op_put_by_index, 4) \
    macro(op_put_getter_by_id, 5) \
    macro(op_put_setter_by_id, 5) \
    macro(op_put_getter_setter_by_id, 6) \
    macro(op_put_getter_by_val, 5) \
    macro(op_put_setter_by_val, 5) \
    macro(op_jmp, 2) \
    macro(op_jtrue, 3) \
    macro(op_jfalse, 3) \
    macro(op_jeq_null, 3) \
    macro(op_jneq_null, 3) \
    macro(op_jneq_ptr, 5) \
    macro(op_jless, 4) \
    macro(op_jlesseq, 4) \
    macro(op_jgreater, 4) \
    macro(op_jgreatereq, 4) \
    macro(op_jnless, 4) \
    macro(op_jnlesseq, 4) \
    macro(op_jngreater, 4) \
    macro(op_jngreatereq, 4) \
    macro(op_loop_hint, 1) \
    macro(op_switch_imm, 4) \
    macro(op_switch_char, 4) \
    macro(op_switch_string, 4) \
    macro(op_new_func, 4) \
    macro(op_new_func_exp, 4) \
    macro(op_new_generator_func, 4) \
    macro(op_new_generator_func_exp, 4) \
    macro(op_set_function_name, 3) \
    macro(op_call, 9) \
    macro(op_tail_call, 9) \
    macro(op_call_eval, 9) \
    macro(op_call_varargs, 9) \
    macro(op_tail_call_varargs, 9) \
    macro(op_tail_call_forward_arguments, 9) \
    macro(op_ret, 2) \
    macro(op_construct, 9) \
    macro(op_construct_varargs, 9) \
    macro(op_strcat, 4) \
    macro(op_to_primitive, 3) \
    macro(op_resolve_scope, 7) \
    macro(op_get_from_scope, 8) \
    macro(op_put_to_scope, 7) \
    macro(op_get_from_arguments, 5) \
    macro(op_put_to_arguments, 4) \
    macro(op_push_with_scope, 4) \
    macro(op_create_lexical_environment, 5) \
    macro(op_get_parent_scope, 3) \
    macro(op_catch, 3) \
    macro(op_throw, 2) \
    macro(op_throw_static_error, 3) \
    macro(op_debug, 3) \
    macro(op_end, 2) \
    macro(op_profile_type, 6) \
    macro(op_profile_control_flow, 2) \
    macro(op_get_enumerable_length, 3) \
    macro(op_has_indexed_property, 5) \
    macro(op_has_structure_property, 5) \
    macro(op_has_generic_property, 4) \
    macro(op_get_direct_pname, 7) \
    macro(op_get_property_enumerator, 3) \
    macro(op_enumerator_structure_pname, 4) \
    macro(op_enumerator_generic_pname, 4) \
    macro(op_to_index_string, 3) \
    macro(op_assert, 3) \
    macro(op_create_rest, 4) \
    macro(op_get_rest_length, 3) \
    macro(op_yield, 4) \
    macro(op_watchdog, 1) \
    macro(op_log_shadow_chicken_prologue, 2) \
    macro(op_log_shadow_chicken_tail, 3)

#define NUMBER_OF_BYTECODE_IDS 143

#define FOR_EACH_CLOOP_BYTECODE_HELPER_ID(macro) \
    macro(llint_entry, 1) \
    macro(getHostCallReturnValue, 1) \
    macro(llint_return_to_host, 1) \
    macro(llint_vm_entry_to_javascript, 1) \
    macro(llint_vm_entry_to_native, 1) \
    macro(llint_cloop_did_return_from_js_1, 1) \
    macro(llint_cloop_did_return_from_js_2, 1) \
    macro(llint_cloop_did_return_from_js_3, 1) \
    macro(llint_cloop_did_return_from_js_4, 1) \
    macro(llint_cloop_did_return_from_js_5, 1) \
    macro(llint_cloop_did_return_from_js_6, 1) \
    macro(llint_cloop_did_return_from_js_7, 1) \
    macro(llint_cloop_did_return_from_js_8, 1) \
    macro(llint_cloop_did_return_from_js_9, 1) \
    macro(llint_cloop_did_return_from_js_10, 1) \
    macro(llint_cloop_did_return_from_js_11, 1) \
    macro(llint_cloop_did_return_from_js_12, 1)

#define NUMBER_OF_CLOOP_BYTECODE_HELPER_IDS 17

#define FOR_EACH_BYTECODE_HELPER_ID(macro) \
    macro(llint_program_prologue, 1) \
    macro(llint_eval_prologue, 1) \
    macro(llint_module_program_prologue, 1) \
    macro(llint_function_for_call_prologue, 1) \
    macro(llint_function_for_construct_prologue, 1) \
    macro(llint_function_for_call_arity_check, 1) \
    macro(llint_function_for_construct_arity_check, 1) \
    macro(llint_generic_return_point, 1) \
    macro(llint_throw_from_slow_path_trampoline, 1) \
    macro(llint_throw_during_call_trampoline, 1) \
    macro(llint_native_call_trampoline, 1) \
    macro(llint_native_construct_trampoline, 1) \
    macro(handleUncaughtException, 1)

#define NUMBER_OF_BYTECODE_HELPER_IDS 13

#endif // Bytecodes_h
