]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - llint/LLIntSlowPaths.h
JavaScriptCore-7600.1.4.11.8.tar.gz
[apple/javascriptcore.git] / llint / LLIntSlowPaths.h
index dbf68b2f9d690c018efd6f44745c7ec69a2ddf41..2f8cffd0ef14904f4f99cf539dc8937d3e40c028 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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)
@@ -113,53 +62,14 @@ LLINT_SLOW_PATH_HIDDEN_DECL(entry_osr_function_for_construct_arityCheck);
 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);
@@ -168,6 +78,7 @@ LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_get_by_val);
 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);
@@ -188,7 +99,9 @@ LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_new_func);
 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);
@@ -205,11 +118,17 @@ LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_handle_watchdog_timer);
 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