/*
- * Copyright (C) 2011 Apple Inc. All rights reserved.
+ * Copyright (C) 2011, 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
#ifndef LLIntSlowPaths_h
#define LLIntSlowPaths_h
-#include <wtf/Platform.h>
+#include "CommonSlowPaths.h"
#include <wtf/StdLibExtras.h>
-#if ENABLE(LLINT)
-
namespace JSC {
class ExecState;
struct Instruction;
+struct ProtoCallFrame;
namespace LLInt {
-#if USE(JSVALUE64)
-// According to C++ rules, a type used for the return signature of function with C linkage (i.e.
-// 'extern "C"') needs to be POD; hence putting any constructors into it could cause either compiler
-// warnings, or worse, a change in the ABI used to return these types.
-struct SlowPathReturnType {
- void* a;
- ExecState* b;
-};
-
-inline SlowPathReturnType encodeResult(void* a, ExecState* b)
-{
- SlowPathReturnType result;
- result.a = a;
- result.b = b;
- return result;
-}
-
-inline void decodeResult(SlowPathReturnType result, void*& a, ExecState*& b)
-{
- a = result.a;
- b = result.b;
-}
-
-#else // USE(JSVALUE32_64)
-typedef int64_t SlowPathReturnType;
-
-typedef union {
- struct {
- void* a;
- ExecState* b;
- } pair;
- int64_t i;
-} SlowPathReturnTypeEncoding;
-
-inline SlowPathReturnType encodeResult(void* a, ExecState* b)
-{
- SlowPathReturnTypeEncoding u;
- u.pair.a = a;
- u.pair.b = b;
- return u.i;
-}
-
-inline void decodeResult(SlowPathReturnType result, void*& a, ExecState*& b)
-{
- SlowPathReturnTypeEncoding u;
- u.i = result;
- a = u.pair.a;
- b = u.pair.b;
-}
-#endif // USE(JSVALUE32_64)
-
extern "C" SlowPathReturnType llint_trace_operand(ExecState*, Instruction*, int fromWhere, int operand);
extern "C" SlowPathReturnType llint_trace_value(ExecState*, Instruction*, int fromWhere, int operand);
+extern "C" void llint_write_barrier_slow(ExecState*, JSCell*) WTF_INTERNAL;
#define LLINT_SLOW_PATH_DECL(name) \
extern "C" SlowPathReturnType llint_##name(ExecState* exec, Instruction* pc)
LLINT_SLOW_PATH_HIDDEN_DECL(loop_osr);
LLINT_SLOW_PATH_HIDDEN_DECL(replace);
LLINT_SLOW_PATH_HIDDEN_DECL(stack_check);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_call_arityCheck);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_construct_arityCheck);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_create_activation);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_create_arguments);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_create_this);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_convert_this);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_new_object);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_new_array);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_new_array_with_size);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_new_array_buffer);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_new_regexp);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_not);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_eq);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_neq);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_stricteq);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_nstricteq);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_less);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_lesseq);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_greater);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_greatereq);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_pre_inc);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_pre_dec);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_to_number);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_negate);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_add);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_mul);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_sub);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_div);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_mod);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_lshift);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_rshift);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_urshift);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_bitand);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_bitor);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_bitxor);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_check_has_instance);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_instanceof);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_typeof);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_is_object);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_is_function);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_in);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_resolve);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_put_to_base);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_resolve_base);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_resolve_with_base);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_resolve_with_this);
-LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_init_global_const_check);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_get_by_id);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_get_arguments_length);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_put_by_id);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_get_argument_by_val);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_get_by_pname);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_put_by_val);
+LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_put_by_val_direct);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_del_by_val);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_put_by_index);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_put_getter_setter);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_new_func_exp);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_call);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_construct);
+LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_size_frame_for_varargs);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_call_varargs);
+LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_construct_varargs);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_call_eval);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_tear_off_activation);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_tear_off_arguments);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_debug);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_profile_will_call);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_profile_did_call);
-LLINT_SLOW_PATH_HIDDEN_DECL(throw_from_native_call);
+LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_handle_exception);
+LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_resolve_scope);
+LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_get_from_scope);
+LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_put_to_scope);
+extern "C" SlowPathReturnType llint_throw_stack_overflow_error(VM*, ProtoCallFrame*) WTF_INTERNAL;
+#if !ENABLE(JIT)
+extern "C" SlowPathReturnType llint_stack_check_at_vm_entry(VM*, Register*) WTF_INTERNAL;
+#endif
+extern "C" NO_RETURN_DUE_TO_CRASH void llint_crash() WTF_INTERNAL;
} } // namespace JSC::LLInt
-#endif // ENABLE(LLINT)
-
#endif // LLIntSlowPaths_h