Changeset 46879 in webkit for trunk/JavaScriptCore/jit/JITOpcodes.cpp
- Timestamp:
- Aug 6, 2009, 8:05:42 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JITOpcodes.cpp
r46831 r46879 40 40 #if USE(JSVALUE32_64) 41 41 42 void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executablePool, JSGlobalData* globalData, CodePtr* ctiStringLengthTrampoline, CodePtr* ctiVirtualCall PreLink, CodePtr* ctiVirtualCallLink, CodePtr* ctiVirtualCall, CodePtr* ctiNativeCallThunk)42 void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executablePool, JSGlobalData* globalData, CodePtr* ctiStringLengthTrampoline, CodePtr* ctiVirtualCallLink, CodePtr* ctiVirtualCall, CodePtr* ctiNativeCallThunk) 43 43 { 44 44 #if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS) … … 65 65 66 66 #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 address77 restoreArgumentReference();78 Call callJSFunction1 = call();79 move(regT0, regT2);80 emitGetJITStubArg(1, regT0); // callee81 emitGetJITStubArg(5, regT1); // argCount82 restoreReturnAddressBeforeReturn(regT3); // return address83 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 address92 emitPutJITStubArg(regT2, 7); // codeBlock93 restoreArgumentReference();94 Call callArityCheck1 = call();95 move(regT1, callFrameRegister);96 emitGetJITStubArg(1, regT0); // callee97 emitGetJITStubArg(5, regT1); // argCount98 restoreReturnAddressBeforeReturn(regT3); // return address99 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 112 67 /* VirtualCallLink Trampoline */ 113 68 Label virtualCallLinkBegin = align(); … … 167 122 preserveReturnAddressAfterCall(regT3); // return address 168 123 restoreArgumentReference(); 169 Call callJSFunction 3= call();124 Call callJSFunction1 = call(); 170 125 move(regT0, regT2); 171 126 emitGetJITStubArg(1, regT0); // callee … … 183 138 emitPutJITStubArg(regT2, 7); // codeBlock 184 139 restoreArgumentReference(); 185 Call callArityCheck 3= call();140 Call callArityCheck1 = call(); 186 141 move(regT1, callFrameRegister); 187 142 emitGetJITStubArg(1, regT0); // callee … … 355 310 patchBuffer.link(string_failureCases3Call, FunctionPtr(cti_op_get_by_id_string_fail)); 356 311 #endif 357 #if ENABLE(JIT_OPTIMIZE_CALL)358 312 patchBuffer.link(callArityCheck1, FunctionPtr(cti_op_call_arityCheck)); 359 313 patchBuffer.link(callJSFunction1, FunctionPtr(cti_op_call_JSFunction)); 314 #if ENABLE(JIT_OPTIMIZE_CALL) 360 315 patchBuffer.link(callArityCheck2, FunctionPtr(cti_op_call_arityCheck)); 361 316 patchBuffer.link(callJSFunction2, FunctionPtr(cti_op_call_JSFunction)); 362 patchBuffer.link(callDontLazyLinkCall, FunctionPtr(cti_vm_dontLazyLinkCall));363 317 patchBuffer.link(callLazyLinkCall, FunctionPtr(cti_vm_lazyLinkCall)); 364 318 #endif 365 patchBuffer.link(callArityCheck3, FunctionPtr(cti_op_call_arityCheck));366 patchBuffer.link(callJSFunction3, FunctionPtr(cti_op_call_JSFunction));367 319 368 320 CodeRef finalCode = patchBuffer.finalizeCode(); … … 377 329 #endif 378 330 #if ENABLE(JIT_OPTIMIZE_CALL) 379 *ctiVirtualCallPreLink = trampolineAt(finalCode, virtualCallPreLinkBegin);380 331 *ctiVirtualCallLink = trampolineAt(finalCode, virtualCallLinkBegin); 381 332 #else 382 UNUSED_PARAM(ctiVirtualCallPreLink);383 333 UNUSED_PARAM(ctiVirtualCallLink); 384 334 #endif … … 1510 1460 do { m_labels[m_bytecodeIndex + (targetOffset)].used(); } while (false) 1511 1461 1512 void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executablePool, JSGlobalData* globalData, CodePtr* ctiStringLengthTrampoline, CodePtr* ctiVirtualCall PreLink, CodePtr* ctiVirtualCallLink, CodePtr* ctiVirtualCall, CodePtr* ctiNativeCallThunk)1462 void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executablePool, JSGlobalData* globalData, CodePtr* ctiStringLengthTrampoline, CodePtr* ctiVirtualCallLink, CodePtr* ctiVirtualCall, CodePtr* ctiNativeCallThunk) 1513 1463 { 1514 1464 #if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS) … … 1534 1484 // (3) Trampolines for the slow cases of op_call / op_call_eval / op_construct. 1535 1485 COMPILE_ASSERT(sizeof(CodeType) == 4, CodeTypeEnumMustBe32Bit); 1536 1537 Label virtualCallPreLinkBegin = align();1538 1539 // Load the callee CodeBlock* into eax1540 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);1577 1486 1578 1487 Label virtualCallLinkBegin = align(); … … 1624 1533 preserveReturnAddressAfterCall(regT3); 1625 1534 restoreArgumentReference(); 1626 Call callJSFunction 3= call();1535 Call callJSFunction1 = call(); 1627 1536 emitGetJITStubArg(1, regT2); 1628 1537 emitGetJITStubArg(3, regT1); … … 1639 1548 emitPutJITStubArg(regT0, 4); 1640 1549 restoreArgumentReference(); 1641 Call callArityCheck 3= call();1550 Call callArityCheck1 = call(); 1642 1551 move(regT1, callFrameRegister); 1643 1552 emitGetJITStubArg(1, regT2); … … 1882 1791 patchBuffer.link(string_failureCases3Call, FunctionPtr(cti_op_get_by_id_string_fail)); 1883 1792 #endif 1793 patchBuffer.link(callArityCheck1, FunctionPtr(cti_op_call_arityCheck)); 1794 patchBuffer.link(callJSFunction1, FunctionPtr(cti_op_call_JSFunction)); 1884 1795 #if ENABLE(JIT_OPTIMIZE_CALL) 1885 patchBuffer.link(callArityCheck1, FunctionPtr(cti_op_call_arityCheck));1886 1796 patchBuffer.link(callArityCheck2, FunctionPtr(cti_op_call_arityCheck)); 1887 patchBuffer.link(callJSFunction1, FunctionPtr(cti_op_call_JSFunction));1888 1797 patchBuffer.link(callJSFunction2, FunctionPtr(cti_op_call_JSFunction)); 1889 patchBuffer.link(callDontLazyLinkCall, FunctionPtr(cti_vm_dontLazyLinkCall));1890 1798 patchBuffer.link(callLazyLinkCall, FunctionPtr(cti_vm_lazyLinkCall)); 1891 1799 #endif 1892 patchBuffer.link(callArityCheck3, FunctionPtr(cti_op_call_arityCheck));1893 patchBuffer.link(callJSFunction3, FunctionPtr(cti_op_call_JSFunction));1894 1800 1895 1801 CodeRef finalCode = patchBuffer.finalizeCode(); 1896 1802 *executablePool = finalCode.m_executablePool; 1897 1803 1898 *ctiVirtualCallPreLink = trampolineAt(finalCode, virtualCallPreLinkBegin);1899 1804 *ctiVirtualCallLink = trampolineAt(finalCode, virtualCallLinkBegin); 1900 1805 *ctiVirtualCall = trampolineAt(finalCode, virtualCallBegin);
Note:
See TracChangeset
for help on using the changeset viewer.