Changeset 44412 in webkit for trunk/JavaScriptCore/jit/JIT.cpp
- Timestamp:
- Jun 4, 2009, 4:00:58 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JIT.cpp
r44076 r44412 390 390 391 391 // Could use a pop_m, but would need to offset the following instruction if so. 392 p op(regT2);392 preverveReturnAddressAfterCall(regT2); 393 393 emitPutToCallFrameHeader(regT2, RegisterFile::ReturnPC); 394 394 … … 539 539 #endif 540 540 541 #if !(PLATFORM(X86) || PLATFORM(X86_64))542 #error "This code is less portable than it looks this code assumes that regT3 is callee preserved, which happens to be true on x86/x86-64."543 #endif544 545 541 // (3) Trampolines for the slow cases of op_call / op_call_eval / op_construct. 546 542 … … 554 550 loadPtr(Address(regT3, FIELD_OFFSET(FunctionBodyNode, m_jitCode)), regT0); 555 551 Jump isNativeFunc1 = branchTestPtr(NonZero, regT0); 556 p op(regT3);552 preverveReturnAddressAfterCall(regT3); 557 553 restoreArgumentReference(); 558 554 Call callJSFunction1 = call(); 559 555 emitGetJITStubArg(1, regT2); 560 556 emitGetJITStubArg(3, regT1); 561 push(regT3);557 restoreReturnAddressBeforeReturn(regT3); 562 558 hasCodeBlock1.link(this); 563 559 564 560 // Check argCount matches callee arity. 565 561 Jump arityCheckOkay1 = branch32(Equal, Address(regT0, FIELD_OFFSET(CodeBlock, m_numParameters)), regT1); 566 p op(regT3);562 preverveReturnAddressAfterCall(regT3); 567 563 emitPutJITStubArg(regT3, 2); 568 564 emitPutJITStubArg(regT0, 4); … … 572 568 emitGetJITStubArg(1, regT2); 573 569 emitGetJITStubArg(3, regT1); 574 push(regT3);570 restoreReturnAddressBeforeReturn(regT3); 575 571 arityCheckOkay1.link(this); 576 572 isNativeFunc1.link(this); … … 578 574 compileOpCallInitializeCallFrame(); 579 575 580 p op(regT3);576 preverveReturnAddressAfterCall(regT3); 581 577 emitPutJITStubArg(regT3, 2); 582 578 restoreArgumentReference(); 583 579 Call callDontLazyLinkCall = call(); 584 580 emitGetJITStubArg(1, regT2); 585 push(regT3);581 restoreReturnAddressBeforeReturn(regT3); 586 582 587 583 jump(regT0); … … 596 592 loadPtr(Address(regT3, FIELD_OFFSET(FunctionBodyNode, m_jitCode)), regT0); 597 593 Jump isNativeFunc2 = branchTestPtr(NonZero, regT0); 598 p op(regT3);594 preverveReturnAddressAfterCall(regT3); 599 595 restoreArgumentReference(); 600 596 Call callJSFunction2 = call(); 601 597 emitGetJITStubArg(1, regT2); 602 598 emitGetJITStubArg(3, regT1); 603 push(regT3);599 restoreReturnAddressBeforeReturn(regT3); 604 600 hasCodeBlock2.link(this); 605 601 606 602 // Check argCount matches callee arity. 607 603 Jump arityCheckOkay2 = branch32(Equal, Address(regT0, FIELD_OFFSET(CodeBlock, m_numParameters)), regT1); 608 p op(regT3);604 preverveReturnAddressAfterCall(regT3); 609 605 emitPutJITStubArg(regT3, 2); 610 606 emitPutJITStubArg(regT0, 4); … … 614 610 emitGetJITStubArg(1, regT2); 615 611 emitGetJITStubArg(3, regT1); 616 push(regT3);612 restoreReturnAddressBeforeReturn(regT3); 617 613 arityCheckOkay2.link(this); 618 614 isNativeFunc2.link(this); … … 620 616 compileOpCallInitializeCallFrame(); 621 617 622 p op(regT3);618 preverveReturnAddressAfterCall(regT3); 623 619 emitPutJITStubArg(regT3, 2); 624 620 restoreArgumentReference(); 625 621 Call callLazyLinkCall = call(); 626 push(regT3);622 restoreReturnAddressBeforeReturn(regT3); 627 623 628 624 jump(regT0); … … 637 633 loadPtr(Address(regT3, FIELD_OFFSET(FunctionBodyNode, m_jitCode)), regT0); 638 634 Jump isNativeFunc3 = branchTestPtr(NonZero, regT0); 639 p op(regT3);635 preverveReturnAddressAfterCall(regT3); 640 636 restoreArgumentReference(); 641 637 Call callJSFunction3 = call(); 642 638 emitGetJITStubArg(1, regT2); 643 639 emitGetJITStubArg(3, regT1); 644 push(regT3);640 restoreReturnAddressBeforeReturn(regT3); 645 641 loadPtr(Address(regT2, FIELD_OFFSET(JSFunction, m_body)), regT3); // reload the function body nody, so we can reload the code pointer. 646 642 hasCodeBlock3.link(this); … … 648 644 // Check argCount matches callee arity. 649 645 Jump arityCheckOkay3 = branch32(Equal, Address(regT0, FIELD_OFFSET(CodeBlock, m_numParameters)), regT1); 650 p op(regT3);646 preverveReturnAddressAfterCall(regT3); 651 647 emitPutJITStubArg(regT3, 2); 652 648 emitPutJITStubArg(regT0, 4); … … 656 652 emitGetJITStubArg(1, regT2); 657 653 emitGetJITStubArg(3, regT1); 658 push(regT3);654 restoreReturnAddressBeforeReturn(regT3); 659 655 loadPtr(Address(regT2, FIELD_OFFSET(JSFunction, m_body)), regT3); // reload the function body nody, so we can reload the code pointer. 660 656 arityCheckOkay3.link(this); … … 668 664 669 665 Label nativeCallThunk = align(); 670 p op(regT0);666 preverveReturnAddressAfterCall(regT0); 671 667 emitPutToCallFrameHeader(regT0, RegisterFile::ReturnPC); // Push return address 672 668 … … 819 815 820 816 // Return. 821 push(regT1);817 restoreReturnAddressBeforeReturn(regT1); 822 818 ret(); 823 819 … … 831 827 emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, callFrameRegister); 832 828 poke(callFrameRegister, offsetof(struct JITStackFrame, callFrame) / sizeof (void*)); 833 push(regT2);829 restoreReturnAddressBeforeReturn(regT2); 834 830 ret(); 835 831
Note:
See TracChangeset
for help on using the changeset viewer.