2  * Copyright (C) 2008, 2013 Apple Inc. All rights reserved. 
   3  * Copyright (C) Research In Motion Limited 2010. All rights reserved. 
   5  * Redistribution and use in source and binary forms, with or without 
   6  * modification, are permitted provided that the following conditions 
   9  * 1.  Redistributions of source code must retain the above copyright 
  10  *     notice, this list of conditions and the following disclaimer. 
  11  * 2.  Redistributions in binary form must reproduce the above copyright 
  12  *     notice, this list of conditions and the following disclaimer in the 
  13  *     documentation and/or other materials provided with the distribution. 
  14  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of 
  15  *     its contributors may be used to endorse or promote products derived 
  16  *     from this software without specific prior written permission. 
  18  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 
  19  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
  21  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 
  22  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
  23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
  24  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
  25  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
  26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
  27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  34 #include "Intrinsic.h" 
  35 #include "LowLevelInterpreter.h" 
  36 #include "MacroAssemblerCodeRef.h" 
  38 #include "ResolveOperation.h" 
  44 struct StructureStubInfo
; 
  46 class ArrayAllocationProfile
; 
  49 class FunctionExecutable
; 
  54 class JSPropertyNameIterator
; 
  57 class JSValueEncodedAsPointer
; 
  59 class NativeExecutable
; 
  61 class PutPropertySlot
; 
  65 template <typename T
> class Weak
; 
  69     EncodedJSValue asEncodedJSValue
; 
  72     JSValue 
jsValue() { return JSValue::decode(asEncodedJSValue
); } 
  73     JSObject
* jsObject() { return static_cast<JSObject
*>(asPointer
); } 
  74     Register
* reg() { return static_cast<Register
*>(asPointer
); } 
  75     Identifier
& identifier() { return *static_cast<Identifier
*>(asPointer
); } 
  76     int32_t int32() { return asInt32
; } 
  77     CodeBlock
* codeBlock() { return static_cast<CodeBlock
*>(asPointer
); } 
  78     FunctionExecutable
* function() { return static_cast<FunctionExecutable
*>(asPointer
); } 
  79     RegExp
* regExp() { return static_cast<RegExp
*>(asPointer
); } 
  80     JSPropertyNameIterator
* propertyNameIterator() { return static_cast<JSPropertyNameIterator
*>(asPointer
); } 
  81     JSGlobalObject
* globalObject() { return static_cast<JSGlobalObject
*>(asPointer
); } 
  82     JSString
* jsString() { return static_cast<JSString
*>(asPointer
); } 
  83     Structure
* structure() { return static_cast<Structure
*>(asPointer
); } 
  84     ReturnAddressPtr 
returnAddress() { return ReturnAddressPtr(asPointer
); } 
  85     ResolveOperations
* resolveOperations() { return static_cast<ResolveOperations
*>(asPointer
); } 
  86     PutToBaseOperation
* putToBaseOperation() { return static_cast<PutToBaseOperation
*>(asPointer
); } 
  87     ArrayAllocationProfile
* arrayAllocationProfile() { return static_cast<ArrayAllocationProfile
*>(asPointer
); } 
  90 #if !OS(WINDOWS) && CPU(X86_64) 
  91 struct JITStackFrame 
{ 
  92     void* reserved
; // Unused 
  94     void* padding
[2]; // Maintain 32-byte stack alignment (possibly overkill). 
 111     // When JIT code makes a call, it pushes its return address just below the rest of the stack. 
 112     ReturnAddressPtr
* returnAddressSlot() { return reinterpret_cast<ReturnAddressPtr
*>(this) - 1; } 
 115 struct JITStackFrame 
{ 
 118     ReturnAddressPtr thunkReturnAddress
; 
 120     void* preservedReturnAddress
; 
 133     CallFrame
* callFrame
; 
 134     LegacyProfiler
** enabledProfilerReference
; 
 137     ReturnAddressPtr
* returnAddressSlot() { return &thunkReturnAddress
; } 
 139 #elif OS(WINDOWS) && CPU(X86_64) 
 140 struct JITStackFrame 
{ 
 141     void* shadow
[4]; // Shadow space reserved for a callee's parameters home addresses 
 142     void* reserved
; // Unused, also maintains the 16-bytes stack alignment 
 153     // Home addresses for our register passed parameters 
 154     // http://msdn.microsoft.com/en-us/library/ew5tede7.aspx 
 157     CallFrame
* callFrame
; 
 160     // Passed on the stack 
 164     // When JIT code makes a call, it pushes its return address just below the rest of the stack. 
 165     ReturnAddressPtr
* returnAddressSlot() { return reinterpret_cast<ReturnAddressPtr
*>(this) - 1; } 
 168 #if COMPILER(MSVC) || (OS(WINDOWS) && COMPILER(GCC)) 
 171 #endif // COMPILER(MSVC) || (OS(WINDOWS) && COMPILER(GCC)) 
 172 struct JITStackFrame 
{ 
 173     void* reserved
; // Unused 
 175 #if USE(JSVALUE32_64) 
 176     void* padding
[2]; // Maintain 16-byte stack alignment. 
 187     CallFrame
* callFrame
; 
 192     // When JIT code makes a call, it pushes its return address just below the rest of the stack. 
 193     ReturnAddressPtr
* returnAddressSlot() { return reinterpret_cast<ReturnAddressPtr
*>(this) - 1; } 
 195 #if COMPILER(MSVC) || (OS(WINDOWS) && COMPILER(GCC)) 
 197 #endif // COMPILER(MSVC) || (OS(WINDOWS) && COMPILER(GCC)) 
 198 #elif CPU(ARM_THUMB2) 
 199 struct JITStackFrame 
{ 
 200     JITStubArg reserved
; // Unused 
 203     ReturnAddressPtr thunkReturnAddress
; 
 205     void* preservedReturnAddress
; 
 215     // These arguments passed in r1..r3 (r0 contained the entry code pointed, which is not preserved) 
 217     CallFrame
* callFrame
; 
 219     // These arguments passed on the stack. 
 223     ReturnAddressPtr
* returnAddressSlot() { return &thunkReturnAddress
; } 
 225 #elif CPU(ARM_TRADITIONAL) 
 229 #endif // COMPILER(MSVC) 
 230 struct JITStackFrame 
{ 
 231     JITStubArg padding
; // Unused 
 234     ReturnAddressPtr thunkReturnAddress
; 
 246     CallFrame
* callFrame
; 
 249     // These arguments passed on the stack. 
 253     // When JIT code makes a call, it pushes its return address just below the rest of the stack. 
 254     ReturnAddressPtr
* returnAddressSlot() { return &thunkReturnAddress
; } 
 258 #endif // COMPILER(MSVC) 
 260 struct JITStackFrame 
{ 
 261     JITStubArg reserved
; // Unused 
 264 #if USE(JSVALUE32_64) 
 265     void* padding
; // Make the overall stack length 8-byte aligned. 
 268     void* preservedGP
; // store GP when using PIC code 
 274     void* preservedReturnAddress
; 
 276     ReturnAddressPtr thunkReturnAddress
; 
 278     // These arguments passed in a1..a3 (a0 contained the entry code pointed, which is not preserved) 
 280     CallFrame
* callFrame
; 
 283     // These arguments passed on the stack. 
 287     ReturnAddressPtr
* returnAddressSlot() { return &thunkReturnAddress
; } 
 290 struct JITStackFrame 
{ 
 291     JITStubArg padding
; // Unused 
 294     ReturnAddressPtr thunkReturnAddress
; 
 302     CallFrame
* callFrame
; 
 307     ReturnAddressPtr
* returnAddressSlot() { return &thunkReturnAddress
; } 
 310 #error "JITStackFrame not defined for this platform." 
 313 #define JITSTACKFRAME_ARGS_INDEX (OBJECT_OFFSETOF(JITStackFrame, args) / sizeof(void*)) 
 315 #define STUB_ARGS_DECLARATION void** args 
 316 #define STUB_ARGS (args) 
 320 #define JIT_STUB __fastcall 
 322 #define JIT_STUB  __attribute__ ((fastcall)) 
 323 #elif COMPILER(SUNCC) 
 326 #error "JIT_STUB function calls require fastcall conventions on x86, add appropriate directive/attribute here for your compiler!" 
 332 extern "C" void ctiVMThrowTrampoline(); 
 333 extern "C" void ctiOpThrowNotCaught(); 
 334 extern "C" EncodedJSValue 
ctiTrampoline(void* code
, JSStack
*, CallFrame
*, void* /*unused1*/, void* /*unused2*/, VM
*); 
 336 extern "C" void ctiTrampolineEnd(); 
 338 inline bool returnAddressIsInCtiTrampoline(ReturnAddressPtr returnAddress
) 
 340     return returnAddress
.value() >= bitwise_cast
<void*>(&ctiTrampoline
) 
 341         && returnAddress
.value() < bitwise_cast
<void*>(&ctiTrampolineEnd
); 
 345 void performPlatformSpecificJITAssertions(VM
*); 
 348 EncodedJSValue JIT_STUB 
cti_op_add(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 349 EncodedJSValue JIT_STUB 
cti_op_bitand(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 350 EncodedJSValue JIT_STUB 
cti_op_bitor(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 351 EncodedJSValue JIT_STUB 
cti_op_bitxor(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 352 EncodedJSValue JIT_STUB 
cti_op_call_NotJSFunction(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 353 EncodedJSValue JIT_STUB 
cti_op_call_eval(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 354 EncodedJSValue JIT_STUB 
cti_op_construct_NotJSConstruct(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 355 EncodedJSValue JIT_STUB 
cti_op_check_has_instance(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 356 EncodedJSValue JIT_STUB 
cti_op_create_this(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 357 EncodedJSValue JIT_STUB 
cti_op_convert_this(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 358 EncodedJSValue JIT_STUB 
cti_op_create_arguments(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 359 EncodedJSValue JIT_STUB 
cti_op_del_by_id(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 360 EncodedJSValue JIT_STUB 
cti_op_del_by_val(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 361 EncodedJSValue JIT_STUB 
cti_op_div(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 362 EncodedJSValue JIT_STUB 
cti_op_get_by_id(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 363 EncodedJSValue JIT_STUB 
cti_op_get_by_id_array_fail(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 364 EncodedJSValue JIT_STUB 
cti_op_get_by_id_custom_stub(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 365 EncodedJSValue JIT_STUB 
cti_op_get_by_id_generic(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 366 EncodedJSValue JIT_STUB 
cti_op_get_by_id_getter_stub(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 367 EncodedJSValue JIT_STUB 
cti_op_get_by_id_proto_fail(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 368 EncodedJSValue JIT_STUB 
cti_op_get_by_id_proto_list(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 369 EncodedJSValue JIT_STUB 
cti_op_get_by_id_proto_list_full(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 370 EncodedJSValue JIT_STUB 
cti_op_get_by_id_self_fail(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 371 EncodedJSValue JIT_STUB 
cti_op_get_by_id_string_fail(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 372 EncodedJSValue JIT_STUB 
cti_op_get_by_val(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 373 EncodedJSValue JIT_STUB 
cti_op_get_by_val_generic(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 374 EncodedJSValue JIT_STUB 
cti_op_get_by_val_string(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 375 EncodedJSValue JIT_STUB 
cti_op_in(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 376 EncodedJSValue JIT_STUB 
cti_op_instanceof(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 377 EncodedJSValue JIT_STUB 
cti_op_is_boolean(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 378 EncodedJSValue JIT_STUB 
cti_op_is_function(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 379 EncodedJSValue JIT_STUB 
cti_op_is_number(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 380 EncodedJSValue JIT_STUB 
cti_op_is_object(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 381 EncodedJSValue JIT_STUB 
cti_op_is_string(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 382 EncodedJSValue JIT_STUB 
cti_op_is_undefined(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 383 EncodedJSValue JIT_STUB 
cti_op_less(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 384 EncodedJSValue JIT_STUB 
cti_op_lesseq(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 385 EncodedJSValue JIT_STUB 
cti_op_greater(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 386 EncodedJSValue JIT_STUB 
cti_op_greatereq(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 387 EncodedJSValue JIT_STUB 
cti_op_lshift(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 388 EncodedJSValue JIT_STUB 
cti_op_mod(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 389 EncodedJSValue JIT_STUB 
cti_op_mul(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 390 EncodedJSValue JIT_STUB 
cti_op_negate(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 391 EncodedJSValue JIT_STUB 
cti_op_not(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 392 EncodedJSValue JIT_STUB 
cti_op_nstricteq(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 393 EncodedJSValue JIT_STUB 
cti_op_dec(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 394 EncodedJSValue JIT_STUB 
cti_op_inc(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 395 EncodedJSValue JIT_STUB 
cti_op_resolve(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 396 EncodedJSValue JIT_STUB 
cti_op_resolve_base(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 397 EncodedJSValue JIT_STUB 
cti_op_resolve_base_strict_put(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 398 EncodedJSValue JIT_STUB 
cti_op_resolve_with_base(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 399 EncodedJSValue JIT_STUB 
cti_op_resolve_with_this(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 400 void JIT_STUB 
cti_op_put_to_base(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 401 EncodedJSValue JIT_STUB 
cti_op_rshift(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 402 EncodedJSValue JIT_STUB 
cti_op_strcat(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 403 EncodedJSValue JIT_STUB 
cti_op_stricteq(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 404 EncodedJSValue JIT_STUB 
cti_op_sub(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 405 EncodedJSValue JIT_STUB 
cti_op_to_number(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 406 EncodedJSValue JIT_STUB 
cti_op_to_primitive(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 407 EncodedJSValue JIT_STUB 
cti_op_typeof(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 408 EncodedJSValue JIT_STUB 
cti_op_urshift(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 409 EncodedJSValue JIT_STUB 
cti_to_object(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 410 JSObject
* JIT_STUB 
cti_op_new_array(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 411 JSObject
* JIT_STUB 
cti_op_new_array_with_size(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 412 JSObject
* JIT_STUB 
cti_op_new_array_buffer(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 413 JSObject
* JIT_STUB 
cti_op_new_func(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 414 JSObject
* JIT_STUB 
cti_op_new_func_exp(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 415 JSObject
* JIT_STUB 
cti_op_new_object(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 416 JSObject
* JIT_STUB 
cti_op_new_regexp(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 417 JSObject
* JIT_STUB 
cti_op_push_activation(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 418 void JIT_STUB 
cti_op_push_name_scope(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 419 void JIT_STUB 
cti_op_push_with_scope(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 420 JSObject
* JIT_STUB 
cti_op_put_by_id_transition_realloc(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 421 JSPropertyNameIterator
* JIT_STUB 
cti_op_get_pnames(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 422 int JIT_STUB 
cti_op_eq(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 423 int JIT_STUB 
cti_op_eq_strings(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 424 int JIT_STUB 
cti_op_jless(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 425 int JIT_STUB 
cti_op_jlesseq(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 426 int JIT_STUB 
cti_op_jgreater(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 427 int JIT_STUB 
cti_op_jgreatereq(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 428 int JIT_STUB 
cti_op_jtrue(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 429 void* JIT_STUB 
cti_op_load_varargs(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 430 void JIT_STUB 
cti_handle_watchdog_timer(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 431 int JIT_STUB 
cti_has_property(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 432 void JIT_STUB 
cti_op_debug(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 433 void JIT_STUB 
cti_op_end(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 434 void JIT_STUB 
cti_op_pop_scope(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 435 void JIT_STUB 
cti_op_profile_did_call(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 436 void JIT_STUB 
cti_op_profile_will_call(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 437 void JIT_STUB 
cti_op_put_by_id(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 438 void JIT_STUB 
cti_op_put_by_id_fail(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 439 void JIT_STUB 
cti_op_put_by_id_generic(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 440 void JIT_STUB 
cti_op_put_by_id_direct(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 441 void JIT_STUB 
cti_op_put_by_id_direct_fail(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 442 void JIT_STUB 
cti_op_put_by_id_direct_generic(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 443 void JIT_STUB 
cti_op_put_by_index(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 444 void JIT_STUB 
cti_op_put_by_val(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 445 void JIT_STUB 
cti_op_put_by_val_generic(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 446 void JIT_STUB 
cti_op_put_getter_setter(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 447 void JIT_STUB 
cti_op_init_global_const_check(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 448 void JIT_STUB 
cti_op_tear_off_activation(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 449 void JIT_STUB 
cti_op_tear_off_arguments(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 450 void JIT_STUB 
cti_op_throw_static_error(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 452 void JIT_STUB 
cti_optimize(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 454 void* JIT_STUB 
cti_op_call_arityCheck(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 455 void* JIT_STUB 
cti_op_construct_arityCheck(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 456 void* JIT_STUB 
cti_op_call_jitCompile(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 457 void* JIT_STUB 
cti_op_construct_jitCompile(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 458 void* JIT_STUB 
cti_op_switch_char(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 459 void* JIT_STUB 
cti_op_switch_imm(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 460 void* JIT_STUB 
cti_op_switch_string(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 461 void* JIT_STUB 
cti_op_throw(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 462 void* JIT_STUB 
cti_stack_check(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 463 void* JIT_STUB 
cti_vm_lazyLinkCall(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 464 void* JIT_STUB 
cti_vm_lazyLinkClosureCall(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 465 void* JIT_STUB 
cti_vm_lazyLinkConstruct(STUB_ARGS_DECLARATION
) WTF_INTERNAL
; 
 466 void* JIT_STUB 
cti_vm_throw(STUB_ARGS_DECLARATION
) REFERENCED_FROM_ASM WTF_INTERNAL
; 
 469 #elif ENABLE(LLINT_C_LOOP) 
 471 struct JITStackFrame 
{ 
 475 #endif // ENABLE(LLINT_C_LOOP)