Ignore:
Timestamp:
Jul 30, 2009, 7:57:31 PM (16 years ago)
Author:
[email protected]
Message:

2009-07-30 Gavin Barraclough <[email protected]>

Reviewed by NOBODY (build fix).

Temporarily revert r46618 since this is b0rking on Linux.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/jit/JITOpcodes.cpp

    r46618 r46620  
    4040#if USE(JSVALUE32_64)
    4141
    42 void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executablePool, JSGlobalData* globalData, CodePtr* ctiStringLengthTrampoline, CodePtr* ctiVirtualCallLink, CodePtr* ctiVirtualCall, CodePtr* ctiNativeCallThunk)
     42void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executablePool, JSGlobalData* globalData, CodePtr* ctiStringLengthTrampoline, CodePtr* ctiVirtualCallPreLink, CodePtr* ctiVirtualCallLink, CodePtr* ctiVirtualCall, CodePtr* ctiNativeCallThunk)
    4343{
    4444#if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
     
    6262#endif
    6363
    64     // (2) Trampoline for the slow cases of op_call / op_call_eval / op_construct.
     64    // (2) Trampolines for the slow cases of op_call / op_call_eval / op_construct.
    6565
    6666#if ENABLE(JIT_OPTIMIZE_CALL)
     67    /* VirtualCallPreLink Trampoline */
     68    Label virtualCallPreLinkBegin = align();
     69
     70    // regT0 holds callee, regT1 holds argCount.
     71    loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_body)), regT2);
     72    loadPtr(Address(regT2, OBJECT_OFFSETOF(FunctionBodyNode, m_code)), regT2);
     73    Jump hasCodeBlock1 = branchTestPtr(NonZero, regT2);
     74
     75    // Lazily generate a CodeBlock.
     76    preserveReturnAddressAfterCall(regT3); // return address
     77    restoreArgumentReference();
     78    Call callJSFunction1 = call();
     79    move(regT0, regT2);
     80    emitGetJITStubArg(1, regT0); // callee
     81    emitGetJITStubArg(5, regT1); // argCount
     82    restoreReturnAddressBeforeReturn(regT3); // return address
     83    hasCodeBlock1.link(this);
     84
     85    // regT2 holds codeBlock.
     86    Jump isNativeFunc1 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(CodeBlock, m_codeType)), Imm32(NativeCode));
     87
     88    // Check argCount matches callee arity.
     89    Jump arityCheckOkay1 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(CodeBlock, m_numParameters)), regT1);
     90    preserveReturnAddressAfterCall(regT3);
     91    emitPutJITStubArg(regT3, 3); // return address
     92    emitPutJITStubArg(regT2, 7); // codeBlock
     93    restoreArgumentReference();
     94    Call callArityCheck1 = call();
     95    move(regT1, callFrameRegister);
     96    emitGetJITStubArg(1, regT0); // callee
     97    emitGetJITStubArg(5, regT1); // argCount
     98    restoreReturnAddressBeforeReturn(regT3); // return address
     99
     100    arityCheckOkay1.link(this);
     101    isNativeFunc1.link(this);
     102   
     103    compileOpCallInitializeCallFrame();
     104
     105    preserveReturnAddressAfterCall(regT3);
     106    emitPutJITStubArg(regT3, 3);
     107    restoreArgumentReference();
     108    Call callDontLazyLinkCall = call();
     109    restoreReturnAddressBeforeReturn(regT3);
     110    jump(regT0);
     111
    67112    /* VirtualCallLink Trampoline */
    68113    Label virtualCallLinkBegin = align();
     
    311356#endif
    312357#if ENABLE(JIT_OPTIMIZE_CALL)
     358    patchBuffer.link(callArityCheck1, FunctionPtr(cti_op_call_arityCheck));
     359    patchBuffer.link(callJSFunction1, FunctionPtr(cti_op_call_JSFunction));
    313360    patchBuffer.link(callArityCheck2, FunctionPtr(cti_op_call_arityCheck));
    314361    patchBuffer.link(callJSFunction2, FunctionPtr(cti_op_call_JSFunction));
     362    patchBuffer.link(callDontLazyLinkCall, FunctionPtr(cti_vm_dontLazyLinkCall));
    315363    patchBuffer.link(callLazyLinkCall, FunctionPtr(cti_vm_lazyLinkCall));
    316364#endif
     
    329377#endif
    330378#if ENABLE(JIT_OPTIMIZE_CALL)
     379    *ctiVirtualCallPreLink = trampolineAt(finalCode, virtualCallPreLinkBegin);
    331380    *ctiVirtualCallLink = trampolineAt(finalCode, virtualCallLinkBegin);
    332381#else
     
    14611510   do { m_labels[m_bytecodeIndex + (targetOffset)].used(); } while (false)
    14621511
    1463 void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executablePool, JSGlobalData* globalData, CodePtr* ctiStringLengthTrampoline, CodePtr* ctiVirtualCallLink, CodePtr* ctiVirtualCall, CodePtr* ctiNativeCallThunk)
     1512void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executablePool, JSGlobalData* globalData, CodePtr* ctiStringLengthTrampoline, CodePtr* ctiVirtualCallPreLink, CodePtr* ctiVirtualCallLink, CodePtr* ctiVirtualCall, CodePtr* ctiNativeCallThunk)
    14641513{
    14651514#if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
     
    14831532#endif
    14841533
    1485     // (3) Trampoline for the slow cases of op_call / op_call_eval / op_construct.
     1534    // (3) Trampolines for the slow cases of op_call / op_call_eval / op_construct.
    14861535    COMPILE_ASSERT(sizeof(CodeType) == 4, CodeTypeEnumMustBe32Bit);
     1536
     1537    Label virtualCallPreLinkBegin = align();
     1538
     1539    // Load the callee CodeBlock* into eax
     1540    loadPtr(Address(regT2, OBJECT_OFFSETOF(JSFunction, m_body)), regT3);
     1541    loadPtr(Address(regT3, OBJECT_OFFSETOF(FunctionBodyNode, m_code)), regT0);
     1542    Jump hasCodeBlock1 = branchTestPtr(NonZero, regT0);
     1543    preserveReturnAddressAfterCall(regT3);
     1544    restoreArgumentReference();
     1545    Call callJSFunction1 = call();
     1546    emitGetJITStubArg(1, regT2);
     1547    emitGetJITStubArg(3, regT1);
     1548    restoreReturnAddressBeforeReturn(regT3);
     1549    hasCodeBlock1.link(this);
     1550
     1551    Jump isNativeFunc1 = branch32(Equal, Address(regT0, OBJECT_OFFSETOF(CodeBlock, m_codeType)), Imm32(NativeCode));
     1552
     1553    // Check argCount matches callee arity.
     1554    Jump arityCheckOkay1 = branch32(Equal, Address(regT0, OBJECT_OFFSETOF(CodeBlock, m_numParameters)), regT1);
     1555    preserveReturnAddressAfterCall(regT3);
     1556    emitPutJITStubArg(regT3, 2);
     1557    emitPutJITStubArg(regT0, 4);
     1558    restoreArgumentReference();
     1559    Call callArityCheck1 = call();
     1560    move(regT1, callFrameRegister);
     1561    emitGetJITStubArg(1, regT2);
     1562    emitGetJITStubArg(3, regT1);
     1563    restoreReturnAddressBeforeReturn(regT3);
     1564    arityCheckOkay1.link(this);
     1565    isNativeFunc1.link(this);
     1566   
     1567    compileOpCallInitializeCallFrame();
     1568
     1569    preserveReturnAddressAfterCall(regT3);
     1570    emitPutJITStubArg(regT3, 2);
     1571    restoreArgumentReference();
     1572    Call callDontLazyLinkCall = call();
     1573    emitGetJITStubArg(1, regT2);
     1574    restoreReturnAddressBeforeReturn(regT3);
     1575
     1576    jump(regT0);
    14871577
    14881578    Label virtualCallLinkBegin = align();
     
    17511841    patchBuffer.link(string_failureCases3Call, FunctionPtr(cti_op_get_by_id_string_fail));
    17521842#endif
     1843    patchBuffer.link(callArityCheck1, FunctionPtr(cti_op_call_arityCheck));
    17531844    patchBuffer.link(callArityCheck2, FunctionPtr(cti_op_call_arityCheck));
    17541845    patchBuffer.link(callArityCheck3, FunctionPtr(cti_op_call_arityCheck));
     1846    patchBuffer.link(callJSFunction1, FunctionPtr(cti_op_call_JSFunction));
    17551847    patchBuffer.link(callJSFunction2, FunctionPtr(cti_op_call_JSFunction));
    17561848    patchBuffer.link(callJSFunction3, FunctionPtr(cti_op_call_JSFunction));
     1849    patchBuffer.link(callDontLazyLinkCall, FunctionPtr(cti_vm_dontLazyLinkCall));
    17571850    patchBuffer.link(callLazyLinkCall, FunctionPtr(cti_vm_lazyLinkCall));
    17581851
     
    17601853    *executablePool = finalCode.m_executablePool;
    17611854
     1855    *ctiVirtualCallPreLink = trampolineAt(finalCode, virtualCallPreLinkBegin);
    17621856    *ctiVirtualCallLink = trampolineAt(finalCode, virtualCallLinkBegin);
    17631857    *ctiVirtualCall = trampolineAt(finalCode, virtualCallBegin);
Note: See TracChangeset for help on using the changeset viewer.