Changeset 43334 in webkit for trunk/JavaScriptCore/jit
- Timestamp:
- May 6, 2009, 11:36:35 PM (16 years ago)
- Location:
- trunk/JavaScriptCore/jit
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JIT.h
r43273 r43334 62 62 struct StructureStubInfo; 63 63 64 typedef JSObject* (JIT_STUB *CTIHelper_o)(STUB_ARGS );65 typedef JSPropertyNameIterator* (JIT_STUB *CTIHelper_p)(STUB_ARGS );66 typedef void (JIT_STUB *CTIHelper_v)(STUB_ARGS );67 typedef void* (JIT_STUB *CTIHelper_s)(STUB_ARGS );68 typedef int (JIT_STUB *CTIHelper_b)(STUB_ARGS );69 typedef VoidPtrPair (JIT_STUB *CTIHelper_2)(STUB_ARGS );64 typedef JSObject* (JIT_STUB *CTIHelper_o)(STUB_ARGS_DECLARATION); 65 typedef JSPropertyNameIterator* (JIT_STUB *CTIHelper_p)(STUB_ARGS_DECLARATION); 66 typedef void (JIT_STUB *CTIHelper_v)(STUB_ARGS_DECLARATION); 67 typedef void* (JIT_STUB *CTIHelper_s)(STUB_ARGS_DECLARATION); 68 typedef int (JIT_STUB *CTIHelper_b)(STUB_ARGS_DECLARATION); 69 typedef VoidPtrPair (JIT_STUB *CTIHelper_2)(STUB_ARGS_DECLARATION); 70 70 71 71 struct CallRecord { -
trunk/JavaScriptCore/jit/JITStubs.cpp
r43331 r43334 221 221 222 222 #if ENABLE(OPCODE_SAMPLING) 223 #define CTI_SAMPLER ARG_globalData->interpreter->sampler()223 #define CTI_SAMPLER stackFrame.globalData->interpreter->sampler() 224 224 #else 225 225 #define CTI_SAMPLER 0 … … 453 453 } while (0) 454 454 #define VM_THROW_EXCEPTION_AT_END() \ 455 returnToThrowTrampoline( ARG_globalData, STUB_RETURN_ADDRESS, STUB_RETURN_ADDRESS)455 returnToThrowTrampoline(stackFrame.globalData, STUB_RETURN_ADDRESS, STUB_RETURN_ADDRESS) 456 456 457 457 #define CHECK_FOR_EXCEPTION() \ 458 458 do { \ 459 if (UNLIKELY( ARG_globalData->exception != JSValue())) \459 if (UNLIKELY(stackFrame.globalData->exception != JSValue())) \ 460 460 VM_THROW_EXCEPTION(); \ 461 461 } while (0) 462 462 #define CHECK_FOR_EXCEPTION_AT_END() \ 463 463 do { \ 464 if (UNLIKELY( ARG_globalData->exception != JSValue())) \464 if (UNLIKELY(stackFrame.globalData->exception != JSValue())) \ 465 465 VM_THROW_EXCEPTION_AT_END(); \ 466 466 } while (0) 467 467 #define CHECK_FOR_EXCEPTION_VOID() \ 468 468 do { \ 469 if (UNLIKELY( ARG_globalData->exception != JSValue())) { \469 if (UNLIKELY(stackFrame.globalData->exception != JSValue())) { \ 470 470 VM_THROW_EXCEPTION_AT_END(); \ 471 471 return; \ … … 473 473 } while (0) 474 474 475 JSObject* JITStubs::cti_op_convert_this(STUB_ARGS) 476 { 477 BEGIN_STUB_FUNCTION(); 478 479 JSValue v1 = ARG_src1; 480 CallFrame* callFrame = ARG_callFrame; 475 JSObject* JITStubs::cti_op_convert_this(STUB_ARGS_DECLARATION) 476 { 477 BEGIN_STUB_FUNCTION(); 478 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 479 480 JSValue v1 = stackFrame.args[0].jsValue(); 481 CallFrame* callFrame = stackFrame.callFrame; 481 482 482 483 JSObject* result = v1.toThisObject(callFrame); … … 485 486 } 486 487 487 void JITStubs::cti_op_end(STUB_ARGS) 488 { 489 BEGIN_STUB_FUNCTION(); 490 491 ScopeChainNode* scopeChain = ARG_callFrame->scopeChain(); 488 void JITStubs::cti_op_end(STUB_ARGS_DECLARATION) 489 { 490 BEGIN_STUB_FUNCTION(); 491 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 492 493 ScopeChainNode* scopeChain = stackFrame.callFrame->scopeChain(); 492 494 ASSERT(scopeChain->refCount > 1); 493 495 scopeChain->deref(); 494 496 } 495 497 496 EncodedJSValue JITStubs::cti_op_add(STUB_ARGS) 497 { 498 BEGIN_STUB_FUNCTION(); 499 500 JSValue v1 = ARG_src1; 501 JSValue v2 = ARG_src2; 498 EncodedJSValue JITStubs::cti_op_add(STUB_ARGS_DECLARATION) 499 { 500 BEGIN_STUB_FUNCTION(); 501 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 502 503 JSValue v1 = stackFrame.args[0].jsValue(); 504 JSValue v2 = stackFrame.args[1].jsValue(); 502 505 503 506 double left; … … 506 509 bool rightIsNumber = v2.getNumber(right); 507 510 if (rightIsNumber && v1.getNumber(left)) 508 return JSValue::encode(jsNumber( ARG_globalData, left + right));509 510 CallFrame* callFrame = ARG_callFrame;511 return JSValue::encode(jsNumber(stackFrame.globalData, left + right)); 512 513 CallFrame* callFrame = stackFrame.callFrame; 511 514 512 515 bool leftIsString = v1.isString(); … … 518 521 } 519 522 520 return JSValue::encode(jsString( ARG_globalData, value.release()));523 return JSValue::encode(jsString(stackFrame.globalData, value.release())); 521 524 } 522 525 … … 530 533 VM_THROW_EXCEPTION(); 531 534 } 532 return JSValue::encode(jsString( ARG_globalData, value.release()));535 return JSValue::encode(jsString(stackFrame.globalData, value.release())); 533 536 } 534 537 … … 539 542 } 540 543 541 EncodedJSValue JITStubs::cti_op_pre_inc(STUB_ARGS) 542 { 543 BEGIN_STUB_FUNCTION(); 544 545 JSValue v = ARG_src1; 546 547 CallFrame* callFrame = ARG_callFrame; 548 JSValue result = jsNumber(ARG_globalData, v.toNumber(callFrame) + 1); 549 CHECK_FOR_EXCEPTION_AT_END(); 550 return JSValue::encode(result); 551 } 552 553 int JITStubs::cti_timeout_check(STUB_ARGS) 554 { 555 BEGIN_STUB_FUNCTION(); 556 557 JSGlobalData* globalData = ARG_globalData; 544 EncodedJSValue JITStubs::cti_op_pre_inc(STUB_ARGS_DECLARATION) 545 { 546 BEGIN_STUB_FUNCTION(); 547 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 548 549 JSValue v = stackFrame.args[0].jsValue(); 550 551 CallFrame* callFrame = stackFrame.callFrame; 552 JSValue result = jsNumber(stackFrame.globalData, v.toNumber(callFrame) + 1); 553 CHECK_FOR_EXCEPTION_AT_END(); 554 return JSValue::encode(result); 555 } 556 557 int JITStubs::cti_timeout_check(STUB_ARGS_DECLARATION) 558 { 559 BEGIN_STUB_FUNCTION(); 560 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 561 562 JSGlobalData* globalData = stackFrame.globalData; 558 563 TimeoutChecker& timeoutChecker = globalData->timeoutChecker; 559 564 560 if (timeoutChecker.didTimeOut( ARG_callFrame)) {565 if (timeoutChecker.didTimeOut(stackFrame.callFrame)) { 561 566 globalData->exception = createInterruptedExecutionException(globalData); 562 567 VM_THROW_EXCEPTION_AT_END(); … … 566 571 } 567 572 568 void JITStubs::cti_register_file_check(STUB_ARGS) 569 { 570 BEGIN_STUB_FUNCTION(); 571 572 if (LIKELY(ARG_registerFile->grow(ARG_callFrame + ARG_callFrame->codeBlock()->m_numCalleeRegisters))) 573 void JITStubs::cti_register_file_check(STUB_ARGS_DECLARATION) 574 { 575 BEGIN_STUB_FUNCTION(); 576 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 577 578 if (LIKELY(stackFrame.registerFile->grow(stackFrame.callFrame + stackFrame.callFrame->codeBlock()->m_numCalleeRegisters))) 573 579 return; 574 580 575 581 // Rewind to the previous call frame because op_call already optimistically 576 582 // moved the call frame forward. 577 CallFrame* oldCallFrame = ARG_callFrame->callerFrame(); 578 ARG_setCallFrame(oldCallFrame); 579 throwStackOverflowError(oldCallFrame, ARG_globalData, oldCallFrame->returnPC(), STUB_RETURN_ADDRESS); 580 } 581 582 int JITStubs::cti_op_loop_if_less(STUB_ARGS) 583 { 584 BEGIN_STUB_FUNCTION(); 585 586 JSValue src1 = ARG_src1; 587 JSValue src2 = ARG_src2; 588 CallFrame* callFrame = ARG_callFrame; 583 CallFrame* oldCallFrame = stackFrame.callFrame->callerFrame(); 584 stackFrame.callFrame = oldCallFrame; 585 throwStackOverflowError(oldCallFrame, stackFrame.globalData, oldCallFrame->returnPC(), STUB_RETURN_ADDRESS); 586 } 587 588 int JITStubs::cti_op_loop_if_less(STUB_ARGS_DECLARATION) 589 { 590 BEGIN_STUB_FUNCTION(); 591 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 592 593 JSValue src1 = stackFrame.args[0].jsValue(); 594 JSValue src2 = stackFrame.args[1].jsValue(); 595 CallFrame* callFrame = stackFrame.callFrame; 589 596 590 597 bool result = jsLess(callFrame, src1, src2); … … 593 600 } 594 601 595 int JITStubs::cti_op_loop_if_lesseq(STUB_ARGS) 596 { 597 BEGIN_STUB_FUNCTION(); 598 599 JSValue src1 = ARG_src1; 600 JSValue src2 = ARG_src2; 601 CallFrame* callFrame = ARG_callFrame; 602 int JITStubs::cti_op_loop_if_lesseq(STUB_ARGS_DECLARATION) 603 { 604 BEGIN_STUB_FUNCTION(); 605 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 606 607 JSValue src1 = stackFrame.args[0].jsValue(); 608 JSValue src2 = stackFrame.args[1].jsValue(); 609 CallFrame* callFrame = stackFrame.callFrame; 602 610 603 611 bool result = jsLessEq(callFrame, src1, src2); … … 606 614 } 607 615 608 JSObject* JITStubs::cti_op_new_object(STUB_ARGS) 609 { 610 BEGIN_STUB_FUNCTION(); 611 612 return constructEmptyObject(ARG_callFrame); 613 } 614 615 void JITStubs::cti_op_put_by_id_generic(STUB_ARGS) 616 { 617 BEGIN_STUB_FUNCTION(); 616 JSObject* JITStubs::cti_op_new_object(STUB_ARGS_DECLARATION) 617 { 618 BEGIN_STUB_FUNCTION(); 619 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 620 621 return constructEmptyObject(stackFrame.callFrame); 622 } 623 624 void JITStubs::cti_op_put_by_id_generic(STUB_ARGS_DECLARATION) 625 { 626 BEGIN_STUB_FUNCTION(); 627 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 618 628 619 629 PutPropertySlot slot; 620 ARG_src1.put(ARG_callFrame, *ARG_id2, ARG_src3, slot); 621 CHECK_FOR_EXCEPTION_AT_END(); 622 } 623 624 EncodedJSValue JITStubs::cti_op_get_by_id_generic(STUB_ARGS) 625 { 626 BEGIN_STUB_FUNCTION(); 627 628 CallFrame* callFrame = ARG_callFrame; 629 Identifier& ident = *ARG_id2; 630 631 JSValue baseValue = ARG_src1; 630 stackFrame.args[0].jsValue().put(stackFrame.callFrame, stackFrame.args[1].identifier(), stackFrame.args[2].jsValue(), slot); 631 CHECK_FOR_EXCEPTION_AT_END(); 632 } 633 634 EncodedJSValue JITStubs::cti_op_get_by_id_generic(STUB_ARGS_DECLARATION) 635 { 636 BEGIN_STUB_FUNCTION(); 637 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 638 639 CallFrame* callFrame = stackFrame.callFrame; 640 Identifier& ident = stackFrame.args[1].identifier(); 641 642 JSValue baseValue = stackFrame.args[0].jsValue(); 632 643 PropertySlot slot(baseValue); 633 644 JSValue result = baseValue.get(callFrame, ident, slot); … … 639 650 #if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS) 640 651 641 void JITStubs::cti_op_put_by_id(STUB_ARGS) 642 { 643 BEGIN_STUB_FUNCTION(); 644 645 CallFrame* callFrame = ARG_callFrame; 646 Identifier& ident = *ARG_id2; 652 void JITStubs::cti_op_put_by_id(STUB_ARGS_DECLARATION) 653 { 654 BEGIN_STUB_FUNCTION(); 655 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 656 657 CallFrame* callFrame = stackFrame.callFrame; 658 Identifier& ident = stackFrame.args[1].identifier(); 647 659 648 660 PutPropertySlot slot; 649 ARG_src1.put(callFrame, ident, ARG_src3, slot);661 stackFrame.args[0].jsValue().put(callFrame, ident, stackFrame.args[2].jsValue(), slot); 650 662 651 663 ctiPatchCallByReturnAddress(STUB_RETURN_ADDRESS, reinterpret_cast<void*>(cti_op_put_by_id_second)); … … 654 666 } 655 667 656 void JITStubs::cti_op_put_by_id_second(STUB_ARGS) 657 { 658 BEGIN_STUB_FUNCTION(); 668 void JITStubs::cti_op_put_by_id_second(STUB_ARGS_DECLARATION) 669 { 670 BEGIN_STUB_FUNCTION(); 671 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 659 672 660 673 PutPropertySlot slot; 661 ARG_src1.put(ARG_callFrame, *ARG_id2, ARG_src3, slot); 662 tryCachePutByID(ARG_callFrame, ARG_callFrame->codeBlock(), STUB_RETURN_ADDRESS, ARG_src1, slot); 663 CHECK_FOR_EXCEPTION_AT_END(); 664 } 665 666 void JITStubs::cti_op_put_by_id_fail(STUB_ARGS) 667 { 668 BEGIN_STUB_FUNCTION(); 669 670 CallFrame* callFrame = ARG_callFrame; 671 Identifier& ident = *ARG_id2; 674 stackFrame.args[0].jsValue().put(stackFrame.callFrame, stackFrame.args[1].identifier(), stackFrame.args[2].jsValue(), slot); 675 tryCachePutByID(stackFrame.callFrame, stackFrame.callFrame->codeBlock(), STUB_RETURN_ADDRESS, stackFrame.args[0].jsValue(), slot); 676 CHECK_FOR_EXCEPTION_AT_END(); 677 } 678 679 void JITStubs::cti_op_put_by_id_fail(STUB_ARGS_DECLARATION) 680 { 681 BEGIN_STUB_FUNCTION(); 682 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 683 684 CallFrame* callFrame = stackFrame.callFrame; 685 Identifier& ident = stackFrame.args[1].identifier(); 672 686 673 687 PutPropertySlot slot; 674 ARG_src1.put(callFrame, ident, ARG_src3, slot); 675 676 CHECK_FOR_EXCEPTION_AT_END(); 677 } 678 679 EncodedJSValue JITStubs::cti_op_get_by_id(STUB_ARGS) 680 { 681 BEGIN_STUB_FUNCTION(); 682 683 CallFrame* callFrame = ARG_callFrame; 684 Identifier& ident = *ARG_id2; 685 686 JSValue baseValue = ARG_src1; 688 stackFrame.args[0].jsValue().put(callFrame, ident, stackFrame.args[2].jsValue(), slot); 689 690 CHECK_FOR_EXCEPTION_AT_END(); 691 } 692 693 EncodedJSValue JITStubs::cti_op_get_by_id(STUB_ARGS_DECLARATION) 694 { 695 BEGIN_STUB_FUNCTION(); 696 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 697 698 CallFrame* callFrame = stackFrame.callFrame; 699 Identifier& ident = stackFrame.args[1].identifier(); 700 701 JSValue baseValue = stackFrame.args[0].jsValue(); 687 702 PropertySlot slot(baseValue); 688 703 JSValue result = baseValue.get(callFrame, ident, slot); … … 694 709 } 695 710 696 EncodedJSValue JITStubs::cti_op_get_by_id_second(STUB_ARGS) 697 { 698 BEGIN_STUB_FUNCTION(); 699 700 CallFrame* callFrame = ARG_callFrame; 701 Identifier& ident = *ARG_id2; 702 703 JSValue baseValue = ARG_src1; 711 EncodedJSValue JITStubs::cti_op_get_by_id_second(STUB_ARGS_DECLARATION) 712 { 713 BEGIN_STUB_FUNCTION(); 714 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 715 716 CallFrame* callFrame = stackFrame.callFrame; 717 Identifier& ident = stackFrame.args[1].identifier(); 718 719 JSValue baseValue = stackFrame.args[0].jsValue(); 704 720 PropertySlot slot(baseValue); 705 721 JSValue result = baseValue.get(callFrame, ident, slot); … … 711 727 } 712 728 713 EncodedJSValue JITStubs::cti_op_get_by_id_self_fail(STUB_ARGS) 714 { 715 BEGIN_STUB_FUNCTION(); 716 717 CallFrame* callFrame = ARG_callFrame; 718 Identifier& ident = *ARG_id2; 719 720 JSValue baseValue = ARG_src1; 729 EncodedJSValue JITStubs::cti_op_get_by_id_self_fail(STUB_ARGS_DECLARATION) 730 { 731 BEGIN_STUB_FUNCTION(); 732 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 733 734 CallFrame* callFrame = stackFrame.callFrame; 735 Identifier& ident = stackFrame.args[1].identifier(); 736 737 JSValue baseValue = stackFrame.args[0].jsValue(); 721 738 PropertySlot slot(baseValue); 722 739 JSValue result = baseValue.get(callFrame, ident, slot); … … 786 803 } 787 804 788 EncodedJSValue JITStubs::cti_op_get_by_id_proto_list(STUB_ARGS) 789 { 790 BEGIN_STUB_FUNCTION(); 791 792 CallFrame* callFrame = ARG_callFrame; 793 794 JSValue baseValue = ARG_src1; 805 EncodedJSValue JITStubs::cti_op_get_by_id_proto_list(STUB_ARGS_DECLARATION) 806 { 807 BEGIN_STUB_FUNCTION(); 808 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 809 810 CallFrame* callFrame = stackFrame.callFrame; 811 812 JSValue baseValue = stackFrame.args[0].jsValue(); 795 813 PropertySlot slot(baseValue); 796 JSValue result = baseValue.get(callFrame, *ARG_id2, slot);814 JSValue result = baseValue.get(callFrame, stackFrame.args[1].identifier(), slot); 797 815 798 816 CHECK_FOR_EXCEPTION(); … … 838 856 } 839 857 840 EncodedJSValue JITStubs::cti_op_get_by_id_proto_list_full(STUB_ARGS) 841 { 842 BEGIN_STUB_FUNCTION(); 843 844 JSValue baseValue = ARG_src1; 858 EncodedJSValue JITStubs::cti_op_get_by_id_proto_list_full(STUB_ARGS_DECLARATION) 859 { 860 BEGIN_STUB_FUNCTION(); 861 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 862 863 JSValue baseValue = stackFrame.args[0].jsValue(); 845 864 PropertySlot slot(baseValue); 846 JSValue result = baseValue.get(ARG_callFrame, *ARG_id2, slot); 847 848 CHECK_FOR_EXCEPTION_AT_END(); 849 return JSValue::encode(result); 850 } 851 852 EncodedJSValue JITStubs::cti_op_get_by_id_proto_fail(STUB_ARGS) 853 { 854 BEGIN_STUB_FUNCTION(); 855 856 JSValue baseValue = ARG_src1; 865 JSValue result = baseValue.get(stackFrame.callFrame, stackFrame.args[1].identifier(), slot); 866 867 CHECK_FOR_EXCEPTION_AT_END(); 868 return JSValue::encode(result); 869 } 870 871 EncodedJSValue JITStubs::cti_op_get_by_id_proto_fail(STUB_ARGS_DECLARATION) 872 { 873 BEGIN_STUB_FUNCTION(); 874 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 875 876 JSValue baseValue = stackFrame.args[0].jsValue(); 857 877 PropertySlot slot(baseValue); 858 JSValue result = baseValue.get(ARG_callFrame, *ARG_id2, slot); 859 860 CHECK_FOR_EXCEPTION_AT_END(); 861 return JSValue::encode(result); 862 } 863 864 EncodedJSValue JITStubs::cti_op_get_by_id_array_fail(STUB_ARGS) 865 { 866 BEGIN_STUB_FUNCTION(); 867 868 JSValue baseValue = ARG_src1; 878 JSValue result = baseValue.get(stackFrame.callFrame, stackFrame.args[1].identifier(), slot); 879 880 CHECK_FOR_EXCEPTION_AT_END(); 881 return JSValue::encode(result); 882 } 883 884 EncodedJSValue JITStubs::cti_op_get_by_id_array_fail(STUB_ARGS_DECLARATION) 885 { 886 BEGIN_STUB_FUNCTION(); 887 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 888 889 JSValue baseValue = stackFrame.args[0].jsValue(); 869 890 PropertySlot slot(baseValue); 870 JSValue result = baseValue.get(ARG_callFrame, *ARG_id2, slot); 871 872 CHECK_FOR_EXCEPTION_AT_END(); 873 return JSValue::encode(result); 874 } 875 876 EncodedJSValue JITStubs::cti_op_get_by_id_string_fail(STUB_ARGS) 877 { 878 BEGIN_STUB_FUNCTION(); 879 880 JSValue baseValue = ARG_src1; 891 JSValue result = baseValue.get(stackFrame.callFrame, stackFrame.args[1].identifier(), slot); 892 893 CHECK_FOR_EXCEPTION_AT_END(); 894 return JSValue::encode(result); 895 } 896 897 EncodedJSValue JITStubs::cti_op_get_by_id_string_fail(STUB_ARGS_DECLARATION) 898 { 899 BEGIN_STUB_FUNCTION(); 900 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 901 902 JSValue baseValue = stackFrame.args[0].jsValue(); 881 903 PropertySlot slot(baseValue); 882 JSValue result = baseValue.get( ARG_callFrame, *ARG_id2, slot);904 JSValue result = baseValue.get(stackFrame.callFrame, stackFrame.args[1].identifier(), slot); 883 905 884 906 CHECK_FOR_EXCEPTION_AT_END(); … … 888 910 #endif 889 911 890 EncodedJSValue JITStubs::cti_op_instanceof(STUB_ARGS) 891 { 892 BEGIN_STUB_FUNCTION(); 893 894 CallFrame* callFrame = ARG_callFrame; 895 JSValue value = ARG_src1; 896 JSValue baseVal = ARG_src2; 897 JSValue proto = ARG_src3; 912 EncodedJSValue JITStubs::cti_op_instanceof(STUB_ARGS_DECLARATION) 913 { 914 BEGIN_STUB_FUNCTION(); 915 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 916 917 CallFrame* callFrame = stackFrame.callFrame; 918 JSValue value = stackFrame.args[0].jsValue(); 919 JSValue baseVal = stackFrame.args[1].jsValue(); 920 JSValue proto = stackFrame.args[2].jsValue(); 898 921 899 922 // at least one of these checks must have failed to get to the slow case … … 903 926 904 927 if (!baseVal.isObject()) { 905 CallFrame* callFrame = ARG_callFrame;928 CallFrame* callFrame = stackFrame.callFrame; 906 929 CodeBlock* codeBlock = callFrame->codeBlock(); 907 930 unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS); 908 ARG_globalData->exception = createInvalidParamError(callFrame, "instanceof", baseVal, vPCIndex, codeBlock);931 stackFrame.globalData->exception = createInvalidParamError(callFrame, "instanceof", baseVal, vPCIndex, codeBlock); 909 932 VM_THROW_EXCEPTION(); 910 933 } … … 931 954 } 932 955 933 EncodedJSValue JITStubs::cti_op_del_by_id(STUB_ARGS) 934 { 935 BEGIN_STUB_FUNCTION(); 936 937 CallFrame* callFrame = ARG_callFrame; 938 939 JSObject* baseObj = ARG_src1.toObject(callFrame); 940 941 JSValue result = jsBoolean(baseObj->deleteProperty(callFrame, *ARG_id2)); 942 CHECK_FOR_EXCEPTION_AT_END(); 943 return JSValue::encode(result); 944 } 945 946 EncodedJSValue JITStubs::cti_op_mul(STUB_ARGS) 947 { 948 BEGIN_STUB_FUNCTION(); 949 950 JSValue src1 = ARG_src1; 951 JSValue src2 = ARG_src2; 956 EncodedJSValue JITStubs::cti_op_del_by_id(STUB_ARGS_DECLARATION) 957 { 958 BEGIN_STUB_FUNCTION(); 959 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 960 961 CallFrame* callFrame = stackFrame.callFrame; 962 963 JSObject* baseObj = stackFrame.args[0].jsValue().toObject(callFrame); 964 965 JSValue result = jsBoolean(baseObj->deleteProperty(callFrame, stackFrame.args[1].identifier())); 966 CHECK_FOR_EXCEPTION_AT_END(); 967 return JSValue::encode(result); 968 } 969 970 EncodedJSValue JITStubs::cti_op_mul(STUB_ARGS_DECLARATION) 971 { 972 BEGIN_STUB_FUNCTION(); 973 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 974 975 JSValue src1 = stackFrame.args[0].jsValue(); 976 JSValue src2 = stackFrame.args[1].jsValue(); 952 977 953 978 double left; 954 979 double right; 955 980 if (src1.getNumber(left) && src2.getNumber(right)) 956 return JSValue::encode(jsNumber(ARG_globalData, left * right)); 957 958 CallFrame* callFrame = ARG_callFrame; 959 JSValue result = jsNumber(ARG_globalData, src1.toNumber(callFrame) * src2.toNumber(callFrame)); 960 CHECK_FOR_EXCEPTION_AT_END(); 961 return JSValue::encode(result); 962 } 963 964 JSObject* JITStubs::cti_op_new_func(STUB_ARGS) 965 { 966 BEGIN_STUB_FUNCTION(); 967 968 return ARG_func1->makeFunction(ARG_callFrame, ARG_callFrame->scopeChain()); 969 } 970 971 void* JITStubs::cti_op_call_JSFunction(STUB_ARGS) 972 { 973 BEGIN_STUB_FUNCTION(); 981 return JSValue::encode(jsNumber(stackFrame.globalData, left * right)); 982 983 CallFrame* callFrame = stackFrame.callFrame; 984 JSValue result = jsNumber(stackFrame.globalData, src1.toNumber(callFrame) * src2.toNumber(callFrame)); 985 CHECK_FOR_EXCEPTION_AT_END(); 986 return JSValue::encode(result); 987 } 988 989 JSObject* JITStubs::cti_op_new_func(STUB_ARGS_DECLARATION) 990 { 991 BEGIN_STUB_FUNCTION(); 992 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 993 994 return stackFrame.args[0].funcDeclNode()->makeFunction(stackFrame.callFrame, stackFrame.callFrame->scopeChain()); 995 } 996 997 void* JITStubs::cti_op_call_JSFunction(STUB_ARGS_DECLARATION) 998 { 999 BEGIN_STUB_FUNCTION(); 1000 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 974 1001 975 1002 #ifndef NDEBUG 976 1003 CallData callData; 977 ASSERT( ARG_src1.getCallData(callData) == CallTypeJS);1004 ASSERT(stackFrame.args[0].jsValue().getCallData(callData) == CallTypeJS); 978 1005 #endif 979 1006 980 JSFunction* function = asFunction( ARG_src1);1007 JSFunction* function = asFunction(stackFrame.args[0].jsValue()); 981 1008 FunctionBodyNode* body = function->body(); 982 1009 ScopeChainNode* callDataScopeChain = function->scope().node(); … … 986 1013 } 987 1014 988 VoidPtrPair JITStubs::cti_op_call_arityCheck(STUB_ARGS) 989 { 990 BEGIN_STUB_FUNCTION(); 991 992 CallFrame* callFrame = ARG_callFrame; 993 CodeBlock* newCodeBlock = ARG_codeBlock4; 994 int argCount = ARG_int3; 1015 VoidPtrPair JITStubs::cti_op_call_arityCheck(STUB_ARGS_DECLARATION) 1016 { 1017 BEGIN_STUB_FUNCTION(); 1018 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1019 1020 CallFrame* callFrame = stackFrame.callFrame; 1021 CodeBlock* newCodeBlock = stackFrame.args[3].codeBlock(); 1022 int argCount = stackFrame.args[2].int32(); 995 1023 996 1024 ASSERT(argCount != newCodeBlock->m_numParameters); … … 1012 1040 Register* r = callFrame->registers() + omittedArgCount; 1013 1041 Register* newEnd = r + newCodeBlock->m_numCalleeRegisters; 1014 if (! ARG_registerFile->grow(newEnd)) {1042 if (!stackFrame.registerFile->grow(newEnd)) { 1015 1043 // Rewind to the previous call frame because op_call already optimistically 1016 1044 // moved the call frame forward. 1017 ARG_setCallFrame(oldCallFrame);1018 throwStackOverflowError(oldCallFrame, ARG_globalData, ARG_returnAddress2, STUB_RETURN_ADDRESS);1045 stackFrame.callFrame = oldCallFrame; 1046 throwStackOverflowError(oldCallFrame, stackFrame.globalData, stackFrame.args[1].returnAddress(), STUB_RETURN_ADDRESS); 1019 1047 RETURN_PAIR(0, 0); 1020 1048 } … … 1031 1059 } 1032 1060 1033 void* JITStubs::cti_vm_dontLazyLinkCall(STUB_ARGS) 1034 { 1035 BEGIN_STUB_FUNCTION(); 1036 1037 JSGlobalData* globalData = ARG_globalData; 1038 JSFunction* callee = asFunction(ARG_src1); 1061 void* JITStubs::cti_vm_dontLazyLinkCall(STUB_ARGS_DECLARATION) 1062 { 1063 BEGIN_STUB_FUNCTION(); 1064 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1065 1066 JSGlobalData* globalData = stackFrame.globalData; 1067 JSFunction* callee = asFunction(stackFrame.args[0].jsValue()); 1039 1068 JITCode jitCode = callee->body()->generatedJITCode(); 1040 1069 ASSERT(jitCode); 1041 1070 1042 ctiPatchNearCallByReturnAddress( ARG_returnAddress2, globalData->jitStubs.ctiVirtualCallLink());1071 ctiPatchNearCallByReturnAddress(stackFrame.args[1].returnAddress(), globalData->jitStubs.ctiVirtualCallLink()); 1043 1072 1044 1073 return jitCode.addressForCall(); 1045 1074 } 1046 1075 1047 void* JITStubs::cti_vm_lazyLinkCall(STUB_ARGS) 1048 { 1049 BEGIN_STUB_FUNCTION(); 1050 1051 JSFunction* callee = asFunction(ARG_src1); 1076 void* JITStubs::cti_vm_lazyLinkCall(STUB_ARGS_DECLARATION) 1077 { 1078 BEGIN_STUB_FUNCTION(); 1079 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1080 1081 JSFunction* callee = asFunction(stackFrame.args[0].jsValue()); 1052 1082 JITCode jitCode = callee->body()->generatedJITCode(); 1053 1083 ASSERT(jitCode); … … 1057 1087 codeBlock = &callee->body()->bytecode(callee->scope().node()); 1058 1088 1059 CallLinkInfo* callLinkInfo = & ARG_callFrame->callerFrame()->codeBlock()->getCallLinkInfo(ARG_returnAddress2);1060 JIT::linkCall(callee, codeBlock, jitCode, callLinkInfo, ARG_int3);1089 CallLinkInfo* callLinkInfo = &stackFrame.callFrame->callerFrame()->codeBlock()->getCallLinkInfo(stackFrame.args[1].returnAddress()); 1090 JIT::linkCall(callee, codeBlock, jitCode, callLinkInfo, stackFrame.args[2].int32()); 1061 1091 1062 1092 return jitCode.addressForCall(); 1063 1093 } 1064 1094 1065 JSObject* JITStubs::cti_op_push_activation(STUB_ARGS) 1066 { 1067 BEGIN_STUB_FUNCTION(); 1068 1069 JSActivation* activation = new (ARG_globalData) JSActivation(ARG_callFrame, static_cast<FunctionBodyNode*>(ARG_callFrame->codeBlock()->ownerNode())); 1070 ARG_callFrame->setScopeChain(ARG_callFrame->scopeChain()->copy()->push(activation)); 1095 JSObject* JITStubs::cti_op_push_activation(STUB_ARGS_DECLARATION) 1096 { 1097 BEGIN_STUB_FUNCTION(); 1098 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1099 1100 JSActivation* activation = new (stackFrame.globalData) JSActivation(stackFrame.callFrame, static_cast<FunctionBodyNode*>(stackFrame.callFrame->codeBlock()->ownerNode())); 1101 stackFrame.callFrame->setScopeChain(stackFrame.callFrame->scopeChain()->copy()->push(activation)); 1071 1102 return activation; 1072 1103 } 1073 1104 1074 EncodedJSValue JITStubs::cti_op_call_NotJSFunction(STUB_ARGS) 1075 { 1076 BEGIN_STUB_FUNCTION(); 1077 1078 JSValue funcVal = ARG_src1; 1105 EncodedJSValue JITStubs::cti_op_call_NotJSFunction(STUB_ARGS_DECLARATION) 1106 { 1107 BEGIN_STUB_FUNCTION(); 1108 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1109 1110 JSValue funcVal = stackFrame.args[0].jsValue(); 1079 1111 1080 1112 CallData callData; … … 1084 1116 1085 1117 if (callType == CallTypeHost) { 1086 int registerOffset = ARG_int2;1087 int argCount = ARG_int3;1088 CallFrame* previousCallFrame = ARG_callFrame;1118 int registerOffset = stackFrame.args[1].int32(); 1119 int argCount = stackFrame.args[2].int32(); 1120 CallFrame* previousCallFrame = stackFrame.callFrame; 1089 1121 CallFrame* callFrame = CallFrame::create(previousCallFrame->registers() + registerOffset); 1090 1122 1091 1123 callFrame->init(0, static_cast<Instruction*>(STUB_RETURN_ADDRESS), previousCallFrame->scopeChain(), previousCallFrame, 0, argCount, 0); 1092 ARG_setCallFrame(callFrame);1093 1094 Register* argv = ARG_callFrame->registers() - RegisterFile::CallFrameHeaderSize - argCount;1124 stackFrame.callFrame = callFrame; 1125 1126 Register* argv = stackFrame.callFrame->registers() - RegisterFile::CallFrameHeaderSize - argCount; 1095 1127 ArgList argList(argv + 1, argCount - 1); 1096 1128 … … 1106 1138 returnValue = callData.native.function(callFrame, asObject(funcVal), thisValue, argList); 1107 1139 } 1108 ARG_setCallFrame(previousCallFrame);1140 stackFrame.callFrame = previousCallFrame; 1109 1141 CHECK_FOR_EXCEPTION(); 1110 1142 … … 1114 1146 ASSERT(callType == CallTypeNone); 1115 1147 1116 CallFrame* callFrame = ARG_callFrame;1148 CallFrame* callFrame = stackFrame.callFrame; 1117 1149 CodeBlock* codeBlock = callFrame->codeBlock(); 1118 1150 unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS); 1119 ARG_globalData->exception = createNotAFunctionError(ARG_callFrame, funcVal, vPCIndex, codeBlock);1151 stackFrame.globalData->exception = createNotAFunctionError(stackFrame.callFrame, funcVal, vPCIndex, codeBlock); 1120 1152 VM_THROW_EXCEPTION(); 1121 1153 } 1122 1154 1123 void JITStubs::cti_op_create_arguments(STUB_ARGS) 1124 { 1125 BEGIN_STUB_FUNCTION(); 1126 1127 Arguments* arguments = new (ARG_globalData) Arguments(ARG_callFrame); 1128 ARG_callFrame->setCalleeArguments(arguments); 1129 ARG_callFrame[RegisterFile::ArgumentsRegister] = arguments; 1130 } 1131 1132 void JITStubs::cti_op_create_arguments_no_params(STUB_ARGS) 1133 { 1134 BEGIN_STUB_FUNCTION(); 1135 1136 Arguments* arguments = new (ARG_globalData) Arguments(ARG_callFrame, Arguments::NoParameters); 1137 ARG_callFrame->setCalleeArguments(arguments); 1138 ARG_callFrame[RegisterFile::ArgumentsRegister] = arguments; 1139 } 1140 1141 void JITStubs::cti_op_tear_off_activation(STUB_ARGS) 1142 { 1143 BEGIN_STUB_FUNCTION(); 1144 1145 ASSERT(ARG_callFrame->codeBlock()->needsFullScopeChain()); 1146 asActivation(ARG_src1)->copyRegisters(ARG_callFrame->optionalCalleeArguments()); 1147 } 1148 1149 void JITStubs::cti_op_tear_off_arguments(STUB_ARGS) 1150 { 1151 BEGIN_STUB_FUNCTION(); 1152 1153 ASSERT(ARG_callFrame->codeBlock()->usesArguments() && !ARG_callFrame->codeBlock()->needsFullScopeChain()); 1154 ARG_callFrame->optionalCalleeArguments()->copyRegisters(); 1155 } 1156 1157 void JITStubs::cti_op_profile_will_call(STUB_ARGS) 1158 { 1159 BEGIN_STUB_FUNCTION(); 1160 1161 ASSERT(*ARG_profilerReference); 1162 (*ARG_profilerReference)->willExecute(ARG_callFrame, ARG_src1); 1163 } 1164 1165 void JITStubs::cti_op_profile_did_call(STUB_ARGS) 1166 { 1167 BEGIN_STUB_FUNCTION(); 1168 1169 ASSERT(*ARG_profilerReference); 1170 (*ARG_profilerReference)->didExecute(ARG_callFrame, ARG_src1); 1171 } 1172 1173 void JITStubs::cti_op_ret_scopeChain(STUB_ARGS) 1174 { 1175 BEGIN_STUB_FUNCTION(); 1176 1177 ASSERT(ARG_callFrame->codeBlock()->needsFullScopeChain()); 1178 ARG_callFrame->scopeChain()->deref(); 1179 } 1180 1181 JSObject* JITStubs::cti_op_new_array(STUB_ARGS) 1182 { 1183 BEGIN_STUB_FUNCTION(); 1184 1185 ArgList argList(&ARG_callFrame->registers()[ARG_int1], ARG_int2); 1186 return constructArray(ARG_callFrame, argList); 1187 } 1188 1189 EncodedJSValue JITStubs::cti_op_resolve(STUB_ARGS) 1190 { 1191 BEGIN_STUB_FUNCTION(); 1192 1193 CallFrame* callFrame = ARG_callFrame; 1155 void JITStubs::cti_op_create_arguments(STUB_ARGS_DECLARATION) 1156 { 1157 BEGIN_STUB_FUNCTION(); 1158 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1159 1160 Arguments* arguments = new (stackFrame.globalData) Arguments(stackFrame.callFrame); 1161 stackFrame.callFrame->setCalleeArguments(arguments); 1162 stackFrame.callFrame[RegisterFile::ArgumentsRegister] = arguments; 1163 } 1164 1165 void JITStubs::cti_op_create_arguments_no_params(STUB_ARGS_DECLARATION) 1166 { 1167 BEGIN_STUB_FUNCTION(); 1168 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1169 1170 Arguments* arguments = new (stackFrame.globalData) Arguments(stackFrame.callFrame, Arguments::NoParameters); 1171 stackFrame.callFrame->setCalleeArguments(arguments); 1172 stackFrame.callFrame[RegisterFile::ArgumentsRegister] = arguments; 1173 } 1174 1175 void JITStubs::cti_op_tear_off_activation(STUB_ARGS_DECLARATION) 1176 { 1177 BEGIN_STUB_FUNCTION(); 1178 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1179 1180 ASSERT(stackFrame.callFrame->codeBlock()->needsFullScopeChain()); 1181 asActivation(stackFrame.args[0].jsValue())->copyRegisters(stackFrame.callFrame->optionalCalleeArguments()); 1182 } 1183 1184 void JITStubs::cti_op_tear_off_arguments(STUB_ARGS_DECLARATION) 1185 { 1186 BEGIN_STUB_FUNCTION(); 1187 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1188 1189 ASSERT(stackFrame.callFrame->codeBlock()->usesArguments() && !stackFrame.callFrame->codeBlock()->needsFullScopeChain()); 1190 stackFrame.callFrame->optionalCalleeArguments()->copyRegisters(); 1191 } 1192 1193 void JITStubs::cti_op_profile_will_call(STUB_ARGS_DECLARATION) 1194 { 1195 BEGIN_STUB_FUNCTION(); 1196 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1197 1198 ASSERT(*stackFrame.enabledProfilerReference); 1199 (*stackFrame.enabledProfilerReference)->willExecute(stackFrame.callFrame, stackFrame.args[0].jsValue()); 1200 } 1201 1202 void JITStubs::cti_op_profile_did_call(STUB_ARGS_DECLARATION) 1203 { 1204 BEGIN_STUB_FUNCTION(); 1205 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1206 1207 ASSERT(*stackFrame.enabledProfilerReference); 1208 (*stackFrame.enabledProfilerReference)->didExecute(stackFrame.callFrame, stackFrame.args[0].jsValue()); 1209 } 1210 1211 void JITStubs::cti_op_ret_scopeChain(STUB_ARGS_DECLARATION) 1212 { 1213 BEGIN_STUB_FUNCTION(); 1214 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1215 1216 ASSERT(stackFrame.callFrame->codeBlock()->needsFullScopeChain()); 1217 stackFrame.callFrame->scopeChain()->deref(); 1218 } 1219 1220 JSObject* JITStubs::cti_op_new_array(STUB_ARGS_DECLARATION) 1221 { 1222 BEGIN_STUB_FUNCTION(); 1223 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1224 1225 ArgList argList(&stackFrame.callFrame->registers()[stackFrame.args[0].int32()], stackFrame.args[1].int32()); 1226 return constructArray(stackFrame.callFrame, argList); 1227 } 1228 1229 EncodedJSValue JITStubs::cti_op_resolve(STUB_ARGS_DECLARATION) 1230 { 1231 BEGIN_STUB_FUNCTION(); 1232 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1233 1234 CallFrame* callFrame = stackFrame.callFrame; 1194 1235 ScopeChainNode* scopeChain = callFrame->scopeChain(); 1195 1236 … … 1198 1239 ASSERT(iter != end); 1199 1240 1200 Identifier& ident = *ARG_id1;1241 Identifier& ident = stackFrame.args[0].identifier(); 1201 1242 do { 1202 1243 JSObject* o = *iter; … … 1211 1252 CodeBlock* codeBlock = callFrame->codeBlock(); 1212 1253 unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS); 1213 ARG_globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock);1254 stackFrame.globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock); 1214 1255 VM_THROW_EXCEPTION(); 1215 1256 } 1216 1257 1217 JSObject* JITStubs::cti_op_construct_JSConstruct(STUB_ARGS) 1218 { 1219 BEGIN_STUB_FUNCTION(); 1220 1221 JSFunction* constructor = asFunction(ARG_src1); 1258 JSObject* JITStubs::cti_op_construct_JSConstruct(STUB_ARGS_DECLARATION) 1259 { 1260 BEGIN_STUB_FUNCTION(); 1261 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1262 1263 JSFunction* constructor = asFunction(stackFrame.args[0].jsValue()); 1222 1264 if (constructor->isHostFunction()) { 1223 CallFrame* callFrame = ARG_callFrame;1265 CallFrame* callFrame = stackFrame.callFrame; 1224 1266 CodeBlock* codeBlock = callFrame->codeBlock(); 1225 1267 unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS); 1226 ARG_globalData->exception = createNotAConstructorError(callFrame, constructor, vPCIndex, codeBlock);1268 stackFrame.globalData->exception = createNotAConstructorError(callFrame, constructor, vPCIndex, codeBlock); 1227 1269 VM_THROW_EXCEPTION(); 1228 1270 } … … 1234 1276 1235 1277 Structure* structure; 1236 if ( ARG_src4.isObject())1237 structure = asObject( ARG_src4)->inheritorID();1278 if (stackFrame.args[3].jsValue().isObject()) 1279 structure = asObject(stackFrame.args[3].jsValue())->inheritorID(); 1238 1280 else 1239 1281 structure = constructor->scope().node()->globalObject()->emptyObjectStructure(); 1240 return new (ARG_globalData) JSObject(structure); 1241 } 1242 1243 EncodedJSValue JITStubs::cti_op_construct_NotJSConstruct(STUB_ARGS) 1244 { 1245 BEGIN_STUB_FUNCTION(); 1246 1247 CallFrame* callFrame = ARG_callFrame; 1248 1249 JSValue constrVal = ARG_src1; 1250 int argCount = ARG_int3; 1251 int thisRegister = ARG_int5; 1282 return new (stackFrame.globalData) JSObject(structure); 1283 } 1284 1285 EncodedJSValue JITStubs::cti_op_construct_NotJSConstruct(STUB_ARGS_DECLARATION) 1286 { 1287 BEGIN_STUB_FUNCTION(); 1288 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1289 1290 CallFrame* callFrame = stackFrame.callFrame; 1291 1292 JSValue constrVal = stackFrame.args[0].jsValue(); 1293 int argCount = stackFrame.args[2].int32(); 1294 int thisRegister = stackFrame.args[4].int32(); 1252 1295 1253 1296 ConstructData constructData; … … 1271 1314 CodeBlock* codeBlock = callFrame->codeBlock(); 1272 1315 unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS); 1273 ARG_globalData->exception = createNotAConstructorError(callFrame, constrVal, vPCIndex, codeBlock);1316 stackFrame.globalData->exception = createNotAConstructorError(callFrame, constrVal, vPCIndex, codeBlock); 1274 1317 VM_THROW_EXCEPTION(); 1275 1318 } 1276 1319 1277 EncodedJSValue JITStubs::cti_op_get_by_val(STUB_ARGS) 1278 { 1279 BEGIN_STUB_FUNCTION(); 1280 1281 CallFrame* callFrame = ARG_callFrame; 1282 JSGlobalData* globalData = ARG_globalData; 1283 1284 JSValue baseValue = ARG_src1; 1285 JSValue subscript = ARG_src2; 1320 EncodedJSValue JITStubs::cti_op_get_by_val(STUB_ARGS_DECLARATION) 1321 { 1322 BEGIN_STUB_FUNCTION(); 1323 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1324 1325 CallFrame* callFrame = stackFrame.callFrame; 1326 JSGlobalData* globalData = stackFrame.globalData; 1327 1328 JSValue baseValue = stackFrame.args[0].jsValue(); 1329 JSValue subscript = stackFrame.args[1].jsValue(); 1286 1330 1287 1331 JSValue result; … … 1298 1342 // All fast byte array accesses are safe from exceptions so return immediately to avoid exception checks. 1299 1343 ctiPatchCallByReturnAddress(STUB_RETURN_ADDRESS, reinterpret_cast<void*>(cti_op_get_by_val_string)); 1300 result = asString(baseValue)->getIndex( ARG_globalData, i);1344 result = asString(baseValue)->getIndex(stackFrame.globalData, i); 1301 1345 } else if (isJSByteArray(globalData, baseValue) && asByteArray(baseValue)->canAccessIndex(i)) { 1302 1346 // All fast byte array accesses are safe from exceptions so return immediately to avoid exception checks. … … 1314 1358 } 1315 1359 1316 EncodedJSValue JITStubs::cti_op_get_by_val_string(STUB_ARGS) 1317 { 1318 BEGIN_STUB_FUNCTION(); 1319 1320 CallFrame* callFrame = ARG_callFrame; 1321 JSGlobalData* globalData = ARG_globalData; 1322 1323 JSValue baseValue = ARG_src1; 1324 JSValue subscript = ARG_src2; 1325 1326 JSValue result; 1327 1328 if (LIKELY(subscript.isUInt32Fast())) { 1329 uint32_t i = subscript.getUInt32Fast(); 1330 if (isJSString(globalData, baseValue) && asString(baseValue)->canGetIndex(i)) 1331 result = asString(baseValue)->getIndex(ARG_globalData, i); 1332 else { 1333 result = baseValue.get(callFrame, i); 1334 if (!isJSString(globalData, baseValue)) 1335 ctiPatchCallByReturnAddress(STUB_RETURN_ADDRESS, reinterpret_cast<void*>(cti_op_get_by_val)); 1336 } 1337 } else { 1338 Identifier property(callFrame, subscript.toString(callFrame)); 1339 result = baseValue.get(callFrame, property); 1360 EncodedJSValue JITStubs::cti_op_get_by_val_string(STUB_ARGS_DECLARATION) 1361 { 1362 BEGIN_STUB_FUNCTION(); 1363 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1364 1365 CallFrame* callFrame = stackFrame.callFrame; 1366 JSGlobalData* globalData = stackFrame.globalData; 1367 1368 JSValue baseValue = stackFrame.args[0].jsValue(); 1369 JSValue subscript = stackFrame.args[1].jsValue(); 1370 1371 JSValue result; 1372 1373 if (LIKELY(subscript.isUInt32Fast())) { 1374 uint32_t i = subscript.getUInt32Fast(); 1375 if (isJSString(globalData, baseValue) && asString(baseValue)->canGetIndex(i)) 1376 result = asString(baseValue)->getIndex(stackFrame.globalData, i); 1377 else { 1378 result = baseValue.get(callFrame, i); 1379 if (!isJSString(globalData, baseValue)) 1380 ctiPatchCallByReturnAddress(STUB_RETURN_ADDRESS, reinterpret_cast<void*>(cti_op_get_by_val)); 1340 1381 } 1341 1342 CHECK_FOR_EXCEPTION_AT_END(); 1343 return JSValue::encode(result); 1344 } 1345 1346 1347 EncodedJSValue JITStubs::cti_op_get_by_val_byte_array(STUB_ARGS) 1348 { 1349 BEGIN_STUB_FUNCTION(); 1350 1351 CallFrame* callFrame = ARG_callFrame; 1352 JSGlobalData* globalData = ARG_globalData; 1353 1354 JSValue baseValue = ARG_src1; 1355 JSValue subscript = ARG_src2; 1382 } else { 1383 Identifier property(callFrame, subscript.toString(callFrame)); 1384 result = baseValue.get(callFrame, property); 1385 } 1386 1387 CHECK_FOR_EXCEPTION_AT_END(); 1388 return JSValue::encode(result); 1389 } 1390 1391 1392 EncodedJSValue JITStubs::cti_op_get_by_val_byte_array(STUB_ARGS_DECLARATION) 1393 { 1394 BEGIN_STUB_FUNCTION(); 1395 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1396 1397 CallFrame* callFrame = stackFrame.callFrame; 1398 JSGlobalData* globalData = stackFrame.globalData; 1399 1400 JSValue baseValue = stackFrame.args[0].jsValue(); 1401 JSValue subscript = stackFrame.args[1].jsValue(); 1356 1402 1357 1403 JSValue result; … … 1376 1422 } 1377 1423 1378 VoidPtrPair JITStubs::cti_op_resolve_func(STUB_ARGS) 1379 { 1380 BEGIN_STUB_FUNCTION(); 1381 1382 CallFrame* callFrame = ARG_callFrame; 1424 VoidPtrPair JITStubs::cti_op_resolve_func(STUB_ARGS_DECLARATION) 1425 { 1426 BEGIN_STUB_FUNCTION(); 1427 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1428 1429 CallFrame* callFrame = stackFrame.callFrame; 1383 1430 ScopeChainNode* scopeChain = callFrame->scopeChain(); 1384 1431 … … 1390 1437 ASSERT(iter != end); 1391 1438 1392 Identifier& ident = *ARG_id1;1439 Identifier& ident = stackFrame.args[0].identifier(); 1393 1440 JSObject* base; 1394 1441 do { … … 1414 1461 CodeBlock* codeBlock = callFrame->codeBlock(); 1415 1462 unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS); 1416 ARG_globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock);1463 stackFrame.globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock); 1417 1464 VM_THROW_EXCEPTION_2(); 1418 1465 } 1419 1466 1420 EncodedJSValue JITStubs::cti_op_sub(STUB_ARGS) 1421 { 1422 BEGIN_STUB_FUNCTION(); 1423 1424 JSValue src1 = ARG_src1; 1425 JSValue src2 = ARG_src2; 1467 EncodedJSValue JITStubs::cti_op_sub(STUB_ARGS_DECLARATION) 1468 { 1469 BEGIN_STUB_FUNCTION(); 1470 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1471 1472 JSValue src1 = stackFrame.args[0].jsValue(); 1473 JSValue src2 = stackFrame.args[1].jsValue(); 1426 1474 1427 1475 double left; 1428 1476 double right; 1429 1477 if (src1.getNumber(left) && src2.getNumber(right)) 1430 return JSValue::encode(jsNumber(ARG_globalData, left - right)); 1431 1432 CallFrame* callFrame = ARG_callFrame; 1433 JSValue result = jsNumber(ARG_globalData, src1.toNumber(callFrame) - src2.toNumber(callFrame)); 1434 CHECK_FOR_EXCEPTION_AT_END(); 1435 return JSValue::encode(result); 1436 } 1437 1438 void JITStubs::cti_op_put_by_val(STUB_ARGS) 1439 { 1440 BEGIN_STUB_FUNCTION(); 1441 1442 CallFrame* callFrame = ARG_callFrame; 1443 JSGlobalData* globalData = ARG_globalData; 1444 1445 JSValue baseValue = ARG_src1; 1446 JSValue subscript = ARG_src2; 1447 JSValue value = ARG_src3; 1478 return JSValue::encode(jsNumber(stackFrame.globalData, left - right)); 1479 1480 CallFrame* callFrame = stackFrame.callFrame; 1481 JSValue result = jsNumber(stackFrame.globalData, src1.toNumber(callFrame) - src2.toNumber(callFrame)); 1482 CHECK_FOR_EXCEPTION_AT_END(); 1483 return JSValue::encode(result); 1484 } 1485 1486 void JITStubs::cti_op_put_by_val(STUB_ARGS_DECLARATION) 1487 { 1488 BEGIN_STUB_FUNCTION(); 1489 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1490 1491 CallFrame* callFrame = stackFrame.callFrame; 1492 JSGlobalData* globalData = stackFrame.globalData; 1493 1494 JSValue baseValue = stackFrame.args[0].jsValue(); 1495 JSValue subscript = stackFrame.args[1].jsValue(); 1496 JSValue value = stackFrame.args[2].jsValue(); 1448 1497 1449 1498 if (LIKELY(subscript.isUInt32Fast())) { … … 1475 1524 } else { 1476 1525 Identifier property(callFrame, subscript.toString(callFrame)); 1477 if (! ARG_globalData->exception) { // Don't put to an object if toString threw an exception.1526 if (!stackFrame.globalData->exception) { // Don't put to an object if toString threw an exception. 1478 1527 PutPropertySlot slot; 1479 1528 baseValue.put(callFrame, property, value, slot); … … 1484 1533 } 1485 1534 1486 void JITStubs::cti_op_put_by_val_array(STUB_ARGS) 1487 { 1488 BEGIN_STUB_FUNCTION(); 1489 1490 CallFrame* callFrame = ARG_callFrame; 1491 JSValue baseValue = ARG_src1; 1492 int i = ARG_int2; 1493 JSValue value = ARG_src3; 1494 1495 ASSERT(isJSArray(ARG_globalData, baseValue)); 1535 void JITStubs::cti_op_put_by_val_array(STUB_ARGS_DECLARATION) 1536 { 1537 BEGIN_STUB_FUNCTION(); 1538 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1539 1540 CallFrame* callFrame = stackFrame.callFrame; 1541 JSValue baseValue = stackFrame.args[0].jsValue(); 1542 int i = stackFrame.args[1].int32(); 1543 JSValue value = stackFrame.args[2].jsValue(); 1544 1545 ASSERT(isJSArray(stackFrame.globalData, baseValue)); 1496 1546 1497 1547 if (LIKELY(i >= 0)) … … 1502 1552 Identifier property(callFrame, JSValue::makeInt32Fast(i).toString(callFrame)); 1503 1553 // FIXME: can toString throw an exception here? 1504 if (! ARG_globalData->exception) { // Don't put to an object if toString threw an exception.1554 if (!stackFrame.globalData->exception) { // Don't put to an object if toString threw an exception. 1505 1555 PutPropertySlot slot; 1506 1556 baseValue.put(callFrame, property, value, slot); … … 1511 1561 } 1512 1562 1513 void JITStubs::cti_op_put_by_val_byte_array(STUB_ARGS) 1514 { 1515 BEGIN_STUB_FUNCTION(); 1516 1517 CallFrame* callFrame = ARG_callFrame; 1518 JSGlobalData* globalData = ARG_globalData; 1519 1520 JSValue baseValue = ARG_src1; 1521 JSValue subscript = ARG_src2; 1522 JSValue value = ARG_src3; 1563 void JITStubs::cti_op_put_by_val_byte_array(STUB_ARGS_DECLARATION) 1564 { 1565 BEGIN_STUB_FUNCTION(); 1566 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1567 1568 CallFrame* callFrame = stackFrame.callFrame; 1569 JSGlobalData* globalData = stackFrame.globalData; 1570 1571 JSValue baseValue = stackFrame.args[0].jsValue(); 1572 JSValue subscript = stackFrame.args[1].jsValue(); 1573 JSValue value = stackFrame.args[2].jsValue(); 1523 1574 1524 1575 if (LIKELY(subscript.isUInt32Fast())) { … … 1545 1596 } else { 1546 1597 Identifier property(callFrame, subscript.toString(callFrame)); 1547 if (! ARG_globalData->exception) { // Don't put to an object if toString threw an exception.1598 if (!stackFrame.globalData->exception) { // Don't put to an object if toString threw an exception. 1548 1599 PutPropertySlot slot; 1549 1600 baseValue.put(callFrame, property, value, slot); … … 1554 1605 } 1555 1606 1556 EncodedJSValue JITStubs::cti_op_lesseq(STUB_ARGS) 1557 { 1558 BEGIN_STUB_FUNCTION(); 1559 1560 CallFrame* callFrame = ARG_callFrame; 1561 JSValue result = jsBoolean(jsLessEq(callFrame, ARG_src1, ARG_src2)); 1562 CHECK_FOR_EXCEPTION_AT_END(); 1563 return JSValue::encode(result); 1564 } 1565 1566 int JITStubs::cti_op_loop_if_true(STUB_ARGS) 1567 { 1568 BEGIN_STUB_FUNCTION(); 1569 1570 JSValue src1 = ARG_src1; 1571 1572 CallFrame* callFrame = ARG_callFrame; 1607 EncodedJSValue JITStubs::cti_op_lesseq(STUB_ARGS_DECLARATION) 1608 { 1609 BEGIN_STUB_FUNCTION(); 1610 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1611 1612 CallFrame* callFrame = stackFrame.callFrame; 1613 JSValue result = jsBoolean(jsLessEq(callFrame, stackFrame.args[0].jsValue(), stackFrame.args[1].jsValue())); 1614 CHECK_FOR_EXCEPTION_AT_END(); 1615 return JSValue::encode(result); 1616 } 1617 1618 int JITStubs::cti_op_loop_if_true(STUB_ARGS_DECLARATION) 1619 { 1620 BEGIN_STUB_FUNCTION(); 1621 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1622 1623 JSValue src1 = stackFrame.args[0].jsValue(); 1624 1625 CallFrame* callFrame = stackFrame.callFrame; 1573 1626 1574 1627 bool result = src1.toBoolean(callFrame); … … 1577 1630 } 1578 1631 1579 int JITStubs::cti_op_load_varargs(STUB_ARGS) 1580 { 1581 BEGIN_STUB_FUNCTION(); 1582 CallFrame* callFrame = ARG_callFrame; 1583 RegisterFile* registerFile = ARG_registerFile; 1584 int argsOffset = ARG_int1; 1632 int JITStubs::cti_op_load_varargs(STUB_ARGS_DECLARATION) 1633 { 1634 BEGIN_STUB_FUNCTION(); 1635 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1636 CallFrame* callFrame = stackFrame.callFrame; 1637 RegisterFile* registerFile = stackFrame.registerFile; 1638 int argsOffset = stackFrame.args[0].int32(); 1585 1639 JSValue arguments = callFrame[argsOffset].jsValue(); 1586 1640 uint32_t argCount = 0; … … 1589 1643 CodeBlock* codeBlock = callFrame->codeBlock(); 1590 1644 unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS); 1591 ARG_globalData->exception = createInvalidParamError(callFrame, "Function.prototype.apply", arguments, vPCIndex, codeBlock);1645 stackFrame.globalData->exception = createInvalidParamError(callFrame, "Function.prototype.apply", arguments, vPCIndex, codeBlock); 1592 1646 VM_THROW_EXCEPTION(); 1593 1647 } … … 1598 1652 Register* newEnd = callFrame->registers() + sizeDelta; 1599 1653 if (!registerFile->grow(newEnd) || ((newEnd - callFrame->registers()) != sizeDelta)) { 1600 ARG_globalData->exception = createStackOverflowError(callFrame);1654 stackFrame.globalData->exception = createStackOverflowError(callFrame); 1601 1655 VM_THROW_EXCEPTION(); 1602 1656 } … … 1608 1662 Register* newEnd = callFrame->registers() + sizeDelta; 1609 1663 if (!registerFile->grow(newEnd) || ((newEnd - callFrame->registers()) != sizeDelta)) { 1610 ARG_globalData->exception = createStackOverflowError(callFrame);1664 stackFrame.globalData->exception = createStackOverflowError(callFrame); 1611 1665 VM_THROW_EXCEPTION(); 1612 1666 } … … 1618 1672 Register* newEnd = callFrame->registers() + sizeDelta; 1619 1673 if (!registerFile->grow(newEnd) || ((newEnd - callFrame->registers()) != sizeDelta)) { 1620 ARG_globalData->exception = createStackOverflowError(callFrame);1674 stackFrame.globalData->exception = createStackOverflowError(callFrame); 1621 1675 VM_THROW_EXCEPTION(); 1622 1676 } … … 1629 1683 CodeBlock* codeBlock = callFrame->codeBlock(); 1630 1684 unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS); 1631 ARG_globalData->exception = createInvalidParamError(callFrame, "Function.prototype.apply", arguments, vPCIndex, codeBlock);1685 stackFrame.globalData->exception = createInvalidParamError(callFrame, "Function.prototype.apply", arguments, vPCIndex, codeBlock); 1632 1686 VM_THROW_EXCEPTION(); 1633 1687 } … … 1637 1691 } 1638 1692 1639 EncodedJSValue JITStubs::cti_op_negate(STUB_ARGS) 1640 { 1641 BEGIN_STUB_FUNCTION(); 1642 1643 JSValue src = ARG_src1; 1693 EncodedJSValue JITStubs::cti_op_negate(STUB_ARGS_DECLARATION) 1694 { 1695 BEGIN_STUB_FUNCTION(); 1696 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1697 1698 JSValue src = stackFrame.args[0].jsValue(); 1644 1699 1645 1700 double v; 1646 1701 if (src.getNumber(v)) 1647 return JSValue::encode(jsNumber(ARG_globalData, -v)); 1648 1649 CallFrame* callFrame = ARG_callFrame; 1650 JSValue result = jsNumber(ARG_globalData, -src.toNumber(callFrame)); 1651 CHECK_FOR_EXCEPTION_AT_END(); 1652 return JSValue::encode(result); 1653 } 1654 1655 EncodedJSValue JITStubs::cti_op_resolve_base(STUB_ARGS) 1656 { 1657 BEGIN_STUB_FUNCTION(); 1658 1659 return JSValue::encode(JSC::resolveBase(ARG_callFrame, *ARG_id1, ARG_callFrame->scopeChain())); 1660 } 1661 1662 EncodedJSValue JITStubs::cti_op_resolve_skip(STUB_ARGS) 1663 { 1664 BEGIN_STUB_FUNCTION(); 1665 1666 CallFrame* callFrame = ARG_callFrame; 1702 return JSValue::encode(jsNumber(stackFrame.globalData, -v)); 1703 1704 CallFrame* callFrame = stackFrame.callFrame; 1705 JSValue result = jsNumber(stackFrame.globalData, -src.toNumber(callFrame)); 1706 CHECK_FOR_EXCEPTION_AT_END(); 1707 return JSValue::encode(result); 1708 } 1709 1710 EncodedJSValue JITStubs::cti_op_resolve_base(STUB_ARGS_DECLARATION) 1711 { 1712 BEGIN_STUB_FUNCTION(); 1713 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1714 1715 return JSValue::encode(JSC::resolveBase(stackFrame.callFrame, stackFrame.args[0].identifier(), stackFrame.callFrame->scopeChain())); 1716 } 1717 1718 EncodedJSValue JITStubs::cti_op_resolve_skip(STUB_ARGS_DECLARATION) 1719 { 1720 BEGIN_STUB_FUNCTION(); 1721 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1722 1723 CallFrame* callFrame = stackFrame.callFrame; 1667 1724 ScopeChainNode* scopeChain = callFrame->scopeChain(); 1668 1725 1669 int skip = ARG_int2;1726 int skip = stackFrame.args[1].int32(); 1670 1727 1671 1728 ScopeChainIterator iter = scopeChain->begin(); … … 1676 1733 ASSERT(iter != end); 1677 1734 } 1678 Identifier& ident = *ARG_id1;1735 Identifier& ident = stackFrame.args[0].identifier(); 1679 1736 do { 1680 1737 JSObject* o = *iter; … … 1689 1746 CodeBlock* codeBlock = callFrame->codeBlock(); 1690 1747 unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS); 1691 ARG_globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock);1748 stackFrame.globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock); 1692 1749 VM_THROW_EXCEPTION(); 1693 1750 } 1694 1751 1695 EncodedJSValue JITStubs::cti_op_resolve_global(STUB_ARGS) 1696 { 1697 BEGIN_STUB_FUNCTION(); 1698 1699 CallFrame* callFrame = ARG_callFrame; 1700 JSGlobalObject* globalObject = asGlobalObject(ARG_src1); 1701 Identifier& ident = *ARG_id2; 1702 unsigned globalResolveInfoIndex = ARG_int3; 1752 EncodedJSValue JITStubs::cti_op_resolve_global(STUB_ARGS_DECLARATION) 1753 { 1754 BEGIN_STUB_FUNCTION(); 1755 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1756 1757 CallFrame* callFrame = stackFrame.callFrame; 1758 JSGlobalObject* globalObject = asGlobalObject(stackFrame.args[0].jsValue()); 1759 Identifier& ident = stackFrame.args[1].identifier(); 1760 unsigned globalResolveInfoIndex = stackFrame.args[2].int32(); 1703 1761 ASSERT(globalObject->isGlobalObject()); 1704 1762 … … 1721 1779 1722 1780 unsigned vPCIndex = callFrame->codeBlock()->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS); 1723 ARG_globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, callFrame->codeBlock());1781 stackFrame.globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, callFrame->codeBlock()); 1724 1782 VM_THROW_EXCEPTION(); 1725 1783 } 1726 1784 1727 EncodedJSValue JITStubs::cti_op_div(STUB_ARGS) 1728 { 1729 BEGIN_STUB_FUNCTION(); 1730 1731 JSValue src1 = ARG_src1; 1732 JSValue src2 = ARG_src2; 1785 EncodedJSValue JITStubs::cti_op_div(STUB_ARGS_DECLARATION) 1786 { 1787 BEGIN_STUB_FUNCTION(); 1788 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1789 1790 JSValue src1 = stackFrame.args[0].jsValue(); 1791 JSValue src2 = stackFrame.args[1].jsValue(); 1733 1792 1734 1793 double left; 1735 1794 double right; 1736 1795 if (src1.getNumber(left) && src2.getNumber(right)) 1737 return JSValue::encode(jsNumber(ARG_globalData, left / right)); 1738 1739 CallFrame* callFrame = ARG_callFrame; 1740 JSValue result = jsNumber(ARG_globalData, src1.toNumber(callFrame) / src2.toNumber(callFrame)); 1741 CHECK_FOR_EXCEPTION_AT_END(); 1742 return JSValue::encode(result); 1743 } 1744 1745 EncodedJSValue JITStubs::cti_op_pre_dec(STUB_ARGS) 1746 { 1747 BEGIN_STUB_FUNCTION(); 1748 1749 JSValue v = ARG_src1; 1750 1751 CallFrame* callFrame = ARG_callFrame; 1752 JSValue result = jsNumber(ARG_globalData, v.toNumber(callFrame) - 1); 1753 CHECK_FOR_EXCEPTION_AT_END(); 1754 return JSValue::encode(result); 1755 } 1756 1757 int JITStubs::cti_op_jless(STUB_ARGS) 1758 { 1759 BEGIN_STUB_FUNCTION(); 1760 1761 JSValue src1 = ARG_src1; 1762 JSValue src2 = ARG_src2; 1763 CallFrame* callFrame = ARG_callFrame; 1796 return JSValue::encode(jsNumber(stackFrame.globalData, left / right)); 1797 1798 CallFrame* callFrame = stackFrame.callFrame; 1799 JSValue result = jsNumber(stackFrame.globalData, src1.toNumber(callFrame) / src2.toNumber(callFrame)); 1800 CHECK_FOR_EXCEPTION_AT_END(); 1801 return JSValue::encode(result); 1802 } 1803 1804 EncodedJSValue JITStubs::cti_op_pre_dec(STUB_ARGS_DECLARATION) 1805 { 1806 BEGIN_STUB_FUNCTION(); 1807 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1808 1809 JSValue v = stackFrame.args[0].jsValue(); 1810 1811 CallFrame* callFrame = stackFrame.callFrame; 1812 JSValue result = jsNumber(stackFrame.globalData, v.toNumber(callFrame) - 1); 1813 CHECK_FOR_EXCEPTION_AT_END(); 1814 return JSValue::encode(result); 1815 } 1816 1817 int JITStubs::cti_op_jless(STUB_ARGS_DECLARATION) 1818 { 1819 BEGIN_STUB_FUNCTION(); 1820 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1821 1822 JSValue src1 = stackFrame.args[0].jsValue(); 1823 JSValue src2 = stackFrame.args[1].jsValue(); 1824 CallFrame* callFrame = stackFrame.callFrame; 1764 1825 1765 1826 bool result = jsLess(callFrame, src1, src2); … … 1768 1829 } 1769 1830 1770 EncodedJSValue JITStubs::cti_op_not(STUB_ARGS) 1771 { 1772 BEGIN_STUB_FUNCTION(); 1773 1774 JSValue src = ARG_src1; 1775 1776 CallFrame* callFrame = ARG_callFrame; 1831 EncodedJSValue JITStubs::cti_op_not(STUB_ARGS_DECLARATION) 1832 { 1833 BEGIN_STUB_FUNCTION(); 1834 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1835 1836 JSValue src = stackFrame.args[0].jsValue(); 1837 1838 CallFrame* callFrame = stackFrame.callFrame; 1777 1839 1778 1840 JSValue result = jsBoolean(!src.toBoolean(callFrame)); … … 1781 1843 } 1782 1844 1783 int JITStubs::cti_op_jtrue(STUB_ARGS) 1784 { 1785 BEGIN_STUB_FUNCTION(); 1786 1787 JSValue src1 = ARG_src1; 1788 1789 CallFrame* callFrame = ARG_callFrame; 1845 int JITStubs::cti_op_jtrue(STUB_ARGS_DECLARATION) 1846 { 1847 BEGIN_STUB_FUNCTION(); 1848 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1849 1850 JSValue src1 = stackFrame.args[0].jsValue(); 1851 1852 CallFrame* callFrame = stackFrame.callFrame; 1790 1853 1791 1854 bool result = src1.toBoolean(callFrame); … … 1794 1857 } 1795 1858 1796 VoidPtrPair JITStubs::cti_op_post_inc(STUB_ARGS) 1797 { 1798 BEGIN_STUB_FUNCTION(); 1799 1800 JSValue v = ARG_src1; 1801 1802 CallFrame* callFrame = ARG_callFrame; 1859 VoidPtrPair JITStubs::cti_op_post_inc(STUB_ARGS_DECLARATION) 1860 { 1861 BEGIN_STUB_FUNCTION(); 1862 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1863 1864 JSValue v = stackFrame.args[0].jsValue(); 1865 1866 CallFrame* callFrame = stackFrame.callFrame; 1803 1867 1804 1868 JSValue number = v.toJSNumber(callFrame); 1805 1869 CHECK_FOR_EXCEPTION_AT_END(); 1806 1870 1807 RETURN_PAIR(JSValue::encode(number), JSValue::encode(jsNumber(ARG_globalData, number.uncheckedGetNumber() + 1))); 1808 } 1809 1810 EncodedJSValue JITStubs::cti_op_eq(STUB_ARGS) 1811 { 1812 BEGIN_STUB_FUNCTION(); 1813 1814 JSValue src1 = ARG_src1; 1815 JSValue src2 = ARG_src2; 1816 1817 CallFrame* callFrame = ARG_callFrame; 1871 RETURN_PAIR(JSValue::encode(number), JSValue::encode(jsNumber(stackFrame.globalData, number.uncheckedGetNumber() + 1))); 1872 } 1873 1874 EncodedJSValue JITStubs::cti_op_eq(STUB_ARGS_DECLARATION) 1875 { 1876 BEGIN_STUB_FUNCTION(); 1877 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1878 1879 JSValue src1 = stackFrame.args[0].jsValue(); 1880 JSValue src2 = stackFrame.args[1].jsValue(); 1881 1882 CallFrame* callFrame = stackFrame.callFrame; 1818 1883 1819 1884 ASSERT(!JSValue::areBothInt32Fast(src1, src2)); … … 1823 1888 } 1824 1889 1825 EncodedJSValue JITStubs::cti_op_lshift(STUB_ARGS) 1826 { 1827 BEGIN_STUB_FUNCTION(); 1828 1829 JSValue val = ARG_src1; 1830 JSValue shift = ARG_src2; 1890 EncodedJSValue JITStubs::cti_op_lshift(STUB_ARGS_DECLARATION) 1891 { 1892 BEGIN_STUB_FUNCTION(); 1893 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1894 1895 JSValue val = stackFrame.args[0].jsValue(); 1896 JSValue shift = stackFrame.args[1].jsValue(); 1831 1897 1832 1898 int32_t left; 1833 1899 uint32_t right; 1834 1900 if (JSValue::areBothInt32Fast(val, shift)) 1835 return JSValue::encode(jsNumber( ARG_globalData, val.getInt32Fast() << (shift.getInt32Fast() & 0x1f)));1901 return JSValue::encode(jsNumber(stackFrame.globalData, val.getInt32Fast() << (shift.getInt32Fast() & 0x1f))); 1836 1902 if (val.numberToInt32(left) && shift.numberToUInt32(right)) 1837 return JSValue::encode(jsNumber(ARG_globalData, left << (right & 0x1f))); 1838 1839 CallFrame* callFrame = ARG_callFrame; 1840 JSValue result = jsNumber(ARG_globalData, (val.toInt32(callFrame)) << (shift.toUInt32(callFrame) & 0x1f)); 1841 CHECK_FOR_EXCEPTION_AT_END(); 1842 return JSValue::encode(result); 1843 } 1844 1845 EncodedJSValue JITStubs::cti_op_bitand(STUB_ARGS) 1846 { 1847 BEGIN_STUB_FUNCTION(); 1848 1849 JSValue src1 = ARG_src1; 1850 JSValue src2 = ARG_src2; 1903 return JSValue::encode(jsNumber(stackFrame.globalData, left << (right & 0x1f))); 1904 1905 CallFrame* callFrame = stackFrame.callFrame; 1906 JSValue result = jsNumber(stackFrame.globalData, (val.toInt32(callFrame)) << (shift.toUInt32(callFrame) & 0x1f)); 1907 CHECK_FOR_EXCEPTION_AT_END(); 1908 return JSValue::encode(result); 1909 } 1910 1911 EncodedJSValue JITStubs::cti_op_bitand(STUB_ARGS_DECLARATION) 1912 { 1913 BEGIN_STUB_FUNCTION(); 1914 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1915 1916 JSValue src1 = stackFrame.args[0].jsValue(); 1917 JSValue src2 = stackFrame.args[1].jsValue(); 1851 1918 1852 1919 int32_t left; 1853 1920 int32_t right; 1854 1921 if (src1.numberToInt32(left) && src2.numberToInt32(right)) 1855 return JSValue::encode(jsNumber(ARG_globalData, left & right)); 1856 1857 CallFrame* callFrame = ARG_callFrame; 1858 JSValue result = jsNumber(ARG_globalData, src1.toInt32(callFrame) & src2.toInt32(callFrame)); 1859 CHECK_FOR_EXCEPTION_AT_END(); 1860 return JSValue::encode(result); 1861 } 1862 1863 EncodedJSValue JITStubs::cti_op_rshift(STUB_ARGS) 1864 { 1865 BEGIN_STUB_FUNCTION(); 1866 1867 JSValue val = ARG_src1; 1868 JSValue shift = ARG_src2; 1922 return JSValue::encode(jsNumber(stackFrame.globalData, left & right)); 1923 1924 CallFrame* callFrame = stackFrame.callFrame; 1925 JSValue result = jsNumber(stackFrame.globalData, src1.toInt32(callFrame) & src2.toInt32(callFrame)); 1926 CHECK_FOR_EXCEPTION_AT_END(); 1927 return JSValue::encode(result); 1928 } 1929 1930 EncodedJSValue JITStubs::cti_op_rshift(STUB_ARGS_DECLARATION) 1931 { 1932 BEGIN_STUB_FUNCTION(); 1933 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1934 1935 JSValue val = stackFrame.args[0].jsValue(); 1936 JSValue shift = stackFrame.args[1].jsValue(); 1869 1937 1870 1938 int32_t left; … … 1873 1941 return JSValue::encode(JSFastMath::rightShiftImmediateNumbers(val, shift)); 1874 1942 if (val.numberToInt32(left) && shift.numberToUInt32(right)) 1875 return JSValue::encode(jsNumber(ARG_globalData, left >> (right & 0x1f))); 1876 1877 CallFrame* callFrame = ARG_callFrame; 1878 JSValue result = jsNumber(ARG_globalData, (val.toInt32(callFrame)) >> (shift.toUInt32(callFrame) & 0x1f)); 1879 CHECK_FOR_EXCEPTION_AT_END(); 1880 return JSValue::encode(result); 1881 } 1882 1883 EncodedJSValue JITStubs::cti_op_bitnot(STUB_ARGS) 1884 { 1885 BEGIN_STUB_FUNCTION(); 1886 1887 JSValue src = ARG_src1; 1943 return JSValue::encode(jsNumber(stackFrame.globalData, left >> (right & 0x1f))); 1944 1945 CallFrame* callFrame = stackFrame.callFrame; 1946 JSValue result = jsNumber(stackFrame.globalData, (val.toInt32(callFrame)) >> (shift.toUInt32(callFrame) & 0x1f)); 1947 CHECK_FOR_EXCEPTION_AT_END(); 1948 return JSValue::encode(result); 1949 } 1950 1951 EncodedJSValue JITStubs::cti_op_bitnot(STUB_ARGS_DECLARATION) 1952 { 1953 BEGIN_STUB_FUNCTION(); 1954 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1955 1956 JSValue src = stackFrame.args[0].jsValue(); 1888 1957 1889 1958 int value; 1890 1959 if (src.numberToInt32(value)) 1891 return JSValue::encode(jsNumber(ARG_globalData, ~value)); 1892 1893 CallFrame* callFrame = ARG_callFrame; 1894 JSValue result = jsNumber(ARG_globalData, ~src.toInt32(callFrame)); 1895 CHECK_FOR_EXCEPTION_AT_END(); 1896 return JSValue::encode(result); 1897 } 1898 1899 VoidPtrPair JITStubs::cti_op_resolve_with_base(STUB_ARGS) 1900 { 1901 BEGIN_STUB_FUNCTION(); 1902 1903 CallFrame* callFrame = ARG_callFrame; 1960 return JSValue::encode(jsNumber(stackFrame.globalData, ~value)); 1961 1962 CallFrame* callFrame = stackFrame.callFrame; 1963 JSValue result = jsNumber(stackFrame.globalData, ~src.toInt32(callFrame)); 1964 CHECK_FOR_EXCEPTION_AT_END(); 1965 return JSValue::encode(result); 1966 } 1967 1968 VoidPtrPair JITStubs::cti_op_resolve_with_base(STUB_ARGS_DECLARATION) 1969 { 1970 BEGIN_STUB_FUNCTION(); 1971 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 1972 1973 CallFrame* callFrame = stackFrame.callFrame; 1904 1974 ScopeChainNode* scopeChain = callFrame->scopeChain(); 1905 1975 … … 1911 1981 ASSERT(iter != end); 1912 1982 1913 Identifier& ident = *ARG_id1;1983 Identifier& ident = stackFrame.args[0].identifier(); 1914 1984 JSObject* base; 1915 1985 do { … … 1927 1997 CodeBlock* codeBlock = callFrame->codeBlock(); 1928 1998 unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS); 1929 ARG_globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock);1999 stackFrame.globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock); 1930 2000 VM_THROW_EXCEPTION_2(); 1931 2001 } 1932 2002 1933 JSObject* JITStubs::cti_op_new_func_exp(STUB_ARGS) 1934 { 1935 BEGIN_STUB_FUNCTION(); 1936 1937 return ARG_funcexp1->makeFunction(ARG_callFrame, ARG_callFrame->scopeChain()); 1938 } 1939 1940 EncodedJSValue JITStubs::cti_op_mod(STUB_ARGS) 1941 { 1942 BEGIN_STUB_FUNCTION(); 1943 1944 JSValue dividendValue = ARG_src1; 1945 JSValue divisorValue = ARG_src2; 1946 1947 CallFrame* callFrame = ARG_callFrame; 2003 JSObject* JITStubs::cti_op_new_func_exp(STUB_ARGS_DECLARATION) 2004 { 2005 BEGIN_STUB_FUNCTION(); 2006 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2007 2008 return stackFrame.args[0].funcExprNode()->makeFunction(stackFrame.callFrame, stackFrame.callFrame->scopeChain()); 2009 } 2010 2011 EncodedJSValue JITStubs::cti_op_mod(STUB_ARGS_DECLARATION) 2012 { 2013 BEGIN_STUB_FUNCTION(); 2014 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2015 2016 JSValue dividendValue = stackFrame.args[0].jsValue(); 2017 JSValue divisorValue = stackFrame.args[1].jsValue(); 2018 2019 CallFrame* callFrame = stackFrame.callFrame; 1948 2020 double d = dividendValue.toNumber(callFrame); 1949 JSValue result = jsNumber(ARG_globalData, fmod(d, divisorValue.toNumber(callFrame))); 1950 CHECK_FOR_EXCEPTION_AT_END(); 1951 return JSValue::encode(result); 1952 } 1953 1954 EncodedJSValue JITStubs::cti_op_less(STUB_ARGS) 1955 { 1956 BEGIN_STUB_FUNCTION(); 1957 1958 CallFrame* callFrame = ARG_callFrame; 1959 JSValue result = jsBoolean(jsLess(callFrame, ARG_src1, ARG_src2)); 1960 CHECK_FOR_EXCEPTION_AT_END(); 1961 return JSValue::encode(result); 1962 } 1963 1964 EncodedJSValue JITStubs::cti_op_neq(STUB_ARGS) 1965 { 1966 BEGIN_STUB_FUNCTION(); 1967 1968 JSValue src1 = ARG_src1; 1969 JSValue src2 = ARG_src2; 2021 JSValue result = jsNumber(stackFrame.globalData, fmod(d, divisorValue.toNumber(callFrame))); 2022 CHECK_FOR_EXCEPTION_AT_END(); 2023 return JSValue::encode(result); 2024 } 2025 2026 EncodedJSValue JITStubs::cti_op_less(STUB_ARGS_DECLARATION) 2027 { 2028 BEGIN_STUB_FUNCTION(); 2029 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2030 2031 CallFrame* callFrame = stackFrame.callFrame; 2032 JSValue result = jsBoolean(jsLess(callFrame, stackFrame.args[0].jsValue(), stackFrame.args[1].jsValue())); 2033 CHECK_FOR_EXCEPTION_AT_END(); 2034 return JSValue::encode(result); 2035 } 2036 2037 EncodedJSValue JITStubs::cti_op_neq(STUB_ARGS_DECLARATION) 2038 { 2039 BEGIN_STUB_FUNCTION(); 2040 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2041 2042 JSValue src1 = stackFrame.args[0].jsValue(); 2043 JSValue src2 = stackFrame.args[1].jsValue(); 1970 2044 1971 2045 ASSERT(!JSValue::areBothInt32Fast(src1, src2)); 1972 2046 1973 CallFrame* callFrame = ARG_callFrame;2047 CallFrame* callFrame = stackFrame.callFrame; 1974 2048 JSValue result = jsBoolean(!JSValue::equalSlowCaseInline(callFrame, src1, src2)); 1975 2049 CHECK_FOR_EXCEPTION_AT_END(); … … 1977 2051 } 1978 2052 1979 VoidPtrPair JITStubs::cti_op_post_dec(STUB_ARGS) 1980 { 1981 BEGIN_STUB_FUNCTION(); 1982 1983 JSValue v = ARG_src1; 1984 1985 CallFrame* callFrame = ARG_callFrame; 2053 VoidPtrPair JITStubs::cti_op_post_dec(STUB_ARGS_DECLARATION) 2054 { 2055 BEGIN_STUB_FUNCTION(); 2056 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2057 2058 JSValue v = stackFrame.args[0].jsValue(); 2059 2060 CallFrame* callFrame = stackFrame.callFrame; 1986 2061 1987 2062 JSValue number = v.toJSNumber(callFrame); 1988 2063 CHECK_FOR_EXCEPTION_AT_END(); 1989 2064 1990 RETURN_PAIR(JSValue::encode(number), JSValue::encode(jsNumber(ARG_globalData, number.uncheckedGetNumber() - 1))); 1991 } 1992 1993 EncodedJSValue JITStubs::cti_op_urshift(STUB_ARGS) 1994 { 1995 BEGIN_STUB_FUNCTION(); 1996 1997 JSValue val = ARG_src1; 1998 JSValue shift = ARG_src2; 1999 2000 CallFrame* callFrame = ARG_callFrame; 2065 RETURN_PAIR(JSValue::encode(number), JSValue::encode(jsNumber(stackFrame.globalData, number.uncheckedGetNumber() - 1))); 2066 } 2067 2068 EncodedJSValue JITStubs::cti_op_urshift(STUB_ARGS_DECLARATION) 2069 { 2070 BEGIN_STUB_FUNCTION(); 2071 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2072 2073 JSValue val = stackFrame.args[0].jsValue(); 2074 JSValue shift = stackFrame.args[1].jsValue(); 2075 2076 CallFrame* callFrame = stackFrame.callFrame; 2001 2077 2002 2078 if (JSFastMath::canDoFastUrshift(val, shift)) 2003 2079 return JSValue::encode(JSFastMath::rightShiftImmediateNumbers(val, shift)); 2004 2080 else { 2005 JSValue result = jsNumber( ARG_globalData, (val.toUInt32(callFrame)) >> (shift.toUInt32(callFrame) & 0x1f));2081 JSValue result = jsNumber(stackFrame.globalData, (val.toUInt32(callFrame)) >> (shift.toUInt32(callFrame) & 0x1f)); 2006 2082 CHECK_FOR_EXCEPTION_AT_END(); 2007 2083 return JSValue::encode(result); … … 2009 2085 } 2010 2086 2011 EncodedJSValue JITStubs::cti_op_bitxor(STUB_ARGS) 2012 { 2013 BEGIN_STUB_FUNCTION(); 2014 2015 JSValue src1 = ARG_src1; 2016 JSValue src2 = ARG_src2; 2017 2018 CallFrame* callFrame = ARG_callFrame; 2019 2020 JSValue result = jsNumber(ARG_globalData, src1.toInt32(callFrame) ^ src2.toInt32(callFrame)); 2021 CHECK_FOR_EXCEPTION_AT_END(); 2022 return JSValue::encode(result); 2023 } 2024 2025 JSObject* JITStubs::cti_op_new_regexp(STUB_ARGS) 2026 { 2027 BEGIN_STUB_FUNCTION(); 2028 2029 return new (ARG_globalData) RegExpObject(ARG_callFrame->lexicalGlobalObject()->regExpStructure(), ARG_regexp1); 2030 } 2031 2032 EncodedJSValue JITStubs::cti_op_bitor(STUB_ARGS) 2033 { 2034 BEGIN_STUB_FUNCTION(); 2035 2036 JSValue src1 = ARG_src1; 2037 JSValue src2 = ARG_src2; 2038 2039 CallFrame* callFrame = ARG_callFrame; 2040 2041 JSValue result = jsNumber(ARG_globalData, src1.toInt32(callFrame) | src2.toInt32(callFrame)); 2042 CHECK_FOR_EXCEPTION_AT_END(); 2043 return JSValue::encode(result); 2044 } 2045 2046 EncodedJSValue JITStubs::cti_op_call_eval(STUB_ARGS) 2047 { 2048 BEGIN_STUB_FUNCTION(); 2049 2050 CallFrame* callFrame = ARG_callFrame; 2051 RegisterFile* registerFile = ARG_registerFile; 2052 2053 Interpreter* interpreter = ARG_globalData->interpreter; 2054 2055 JSValue funcVal = ARG_src1; 2056 int registerOffset = ARG_int2; 2057 int argCount = ARG_int3; 2087 EncodedJSValue JITStubs::cti_op_bitxor(STUB_ARGS_DECLARATION) 2088 { 2089 BEGIN_STUB_FUNCTION(); 2090 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2091 2092 JSValue src1 = stackFrame.args[0].jsValue(); 2093 JSValue src2 = stackFrame.args[1].jsValue(); 2094 2095 CallFrame* callFrame = stackFrame.callFrame; 2096 2097 JSValue result = jsNumber(stackFrame.globalData, src1.toInt32(callFrame) ^ src2.toInt32(callFrame)); 2098 CHECK_FOR_EXCEPTION_AT_END(); 2099 return JSValue::encode(result); 2100 } 2101 2102 JSObject* JITStubs::cti_op_new_regexp(STUB_ARGS_DECLARATION) 2103 { 2104 BEGIN_STUB_FUNCTION(); 2105 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2106 2107 return new (stackFrame.globalData) RegExpObject(stackFrame.callFrame->lexicalGlobalObject()->regExpStructure(), stackFrame.args[0].regExp()); 2108 } 2109 2110 EncodedJSValue JITStubs::cti_op_bitor(STUB_ARGS_DECLARATION) 2111 { 2112 BEGIN_STUB_FUNCTION(); 2113 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2114 2115 JSValue src1 = stackFrame.args[0].jsValue(); 2116 JSValue src2 = stackFrame.args[1].jsValue(); 2117 2118 CallFrame* callFrame = stackFrame.callFrame; 2119 2120 JSValue result = jsNumber(stackFrame.globalData, src1.toInt32(callFrame) | src2.toInt32(callFrame)); 2121 CHECK_FOR_EXCEPTION_AT_END(); 2122 return JSValue::encode(result); 2123 } 2124 2125 EncodedJSValue JITStubs::cti_op_call_eval(STUB_ARGS_DECLARATION) 2126 { 2127 BEGIN_STUB_FUNCTION(); 2128 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2129 2130 CallFrame* callFrame = stackFrame.callFrame; 2131 RegisterFile* registerFile = stackFrame.registerFile; 2132 2133 Interpreter* interpreter = stackFrame.globalData->interpreter; 2134 2135 JSValue funcVal = stackFrame.args[0].jsValue(); 2136 int registerOffset = stackFrame.args[1].int32(); 2137 int argCount = stackFrame.args[2].int32(); 2058 2138 2059 2139 Register* newCallFrame = callFrame->registers() + registerOffset; … … 2066 2146 JSValue result = interpreter->callEval(callFrame, registerFile, argv, argCount, registerOffset, exceptionValue); 2067 2147 if (UNLIKELY(exceptionValue != JSValue())) { 2068 ARG_globalData->exception = exceptionValue;2148 stackFrame.globalData->exception = exceptionValue; 2069 2149 VM_THROW_EXCEPTION_AT_END(); 2070 2150 } … … 2075 2155 } 2076 2156 2077 EncodedJSValue JITStubs::cti_op_throw(STUB_ARGS) 2078 { 2079 BEGIN_STUB_FUNCTION(); 2080 2081 CallFrame* callFrame = ARG_callFrame; 2157 EncodedJSValue JITStubs::cti_op_throw(STUB_ARGS_DECLARATION) 2158 { 2159 BEGIN_STUB_FUNCTION(); 2160 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2161 2162 CallFrame* callFrame = stackFrame.callFrame; 2082 2163 CodeBlock* codeBlock = callFrame->codeBlock(); 2083 2164 2084 2165 unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS); 2085 2166 2086 JSValue exceptionValue = ARG_src1;2167 JSValue exceptionValue = stackFrame.args[0].jsValue(); 2087 2168 ASSERT(exceptionValue); 2088 2169 2089 HandlerInfo* handler = ARG_globalData->interpreter->throwException(callFrame, exceptionValue, vPCIndex, true);2170 HandlerInfo* handler = stackFrame.globalData->interpreter->throwException(callFrame, exceptionValue, vPCIndex, true); 2090 2171 2091 2172 if (!handler) { 2092 * ARG_exception = exceptionValue;2173 *stackFrame.exception = exceptionValue; 2093 2174 return JSValue::encode(jsNull()); 2094 2175 } 2095 2176 2096 ARG_setCallFrame(callFrame);2177 stackFrame.callFrame = callFrame; 2097 2178 void* catchRoutine = handler->nativeCode.addressForExceptionHandler(); 2098 2179 ASSERT(catchRoutine); … … 2101 2182 } 2102 2183 2103 JSPropertyNameIterator* JITStubs::cti_op_get_pnames(STUB_ARGS) 2104 { 2105 BEGIN_STUB_FUNCTION(); 2106 2107 return JSPropertyNameIterator::create(ARG_callFrame, ARG_src1); 2108 } 2109 2110 EncodedJSValue JITStubs::cti_op_next_pname(STUB_ARGS) 2111 { 2112 BEGIN_STUB_FUNCTION(); 2113 2114 JSPropertyNameIterator* it = ARG_pni1; 2115 JSValue temp = it->next(ARG_callFrame); 2184 JSPropertyNameIterator* JITStubs::cti_op_get_pnames(STUB_ARGS_DECLARATION) 2185 { 2186 BEGIN_STUB_FUNCTION(); 2187 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2188 2189 return JSPropertyNameIterator::create(stackFrame.callFrame, stackFrame.args[0].jsValue()); 2190 } 2191 2192 EncodedJSValue JITStubs::cti_op_next_pname(STUB_ARGS_DECLARATION) 2193 { 2194 BEGIN_STUB_FUNCTION(); 2195 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2196 2197 JSPropertyNameIterator* it = stackFrame.args[0].propertyNameIterator(); 2198 JSValue temp = it->next(stackFrame.callFrame); 2116 2199 if (!temp) 2117 2200 it->invalidate(); … … 2119 2202 } 2120 2203 2121 JSObject* JITStubs::cti_op_push_scope(STUB_ARGS) 2122 { 2123 BEGIN_STUB_FUNCTION(); 2124 2125 JSObject* o = ARG_src1.toObject(ARG_callFrame); 2204 JSObject* JITStubs::cti_op_push_scope(STUB_ARGS_DECLARATION) 2205 { 2206 BEGIN_STUB_FUNCTION(); 2207 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2208 2209 JSObject* o = stackFrame.args[0].jsValue().toObject(stackFrame.callFrame); 2126 2210 CHECK_FOR_EXCEPTION(); 2127 ARG_callFrame->setScopeChain(ARG_callFrame->scopeChain()->push(o));2211 stackFrame.callFrame->setScopeChain(stackFrame.callFrame->scopeChain()->push(o)); 2128 2212 return o; 2129 2213 } 2130 2214 2131 void JITStubs::cti_op_pop_scope(STUB_ARGS) 2132 { 2133 BEGIN_STUB_FUNCTION(); 2134 2135 ARG_callFrame->setScopeChain(ARG_callFrame->scopeChain()->pop()); 2136 } 2137 2138 EncodedJSValue JITStubs::cti_op_typeof(STUB_ARGS) 2139 { 2140 BEGIN_STUB_FUNCTION(); 2141 2142 return JSValue::encode(jsTypeStringForValue(ARG_callFrame, ARG_src1)); 2143 } 2144 2145 EncodedJSValue JITStubs::cti_op_is_undefined(STUB_ARGS) 2146 { 2147 BEGIN_STUB_FUNCTION(); 2148 2149 JSValue v = ARG_src1; 2215 void JITStubs::cti_op_pop_scope(STUB_ARGS_DECLARATION) 2216 { 2217 BEGIN_STUB_FUNCTION(); 2218 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2219 2220 stackFrame.callFrame->setScopeChain(stackFrame.callFrame->scopeChain()->pop()); 2221 } 2222 2223 EncodedJSValue JITStubs::cti_op_typeof(STUB_ARGS_DECLARATION) 2224 { 2225 BEGIN_STUB_FUNCTION(); 2226 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2227 2228 return JSValue::encode(jsTypeStringForValue(stackFrame.callFrame, stackFrame.args[0].jsValue())); 2229 } 2230 2231 EncodedJSValue JITStubs::cti_op_is_undefined(STUB_ARGS_DECLARATION) 2232 { 2233 BEGIN_STUB_FUNCTION(); 2234 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2235 2236 JSValue v = stackFrame.args[0].jsValue(); 2150 2237 return JSValue::encode(jsBoolean(v.isCell() ? v.asCell()->structure()->typeInfo().masqueradesAsUndefined() : v.isUndefined())); 2151 2238 } 2152 2239 2153 EncodedJSValue JITStubs::cti_op_is_boolean(STUB_ARGS) 2154 { 2155 BEGIN_STUB_FUNCTION(); 2156 2157 return JSValue::encode(jsBoolean(ARG_src1.isBoolean())); 2158 } 2159 2160 EncodedJSValue JITStubs::cti_op_is_number(STUB_ARGS) 2161 { 2162 BEGIN_STUB_FUNCTION(); 2163 2164 return JSValue::encode(jsBoolean(ARG_src1.isNumber())); 2165 } 2166 2167 EncodedJSValue JITStubs::cti_op_is_string(STUB_ARGS) 2168 { 2169 BEGIN_STUB_FUNCTION(); 2170 2171 return JSValue::encode(jsBoolean(isJSString(ARG_globalData, ARG_src1))); 2172 } 2173 2174 EncodedJSValue JITStubs::cti_op_is_object(STUB_ARGS) 2175 { 2176 BEGIN_STUB_FUNCTION(); 2177 2178 return JSValue::encode(jsBoolean(jsIsObjectType(ARG_src1))); 2179 } 2180 2181 EncodedJSValue JITStubs::cti_op_is_function(STUB_ARGS) 2182 { 2183 BEGIN_STUB_FUNCTION(); 2184 2185 return JSValue::encode(jsBoolean(jsIsFunctionType(ARG_src1))); 2186 } 2187 2188 EncodedJSValue JITStubs::cti_op_stricteq(STUB_ARGS) 2189 { 2190 BEGIN_STUB_FUNCTION(); 2191 2192 JSValue src1 = ARG_src1; 2193 JSValue src2 = ARG_src2; 2240 EncodedJSValue JITStubs::cti_op_is_boolean(STUB_ARGS_DECLARATION) 2241 { 2242 BEGIN_STUB_FUNCTION(); 2243 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2244 2245 return JSValue::encode(jsBoolean(stackFrame.args[0].jsValue().isBoolean())); 2246 } 2247 2248 EncodedJSValue JITStubs::cti_op_is_number(STUB_ARGS_DECLARATION) 2249 { 2250 BEGIN_STUB_FUNCTION(); 2251 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2252 2253 return JSValue::encode(jsBoolean(stackFrame.args[0].jsValue().isNumber())); 2254 } 2255 2256 EncodedJSValue JITStubs::cti_op_is_string(STUB_ARGS_DECLARATION) 2257 { 2258 BEGIN_STUB_FUNCTION(); 2259 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2260 2261 return JSValue::encode(jsBoolean(isJSString(stackFrame.globalData, stackFrame.args[0].jsValue()))); 2262 } 2263 2264 EncodedJSValue JITStubs::cti_op_is_object(STUB_ARGS_DECLARATION) 2265 { 2266 BEGIN_STUB_FUNCTION(); 2267 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2268 2269 return JSValue::encode(jsBoolean(jsIsObjectType(stackFrame.args[0].jsValue()))); 2270 } 2271 2272 EncodedJSValue JITStubs::cti_op_is_function(STUB_ARGS_DECLARATION) 2273 { 2274 BEGIN_STUB_FUNCTION(); 2275 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2276 2277 return JSValue::encode(jsBoolean(jsIsFunctionType(stackFrame.args[0].jsValue()))); 2278 } 2279 2280 EncodedJSValue JITStubs::cti_op_stricteq(STUB_ARGS_DECLARATION) 2281 { 2282 BEGIN_STUB_FUNCTION(); 2283 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2284 2285 JSValue src1 = stackFrame.args[0].jsValue(); 2286 JSValue src2 = stackFrame.args[1].jsValue(); 2194 2287 2195 2288 return JSValue::encode(jsBoolean(JSValue::strictEqual(src1, src2))); 2196 2289 } 2197 2290 2198 EncodedJSValue JITStubs::cti_op_to_primitive(STUB_ARGS) 2199 { 2200 BEGIN_STUB_FUNCTION(); 2201 2202 return JSValue::encode(ARG_src1.toPrimitive(ARG_callFrame)); 2203 } 2204 2205 EncodedJSValue JITStubs::cti_op_strcat(STUB_ARGS) 2206 { 2207 BEGIN_STUB_FUNCTION(); 2208 2209 return JSValue::encode(concatenateStrings(ARG_callFrame, &ARG_callFrame->registers()[ARG_int1], ARG_int2)); 2210 } 2211 2212 EncodedJSValue JITStubs::cti_op_nstricteq(STUB_ARGS) 2213 { 2214 BEGIN_STUB_FUNCTION(); 2215 2216 JSValue src1 = ARG_src1; 2217 JSValue src2 = ARG_src2; 2291 EncodedJSValue JITStubs::cti_op_to_primitive(STUB_ARGS_DECLARATION) 2292 { 2293 BEGIN_STUB_FUNCTION(); 2294 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2295 2296 return JSValue::encode(stackFrame.args[0].jsValue().toPrimitive(stackFrame.callFrame)); 2297 } 2298 2299 EncodedJSValue JITStubs::cti_op_strcat(STUB_ARGS_DECLARATION) 2300 { 2301 BEGIN_STUB_FUNCTION(); 2302 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2303 2304 return JSValue::encode(concatenateStrings(stackFrame.callFrame, &stackFrame.callFrame->registers()[stackFrame.args[0].int32()], stackFrame.args[1].int32())); 2305 } 2306 2307 EncodedJSValue JITStubs::cti_op_nstricteq(STUB_ARGS_DECLARATION) 2308 { 2309 BEGIN_STUB_FUNCTION(); 2310 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2311 2312 JSValue src1 = stackFrame.args[0].jsValue(); 2313 JSValue src2 = stackFrame.args[1].jsValue(); 2218 2314 2219 2315 return JSValue::encode(jsBoolean(!JSValue::strictEqual(src1, src2))); 2220 2316 } 2221 2317 2222 EncodedJSValue JITStubs::cti_op_to_jsnumber(STUB_ARGS) 2223 { 2224 BEGIN_STUB_FUNCTION(); 2225 2226 JSValue src = ARG_src1; 2227 CallFrame* callFrame = ARG_callFrame; 2318 EncodedJSValue JITStubs::cti_op_to_jsnumber(STUB_ARGS_DECLARATION) 2319 { 2320 BEGIN_STUB_FUNCTION(); 2321 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2322 2323 JSValue src = stackFrame.args[0].jsValue(); 2324 CallFrame* callFrame = stackFrame.callFrame; 2228 2325 2229 2326 JSValue result = src.toJSNumber(callFrame); … … 2232 2329 } 2233 2330 2234 EncodedJSValue JITStubs::cti_op_in(STUB_ARGS) 2235 { 2236 BEGIN_STUB_FUNCTION(); 2237 2238 CallFrame* callFrame = ARG_callFrame; 2239 JSValue baseVal = ARG_src2; 2331 EncodedJSValue JITStubs::cti_op_in(STUB_ARGS_DECLARATION) 2332 { 2333 BEGIN_STUB_FUNCTION(); 2334 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2335 2336 CallFrame* callFrame = stackFrame.callFrame; 2337 JSValue baseVal = stackFrame.args[1].jsValue(); 2240 2338 2241 2339 if (!baseVal.isObject()) { 2242 CallFrame* callFrame = ARG_callFrame;2340 CallFrame* callFrame = stackFrame.callFrame; 2243 2341 CodeBlock* codeBlock = callFrame->codeBlock(); 2244 2342 unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS); 2245 ARG_globalData->exception = createInvalidParamError(callFrame, "in", baseVal, vPCIndex, codeBlock);2343 stackFrame.globalData->exception = createInvalidParamError(callFrame, "in", baseVal, vPCIndex, codeBlock); 2246 2344 VM_THROW_EXCEPTION(); 2247 2345 } 2248 2346 2249 JSValue propName = ARG_src1;2347 JSValue propName = stackFrame.args[0].jsValue(); 2250 2348 JSObject* baseObj = asObject(baseVal); 2251 2349 … … 2259 2357 } 2260 2358 2261 JSObject* JITStubs::cti_op_push_new_scope(STUB_ARGS) 2262 { 2263 BEGIN_STUB_FUNCTION(); 2264 2265 JSObject* scope = new (ARG_globalData) JSStaticScopeObject(ARG_callFrame, *ARG_id1, ARG_src2, DontDelete); 2266 2267 CallFrame* callFrame = ARG_callFrame; 2359 JSObject* JITStubs::cti_op_push_new_scope(STUB_ARGS_DECLARATION) 2360 { 2361 BEGIN_STUB_FUNCTION(); 2362 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2363 2364 JSObject* scope = new (stackFrame.globalData) JSStaticScopeObject(stackFrame.callFrame, stackFrame.args[0].identifier(), stackFrame.args[1].jsValue(), DontDelete); 2365 2366 CallFrame* callFrame = stackFrame.callFrame; 2268 2367 callFrame->setScopeChain(callFrame->scopeChain()->push(scope)); 2269 2368 return scope; 2270 2369 } 2271 2370 2272 void JITStubs::cti_op_jmp_scopes(STUB_ARGS) 2273 { 2274 BEGIN_STUB_FUNCTION(); 2275 2276 unsigned count = ARG_int1; 2277 CallFrame* callFrame = ARG_callFrame; 2371 void JITStubs::cti_op_jmp_scopes(STUB_ARGS_DECLARATION) 2372 { 2373 BEGIN_STUB_FUNCTION(); 2374 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2375 2376 unsigned count = stackFrame.args[0].int32(); 2377 CallFrame* callFrame = stackFrame.callFrame; 2278 2378 2279 2379 ScopeChainNode* tmp = callFrame->scopeChain(); … … 2283 2383 } 2284 2384 2285 void JITStubs::cti_op_put_by_index(STUB_ARGS) 2286 { 2287 BEGIN_STUB_FUNCTION(); 2288 2289 CallFrame* callFrame = ARG_callFrame; 2290 unsigned property = ARG_int2; 2291 2292 ARG_src1.put(callFrame, property, ARG_src3); 2293 } 2294 2295 void* JITStubs::cti_op_switch_imm(STUB_ARGS) 2296 { 2297 BEGIN_STUB_FUNCTION(); 2298 2299 JSValue scrutinee = ARG_src1; 2300 unsigned tableIndex = ARG_int2; 2301 CallFrame* callFrame = ARG_callFrame; 2385 void JITStubs::cti_op_put_by_index(STUB_ARGS_DECLARATION) 2386 { 2387 BEGIN_STUB_FUNCTION(); 2388 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2389 2390 CallFrame* callFrame = stackFrame.callFrame; 2391 unsigned property = stackFrame.args[1].int32(); 2392 2393 stackFrame.args[0].jsValue().put(callFrame, property, stackFrame.args[2].jsValue()); 2394 } 2395 2396 void* JITStubs::cti_op_switch_imm(STUB_ARGS_DECLARATION) 2397 { 2398 BEGIN_STUB_FUNCTION(); 2399 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2400 2401 JSValue scrutinee = stackFrame.args[0].jsValue(); 2402 unsigned tableIndex = stackFrame.args[1].int32(); 2403 CallFrame* callFrame = stackFrame.callFrame; 2302 2404 CodeBlock* codeBlock = callFrame->codeBlock(); 2303 2405 … … 2314 2416 } 2315 2417 2316 void* JITStubs::cti_op_switch_char(STUB_ARGS) 2317 { 2318 BEGIN_STUB_FUNCTION(); 2319 2320 JSValue scrutinee = ARG_src1; 2321 unsigned tableIndex = ARG_int2; 2322 CallFrame* callFrame = ARG_callFrame; 2418 void* JITStubs::cti_op_switch_char(STUB_ARGS_DECLARATION) 2419 { 2420 BEGIN_STUB_FUNCTION(); 2421 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2422 2423 JSValue scrutinee = stackFrame.args[0].jsValue(); 2424 unsigned tableIndex = stackFrame.args[1].int32(); 2425 CallFrame* callFrame = stackFrame.callFrame; 2323 2426 CodeBlock* codeBlock = callFrame->codeBlock(); 2324 2427 … … 2334 2437 } 2335 2438 2336 void* JITStubs::cti_op_switch_string(STUB_ARGS) 2337 { 2338 BEGIN_STUB_FUNCTION(); 2339 2340 JSValue scrutinee = ARG_src1; 2341 unsigned tableIndex = ARG_int2; 2342 CallFrame* callFrame = ARG_callFrame; 2439 void* JITStubs::cti_op_switch_string(STUB_ARGS_DECLARATION) 2440 { 2441 BEGIN_STUB_FUNCTION(); 2442 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2443 2444 JSValue scrutinee = stackFrame.args[0].jsValue(); 2445 unsigned tableIndex = stackFrame.args[1].int32(); 2446 CallFrame* callFrame = stackFrame.callFrame; 2343 2447 CodeBlock* codeBlock = callFrame->codeBlock(); 2344 2448 … … 2353 2457 } 2354 2458 2355 EncodedJSValue JITStubs::cti_op_del_by_val(STUB_ARGS) 2356 { 2357 BEGIN_STUB_FUNCTION(); 2358 2359 CallFrame* callFrame = ARG_callFrame; 2360 2361 JSValue baseValue = ARG_src1; 2459 EncodedJSValue JITStubs::cti_op_del_by_val(STUB_ARGS_DECLARATION) 2460 { 2461 BEGIN_STUB_FUNCTION(); 2462 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2463 2464 CallFrame* callFrame = stackFrame.callFrame; 2465 2466 JSValue baseValue = stackFrame.args[0].jsValue(); 2362 2467 JSObject* baseObj = baseValue.toObject(callFrame); // may throw 2363 2468 2364 JSValue subscript = ARG_src2;2469 JSValue subscript = stackFrame.args[1].jsValue(); 2365 2470 JSValue result; 2366 2471 uint32_t i; … … 2378 2483 } 2379 2484 2380 void JITStubs::cti_op_put_getter(STUB_ARGS) 2381 { 2382 BEGIN_STUB_FUNCTION(); 2383 2384 CallFrame* callFrame = ARG_callFrame; 2385 2386 ASSERT(ARG_src1.isObject()); 2387 JSObject* baseObj = asObject(ARG_src1); 2388 ASSERT(ARG_src3.isObject()); 2389 baseObj->defineGetter(callFrame, *ARG_id2, asObject(ARG_src3)); 2390 } 2391 2392 void JITStubs::cti_op_put_setter(STUB_ARGS) 2393 { 2394 BEGIN_STUB_FUNCTION(); 2395 2396 CallFrame* callFrame = ARG_callFrame; 2397 2398 ASSERT(ARG_src1.isObject()); 2399 JSObject* baseObj = asObject(ARG_src1); 2400 ASSERT(ARG_src3.isObject()); 2401 baseObj->defineSetter(callFrame, *ARG_id2, asObject(ARG_src3)); 2402 } 2403 2404 JSObject* JITStubs::cti_op_new_error(STUB_ARGS) 2405 { 2406 BEGIN_STUB_FUNCTION(); 2407 2408 CallFrame* callFrame = ARG_callFrame; 2485 void JITStubs::cti_op_put_getter(STUB_ARGS_DECLARATION) 2486 { 2487 BEGIN_STUB_FUNCTION(); 2488 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2489 2490 CallFrame* callFrame = stackFrame.callFrame; 2491 2492 ASSERT(stackFrame.args[0].jsValue().isObject()); 2493 JSObject* baseObj = asObject(stackFrame.args[0].jsValue()); 2494 ASSERT(stackFrame.args[2].jsValue().isObject()); 2495 baseObj->defineGetter(callFrame, stackFrame.args[1].identifier(), asObject(stackFrame.args[2].jsValue())); 2496 } 2497 2498 void JITStubs::cti_op_put_setter(STUB_ARGS_DECLARATION) 2499 { 2500 BEGIN_STUB_FUNCTION(); 2501 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2502 2503 CallFrame* callFrame = stackFrame.callFrame; 2504 2505 ASSERT(stackFrame.args[0].jsValue().isObject()); 2506 JSObject* baseObj = asObject(stackFrame.args[0].jsValue()); 2507 ASSERT(stackFrame.args[2].jsValue().isObject()); 2508 baseObj->defineSetter(callFrame, stackFrame.args[1].identifier(), asObject(stackFrame.args[2].jsValue())); 2509 } 2510 2511 JSObject* JITStubs::cti_op_new_error(STUB_ARGS_DECLARATION) 2512 { 2513 BEGIN_STUB_FUNCTION(); 2514 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2515 2516 CallFrame* callFrame = stackFrame.callFrame; 2409 2517 CodeBlock* codeBlock = callFrame->codeBlock(); 2410 unsigned type = ARG_int1;2411 JSValue message = ARG_src2;2412 unsigned bytecodeOffset = ARG_int3;2518 unsigned type = stackFrame.args[0].int32(); 2519 JSValue message = stackFrame.args[1].jsValue(); 2520 unsigned bytecodeOffset = stackFrame.args[2].int32(); 2413 2521 2414 2522 unsigned lineNumber = codeBlock->lineNumberForBytecodeOffset(callFrame, bytecodeOffset); … … 2416 2524 } 2417 2525 2418 void JITStubs::cti_op_debug(STUB_ARGS) 2419 { 2420 BEGIN_STUB_FUNCTION(); 2421 2422 CallFrame* callFrame = ARG_callFrame; 2423 2424 int debugHookID = ARG_int1; 2425 int firstLine = ARG_int2; 2426 int lastLine = ARG_int3; 2427 2428 ARG_globalData->interpreter->debug(callFrame, static_cast<DebugHookID>(debugHookID), firstLine, lastLine); 2429 } 2430 2431 EncodedJSValue JITStubs::cti_vm_throw(STUB_ARGS) 2432 { 2433 BEGIN_STUB_FUNCTION(); 2434 2435 CallFrame* callFrame = ARG_callFrame; 2526 void JITStubs::cti_op_debug(STUB_ARGS_DECLARATION) 2527 { 2528 BEGIN_STUB_FUNCTION(); 2529 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2530 2531 CallFrame* callFrame = stackFrame.callFrame; 2532 2533 int debugHookID = stackFrame.args[0].int32(); 2534 int firstLine = stackFrame.args[1].int32(); 2535 int lastLine = stackFrame.args[2].int32(); 2536 2537 stackFrame.globalData->interpreter->debug(callFrame, static_cast<DebugHookID>(debugHookID), firstLine, lastLine); 2538 } 2539 2540 EncodedJSValue JITStubs::cti_vm_throw(STUB_ARGS_DECLARATION) 2541 { 2542 BEGIN_STUB_FUNCTION(); 2543 JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); 2544 2545 CallFrame* callFrame = stackFrame.callFrame; 2436 2546 CodeBlock* codeBlock = callFrame->codeBlock(); 2437 JSGlobalData* globalData = ARG_globalData;2547 JSGlobalData* globalData = stackFrame.globalData; 2438 2548 2439 2549 unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, globalData->exceptionLocation); … … 2446 2556 2447 2557 if (!handler) { 2448 * ARG_exception = exceptionValue;2558 *stackFrame.exception = exceptionValue; 2449 2559 return JSValue::encode(jsNull()); 2450 2560 } 2451 2561 2452 ARG_setCallFrame(callFrame);2562 stackFrame.callFrame = callFrame; 2453 2563 void* catchRoutine = handler->nativeCode.addressForExceptionHandler(); 2454 2564 ASSERT(catchRoutine); -
trunk/JavaScriptCore/jit/JITStubs.h
r43331 r43334 50 50 class PutPropertySlot; 51 51 class RegisterFile; 52 class FuncDeclNode; 53 class FuncExprNode; 54 class RegExp; 55 56 union JITStubArg { 57 void* asPointer; 58 EncodedJSValue asEncodedJSValue; 59 int32_t asInt32; 60 61 JSValue jsValue() { return JSValue::decode(asEncodedJSValue); } 62 Identifier& identifier() { return *static_cast<Identifier*>(asPointer); } 63 int32_t int32() { return asInt32; } 64 CodeBlock* codeBlock() { return static_cast<CodeBlock*>(asPointer); } 65 FuncDeclNode* funcDeclNode() { return static_cast<FuncDeclNode*>(asPointer); } 66 FuncExprNode* funcExprNode() { return static_cast<FuncExprNode*>(asPointer); } 67 RegExp* regExp() { return static_cast<RegExp*>(asPointer); } 68 JSPropertyNameIterator* propertyNameIterator() { return static_cast<JSPropertyNameIterator*>(asPointer); } 69 void* returnAddress() { return asPointer; } 70 }; 71 72 #if PLATFORM(X86_64) 73 struct JITStackFrame { 74 JITStubArg padding; // Used by JIT_STUB_ARGUMENT_STACK stub function calling convention 75 JITStubArg args[8]; 76 77 void* savedRBX; 78 void* savedR15; 79 void* savedR14; 80 void* savedR13; 81 void* savedR12; 82 void* savedRBP; 83 void* savedRIP; 84 85 void* code; 86 RegisterFile* registerFile; 87 CallFrame* callFrame; 88 JSValue* exception; 89 Profiler** enabledProfilerReference; 90 JSGlobalData* globalData; 91 }; 92 #else 93 struct JITStackFrame { 94 JITStubArg padding; // Used by JIT_STUB_ARGUMENT_STACK stub function calling convention 95 JITStubArg args[6]; 96 97 void* savedEBX; 98 void* savedEDI; 99 void* savedESI; 100 void* savedEBP; 101 void* savedEIP; 102 103 void* code; 104 RegisterFile* registerFile; 105 CallFrame* callFrame; 106 JSValue* exception; 107 Profiler** enabledProfilerReference; 108 JSGlobalData* globalData; 109 }; 110 #endif 52 111 53 112 #if USE(JIT_STUB_ARGUMENT_VA_LIST) 54 #define STUB_ARGS void* args, ...55 #define ARGS (reinterpret_cast<void**>(vl_args) - 1)113 #define STUB_ARGS_DECLARATION void* args, ... 114 #define STUB_ARGS (reinterpret_cast<void**>(vl_args) - 1) 56 115 #else // JIT_STUB_ARGUMENT_REGISTER or JIT_STUB_ARGUMENT_STACK 57 #define STUB_ARGS void** args58 #define ARGS (args)116 #define STUB_ARGS_DECLARATION void** args 117 #define STUB_ARGS (args) 59 118 #endif 60 119 … … 90 149 #define STUB_ARGS_globalData (STUB_ARGS_offset + 5) 91 150 92 #define ARG_callFrame static_cast<CallFrame*>(ARGS[STUB_ARGS_callFrame]) 93 #define ARG_registerFile static_cast<RegisterFile*>(ARGS[STUB_ARGS_registerFile]) 94 #define ARG_exception static_cast<JSValue*>(ARGS[STUB_ARGS_exception]) 95 #define ARG_profilerReference static_cast<Profiler**>(ARGS[STUB_ARGS_profilerReference]) 96 #define ARG_globalData static_cast<JSGlobalData*>(ARGS[STUB_ARGS_globalData]) 97 #define ARG_setCallFrame(newCallFrame) (ARGS[STUB_ARGS_callFrame] = (newCallFrame)) 98 99 #define ARG_src1 JSValue::decode(static_cast<EncodedJSValue>(ARGS[1])) 100 #define ARG_src2 JSValue::decode(static_cast<EncodedJSValue>(ARGS[2])) 101 #define ARG_src3 JSValue::decode(static_cast<EncodedJSValue>(ARGS[3])) 102 #define ARG_src4 JSValue::decode(static_cast<EncodedJSValue>(ARGS[4])) 103 #define ARG_src5 JSValue::decode(static_cast<EncodedJSValue>(ARGS[5])) 104 #define ARG_id1 static_cast<Identifier*>(ARGS[1]) 105 #define ARG_id2 static_cast<Identifier*>(ARGS[2]) 106 #define ARG_id3 static_cast<Identifier*>(ARGS[3]) 107 #define ARG_id4 static_cast<Identifier*>(ARGS[4]) 108 #define ARG_int1 static_cast<int32_t>(reinterpret_cast<intptr_t>(ARGS[1])) 109 #define ARG_int2 static_cast<int32_t>(reinterpret_cast<intptr_t>(ARGS[2])) 110 #define ARG_int3 static_cast<int32_t>(reinterpret_cast<intptr_t>(ARGS[3])) 111 #define ARG_int4 static_cast<int32_t>(reinterpret_cast<intptr_t>(ARGS[4])) 112 #define ARG_int5 static_cast<int32_t>(reinterpret_cast<intptr_t>(ARGS[5])) 113 #define ARG_int6 static_cast<int32_t>(reinterpret_cast<intptr_t>(ARGS[6])) 114 #define ARG_func1 static_cast<FuncDeclNode*>(ARGS[1]) 115 #define ARG_funcexp1 static_cast<FuncExprNode*>(ARGS[1]) 116 #define ARG_regexp1 static_cast<RegExp*>(ARGS[1]) 117 #define ARG_pni1 static_cast<JSPropertyNameIterator*>(ARGS[1]) 118 #define ARG_returnAddress2 static_cast<void*>(ARGS[2]) 119 #define ARG_codeBlock4 static_cast<CodeBlock*>(ARGS[4]) 120 121 #define STUB_RETURN_ADDRESS_SLOT (ARGS[-1]) 151 #define STUB_RETURN_ADDRESS_SLOT (STUB_ARGS[-1]) 122 152 123 153 // The Mac compilers are fine with this, … … 150 180 JITStubs(JSGlobalData*); 151 181 152 static JSObject* JIT_STUB cti_op_construct_JSConstruct(STUB_ARGS );153 static JSObject* JIT_STUB cti_op_convert_this(STUB_ARGS );154 static JSObject* JIT_STUB cti_op_new_array(STUB_ARGS );155 static JSObject* JIT_STUB cti_op_new_error(STUB_ARGS );156 static JSObject* JIT_STUB cti_op_new_func(STUB_ARGS );157 static JSObject* JIT_STUB cti_op_new_func_exp(STUB_ARGS );158 static JSObject* JIT_STUB cti_op_new_object(STUB_ARGS );159 static JSObject* JIT_STUB cti_op_new_regexp(STUB_ARGS );160 static JSObject* JIT_STUB cti_op_push_activation(STUB_ARGS );161 static JSObject* JIT_STUB cti_op_push_new_scope(STUB_ARGS );162 static JSObject* JIT_STUB cti_op_push_scope(STUB_ARGS );163 static JSPropertyNameIterator* JIT_STUB cti_op_get_pnames(STUB_ARGS );164 static EncodedJSValue JIT_STUB cti_op_add(STUB_ARGS );165 static EncodedJSValue JIT_STUB cti_op_bitand(STUB_ARGS );166 static EncodedJSValue JIT_STUB cti_op_bitnot(STUB_ARGS );167 static EncodedJSValue JIT_STUB cti_op_bitor(STUB_ARGS );168 static EncodedJSValue JIT_STUB cti_op_bitxor(STUB_ARGS );169 static EncodedJSValue JIT_STUB cti_op_call_NotJSFunction(STUB_ARGS );170 static EncodedJSValue JIT_STUB cti_op_call_eval(STUB_ARGS );171 static EncodedJSValue JIT_STUB cti_op_construct_NotJSConstruct(STUB_ARGS );172 static EncodedJSValue JIT_STUB cti_op_del_by_id(STUB_ARGS );173 static EncodedJSValue JIT_STUB cti_op_del_by_val(STUB_ARGS );174 static EncodedJSValue JIT_STUB cti_op_div(STUB_ARGS );175 static EncodedJSValue JIT_STUB cti_op_eq(STUB_ARGS );176 static EncodedJSValue JIT_STUB cti_op_get_by_id(STUB_ARGS );177 static EncodedJSValue JIT_STUB cti_op_get_by_id_array_fail(STUB_ARGS );178 static EncodedJSValue JIT_STUB cti_op_get_by_id_generic(STUB_ARGS );179 static EncodedJSValue JIT_STUB cti_op_get_by_id_proto_fail(STUB_ARGS );180 static EncodedJSValue JIT_STUB cti_op_get_by_id_proto_list(STUB_ARGS );181 static EncodedJSValue JIT_STUB cti_op_get_by_id_proto_list_full(STUB_ARGS );182 static EncodedJSValue JIT_STUB cti_op_get_by_id_second(STUB_ARGS );183 static EncodedJSValue JIT_STUB cti_op_get_by_id_self_fail(STUB_ARGS );184 static EncodedJSValue JIT_STUB cti_op_get_by_id_string_fail(STUB_ARGS );185 static EncodedJSValue JIT_STUB cti_op_get_by_val(STUB_ARGS );186 static EncodedJSValue JIT_STUB cti_op_get_by_val_byte_array(STUB_ARGS );187 static EncodedJSValue JIT_STUB cti_op_get_by_val_string(STUB_ARGS );188 static EncodedJSValue JIT_STUB cti_op_in(STUB_ARGS );189 static EncodedJSValue JIT_STUB cti_op_instanceof(STUB_ARGS );190 static EncodedJSValue JIT_STUB cti_op_is_boolean(STUB_ARGS );191 static EncodedJSValue JIT_STUB cti_op_is_function(STUB_ARGS );192 static EncodedJSValue JIT_STUB cti_op_is_number(STUB_ARGS );193 static EncodedJSValue JIT_STUB cti_op_is_object(STUB_ARGS );194 static EncodedJSValue JIT_STUB cti_op_is_string(STUB_ARGS );195 static EncodedJSValue JIT_STUB cti_op_is_undefined(STUB_ARGS );196 static EncodedJSValue JIT_STUB cti_op_less(STUB_ARGS );197 static EncodedJSValue JIT_STUB cti_op_lesseq(STUB_ARGS );198 static EncodedJSValue JIT_STUB cti_op_lshift(STUB_ARGS );199 static EncodedJSValue JIT_STUB cti_op_mod(STUB_ARGS );200 static EncodedJSValue JIT_STUB cti_op_mul(STUB_ARGS );201 static EncodedJSValue JIT_STUB cti_op_negate(STUB_ARGS );202 static EncodedJSValue JIT_STUB cti_op_neq(STUB_ARGS );203 static EncodedJSValue JIT_STUB cti_op_next_pname(STUB_ARGS );204 static EncodedJSValue JIT_STUB cti_op_not(STUB_ARGS );205 static EncodedJSValue JIT_STUB cti_op_nstricteq(STUB_ARGS );206 static EncodedJSValue JIT_STUB cti_op_pre_dec(STUB_ARGS );207 static EncodedJSValue JIT_STUB cti_op_pre_inc(STUB_ARGS );208 static EncodedJSValue JIT_STUB cti_op_resolve(STUB_ARGS );209 static EncodedJSValue JIT_STUB cti_op_resolve_base(STUB_ARGS );210 static EncodedJSValue JIT_STUB cti_op_resolve_global(STUB_ARGS );211 static EncodedJSValue JIT_STUB cti_op_resolve_skip(STUB_ARGS );212 static EncodedJSValue JIT_STUB cti_op_rshift(STUB_ARGS );213 static EncodedJSValue JIT_STUB cti_op_stricteq(STUB_ARGS );214 static EncodedJSValue JIT_STUB cti_op_strcat(STUB_ARGS );215 static EncodedJSValue JIT_STUB cti_op_to_primitive(STUB_ARGS );216 static EncodedJSValue JIT_STUB cti_op_sub(STUB_ARGS );217 static EncodedJSValue JIT_STUB cti_op_throw(STUB_ARGS );218 static EncodedJSValue JIT_STUB cti_op_to_jsnumber(STUB_ARGS );219 static EncodedJSValue JIT_STUB cti_op_typeof(STUB_ARGS );220 static EncodedJSValue JIT_STUB cti_op_urshift(STUB_ARGS );221 static EncodedJSValue JIT_STUB cti_vm_throw(STUB_ARGS );222 static VoidPtrPair JIT_STUB cti_op_call_arityCheck(STUB_ARGS );223 static VoidPtrPair JIT_STUB cti_op_post_dec(STUB_ARGS );224 static VoidPtrPair JIT_STUB cti_op_post_inc(STUB_ARGS );225 static VoidPtrPair JIT_STUB cti_op_resolve_func(STUB_ARGS );226 static VoidPtrPair JIT_STUB cti_op_resolve_with_base(STUB_ARGS );227 static int JIT_STUB cti_op_jless(STUB_ARGS );228 static int JIT_STUB cti_op_jtrue(STUB_ARGS );229 static int JIT_STUB cti_op_loop_if_less(STUB_ARGS );230 static int JIT_STUB cti_op_loop_if_lesseq(STUB_ARGS );231 static int JIT_STUB cti_op_loop_if_true(STUB_ARGS );232 static int JIT_STUB cti_op_load_varargs(STUB_ARGS );233 static int JIT_STUB cti_timeout_check(STUB_ARGS );234 static void JIT_STUB cti_op_create_arguments(STUB_ARGS );235 static void JIT_STUB cti_op_create_arguments_no_params(STUB_ARGS );236 static void JIT_STUB cti_op_debug(STUB_ARGS );237 static void JIT_STUB cti_op_end(STUB_ARGS );238 static void JIT_STUB cti_op_jmp_scopes(STUB_ARGS );239 static void JIT_STUB cti_op_pop_scope(STUB_ARGS );240 static void JIT_STUB cti_op_profile_did_call(STUB_ARGS );241 static void JIT_STUB cti_op_profile_will_call(STUB_ARGS );242 static void JIT_STUB cti_op_put_by_id(STUB_ARGS );243 static void JIT_STUB cti_op_put_by_id_fail(STUB_ARGS );244 static void JIT_STUB cti_op_put_by_id_generic(STUB_ARGS );245 static void JIT_STUB cti_op_put_by_id_second(STUB_ARGS );246 static void JIT_STUB cti_op_put_by_index(STUB_ARGS );247 static void JIT_STUB cti_op_put_by_val(STUB_ARGS );248 static void JIT_STUB cti_op_put_by_val_array(STUB_ARGS );249 static void JIT_STUB cti_op_put_by_val_byte_array(STUB_ARGS );250 static void JIT_STUB cti_op_put_getter(STUB_ARGS );251 static void JIT_STUB cti_op_put_setter(STUB_ARGS );252 static void JIT_STUB cti_op_ret_scopeChain(STUB_ARGS );253 static void JIT_STUB cti_op_tear_off_activation(STUB_ARGS );254 static void JIT_STUB cti_op_tear_off_arguments(STUB_ARGS );255 static void JIT_STUB cti_register_file_check(STUB_ARGS );256 static void* JIT_STUB cti_op_call_JSFunction(STUB_ARGS );257 static void* JIT_STUB cti_op_switch_char(STUB_ARGS );258 static void* JIT_STUB cti_op_switch_imm(STUB_ARGS );259 static void* JIT_STUB cti_op_switch_string(STUB_ARGS );260 static void* JIT_STUB cti_vm_dontLazyLinkCall(STUB_ARGS );261 static void* JIT_STUB cti_vm_lazyLinkCall(STUB_ARGS );182 static JSObject* JIT_STUB cti_op_construct_JSConstruct(STUB_ARGS_DECLARATION); 183 static JSObject* JIT_STUB cti_op_convert_this(STUB_ARGS_DECLARATION); 184 static JSObject* JIT_STUB cti_op_new_array(STUB_ARGS_DECLARATION); 185 static JSObject* JIT_STUB cti_op_new_error(STUB_ARGS_DECLARATION); 186 static JSObject* JIT_STUB cti_op_new_func(STUB_ARGS_DECLARATION); 187 static JSObject* JIT_STUB cti_op_new_func_exp(STUB_ARGS_DECLARATION); 188 static JSObject* JIT_STUB cti_op_new_object(STUB_ARGS_DECLARATION); 189 static JSObject* JIT_STUB cti_op_new_regexp(STUB_ARGS_DECLARATION); 190 static JSObject* JIT_STUB cti_op_push_activation(STUB_ARGS_DECLARATION); 191 static JSObject* JIT_STUB cti_op_push_new_scope(STUB_ARGS_DECLARATION); 192 static JSObject* JIT_STUB cti_op_push_scope(STUB_ARGS_DECLARATION); 193 static JSPropertyNameIterator* JIT_STUB cti_op_get_pnames(STUB_ARGS_DECLARATION); 194 static EncodedJSValue JIT_STUB cti_op_add(STUB_ARGS_DECLARATION); 195 static EncodedJSValue JIT_STUB cti_op_bitand(STUB_ARGS_DECLARATION); 196 static EncodedJSValue JIT_STUB cti_op_bitnot(STUB_ARGS_DECLARATION); 197 static EncodedJSValue JIT_STUB cti_op_bitor(STUB_ARGS_DECLARATION); 198 static EncodedJSValue JIT_STUB cti_op_bitxor(STUB_ARGS_DECLARATION); 199 static EncodedJSValue JIT_STUB cti_op_call_NotJSFunction(STUB_ARGS_DECLARATION); 200 static EncodedJSValue JIT_STUB cti_op_call_eval(STUB_ARGS_DECLARATION); 201 static EncodedJSValue JIT_STUB cti_op_construct_NotJSConstruct(STUB_ARGS_DECLARATION); 202 static EncodedJSValue JIT_STUB cti_op_del_by_id(STUB_ARGS_DECLARATION); 203 static EncodedJSValue JIT_STUB cti_op_del_by_val(STUB_ARGS_DECLARATION); 204 static EncodedJSValue JIT_STUB cti_op_div(STUB_ARGS_DECLARATION); 205 static EncodedJSValue JIT_STUB cti_op_eq(STUB_ARGS_DECLARATION); 206 static EncodedJSValue JIT_STUB cti_op_get_by_id(STUB_ARGS_DECLARATION); 207 static EncodedJSValue JIT_STUB cti_op_get_by_id_array_fail(STUB_ARGS_DECLARATION); 208 static EncodedJSValue JIT_STUB cti_op_get_by_id_generic(STUB_ARGS_DECLARATION); 209 static EncodedJSValue JIT_STUB cti_op_get_by_id_proto_fail(STUB_ARGS_DECLARATION); 210 static EncodedJSValue JIT_STUB cti_op_get_by_id_proto_list(STUB_ARGS_DECLARATION); 211 static EncodedJSValue JIT_STUB cti_op_get_by_id_proto_list_full(STUB_ARGS_DECLARATION); 212 static EncodedJSValue JIT_STUB cti_op_get_by_id_second(STUB_ARGS_DECLARATION); 213 static EncodedJSValue JIT_STUB cti_op_get_by_id_self_fail(STUB_ARGS_DECLARATION); 214 static EncodedJSValue JIT_STUB cti_op_get_by_id_string_fail(STUB_ARGS_DECLARATION); 215 static EncodedJSValue JIT_STUB cti_op_get_by_val(STUB_ARGS_DECLARATION); 216 static EncodedJSValue JIT_STUB cti_op_get_by_val_byte_array(STUB_ARGS_DECLARATION); 217 static EncodedJSValue JIT_STUB cti_op_get_by_val_string(STUB_ARGS_DECLARATION); 218 static EncodedJSValue JIT_STUB cti_op_in(STUB_ARGS_DECLARATION); 219 static EncodedJSValue JIT_STUB cti_op_instanceof(STUB_ARGS_DECLARATION); 220 static EncodedJSValue JIT_STUB cti_op_is_boolean(STUB_ARGS_DECLARATION); 221 static EncodedJSValue JIT_STUB cti_op_is_function(STUB_ARGS_DECLARATION); 222 static EncodedJSValue JIT_STUB cti_op_is_number(STUB_ARGS_DECLARATION); 223 static EncodedJSValue JIT_STUB cti_op_is_object(STUB_ARGS_DECLARATION); 224 static EncodedJSValue JIT_STUB cti_op_is_string(STUB_ARGS_DECLARATION); 225 static EncodedJSValue JIT_STUB cti_op_is_undefined(STUB_ARGS_DECLARATION); 226 static EncodedJSValue JIT_STUB cti_op_less(STUB_ARGS_DECLARATION); 227 static EncodedJSValue JIT_STUB cti_op_lesseq(STUB_ARGS_DECLARATION); 228 static EncodedJSValue JIT_STUB cti_op_lshift(STUB_ARGS_DECLARATION); 229 static EncodedJSValue JIT_STUB cti_op_mod(STUB_ARGS_DECLARATION); 230 static EncodedJSValue JIT_STUB cti_op_mul(STUB_ARGS_DECLARATION); 231 static EncodedJSValue JIT_STUB cti_op_negate(STUB_ARGS_DECLARATION); 232 static EncodedJSValue JIT_STUB cti_op_neq(STUB_ARGS_DECLARATION); 233 static EncodedJSValue JIT_STUB cti_op_next_pname(STUB_ARGS_DECLARATION); 234 static EncodedJSValue JIT_STUB cti_op_not(STUB_ARGS_DECLARATION); 235 static EncodedJSValue JIT_STUB cti_op_nstricteq(STUB_ARGS_DECLARATION); 236 static EncodedJSValue JIT_STUB cti_op_pre_dec(STUB_ARGS_DECLARATION); 237 static EncodedJSValue JIT_STUB cti_op_pre_inc(STUB_ARGS_DECLARATION); 238 static EncodedJSValue JIT_STUB cti_op_resolve(STUB_ARGS_DECLARATION); 239 static EncodedJSValue JIT_STUB cti_op_resolve_base(STUB_ARGS_DECLARATION); 240 static EncodedJSValue JIT_STUB cti_op_resolve_global(STUB_ARGS_DECLARATION); 241 static EncodedJSValue JIT_STUB cti_op_resolve_skip(STUB_ARGS_DECLARATION); 242 static EncodedJSValue JIT_STUB cti_op_rshift(STUB_ARGS_DECLARATION); 243 static EncodedJSValue JIT_STUB cti_op_stricteq(STUB_ARGS_DECLARATION); 244 static EncodedJSValue JIT_STUB cti_op_strcat(STUB_ARGS_DECLARATION); 245 static EncodedJSValue JIT_STUB cti_op_to_primitive(STUB_ARGS_DECLARATION); 246 static EncodedJSValue JIT_STUB cti_op_sub(STUB_ARGS_DECLARATION); 247 static EncodedJSValue JIT_STUB cti_op_throw(STUB_ARGS_DECLARATION); 248 static EncodedJSValue JIT_STUB cti_op_to_jsnumber(STUB_ARGS_DECLARATION); 249 static EncodedJSValue JIT_STUB cti_op_typeof(STUB_ARGS_DECLARATION); 250 static EncodedJSValue JIT_STUB cti_op_urshift(STUB_ARGS_DECLARATION); 251 static EncodedJSValue JIT_STUB cti_vm_throw(STUB_ARGS_DECLARATION); 252 static VoidPtrPair JIT_STUB cti_op_call_arityCheck(STUB_ARGS_DECLARATION); 253 static VoidPtrPair JIT_STUB cti_op_post_dec(STUB_ARGS_DECLARATION); 254 static VoidPtrPair JIT_STUB cti_op_post_inc(STUB_ARGS_DECLARATION); 255 static VoidPtrPair JIT_STUB cti_op_resolve_func(STUB_ARGS_DECLARATION); 256 static VoidPtrPair JIT_STUB cti_op_resolve_with_base(STUB_ARGS_DECLARATION); 257 static int JIT_STUB cti_op_jless(STUB_ARGS_DECLARATION); 258 static int JIT_STUB cti_op_jtrue(STUB_ARGS_DECLARATION); 259 static int JIT_STUB cti_op_loop_if_less(STUB_ARGS_DECLARATION); 260 static int JIT_STUB cti_op_loop_if_lesseq(STUB_ARGS_DECLARATION); 261 static int JIT_STUB cti_op_loop_if_true(STUB_ARGS_DECLARATION); 262 static int JIT_STUB cti_op_load_varargs(STUB_ARGS_DECLARATION); 263 static int JIT_STUB cti_timeout_check(STUB_ARGS_DECLARATION); 264 static void JIT_STUB cti_op_create_arguments(STUB_ARGS_DECLARATION); 265 static void JIT_STUB cti_op_create_arguments_no_params(STUB_ARGS_DECLARATION); 266 static void JIT_STUB cti_op_debug(STUB_ARGS_DECLARATION); 267 static void JIT_STUB cti_op_end(STUB_ARGS_DECLARATION); 268 static void JIT_STUB cti_op_jmp_scopes(STUB_ARGS_DECLARATION); 269 static void JIT_STUB cti_op_pop_scope(STUB_ARGS_DECLARATION); 270 static void JIT_STUB cti_op_profile_did_call(STUB_ARGS_DECLARATION); 271 static void JIT_STUB cti_op_profile_will_call(STUB_ARGS_DECLARATION); 272 static void JIT_STUB cti_op_put_by_id(STUB_ARGS_DECLARATION); 273 static void JIT_STUB cti_op_put_by_id_fail(STUB_ARGS_DECLARATION); 274 static void JIT_STUB cti_op_put_by_id_generic(STUB_ARGS_DECLARATION); 275 static void JIT_STUB cti_op_put_by_id_second(STUB_ARGS_DECLARATION); 276 static void JIT_STUB cti_op_put_by_index(STUB_ARGS_DECLARATION); 277 static void JIT_STUB cti_op_put_by_val(STUB_ARGS_DECLARATION); 278 static void JIT_STUB cti_op_put_by_val_array(STUB_ARGS_DECLARATION); 279 static void JIT_STUB cti_op_put_by_val_byte_array(STUB_ARGS_DECLARATION); 280 static void JIT_STUB cti_op_put_getter(STUB_ARGS_DECLARATION); 281 static void JIT_STUB cti_op_put_setter(STUB_ARGS_DECLARATION); 282 static void JIT_STUB cti_op_ret_scopeChain(STUB_ARGS_DECLARATION); 283 static void JIT_STUB cti_op_tear_off_activation(STUB_ARGS_DECLARATION); 284 static void JIT_STUB cti_op_tear_off_arguments(STUB_ARGS_DECLARATION); 285 static void JIT_STUB cti_register_file_check(STUB_ARGS_DECLARATION); 286 static void* JIT_STUB cti_op_call_JSFunction(STUB_ARGS_DECLARATION); 287 static void* JIT_STUB cti_op_switch_char(STUB_ARGS_DECLARATION); 288 static void* JIT_STUB cti_op_switch_imm(STUB_ARGS_DECLARATION); 289 static void* JIT_STUB cti_op_switch_string(STUB_ARGS_DECLARATION); 290 static void* JIT_STUB cti_vm_dontLazyLinkCall(STUB_ARGS_DECLARATION); 291 static void* JIT_STUB cti_vm_lazyLinkCall(STUB_ARGS_DECLARATION); 262 292 263 293 static void tryCacheGetByID(CallFrame*, CodeBlock*, void* returnAddress, JSValue baseValue, const Identifier& propertyName, const PropertySlot&);
Note:
See TracChangeset
for help on using the changeset viewer.