| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 2707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2718 __ bind(&miss); | 2718 __ bind(&miss); |
| 2719 __ mov(ecx, Immediate(name)); // restore name | 2719 __ mov(ecx, Immediate(name)); // restore name |
| 2720 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); | 2720 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); |
| 2721 __ jmp(ic, RelocInfo::CODE_TARGET); | 2721 __ jmp(ic, RelocInfo::CODE_TARGET); |
| 2722 | 2722 |
| 2723 // Return the generated code. | 2723 // Return the generated code. |
| 2724 return GetCode(transition.is_null() ? FIELD : MAP_TRANSITION, name); | 2724 return GetCode(transition.is_null() ? FIELD : MAP_TRANSITION, name); |
| 2725 } | 2725 } |
| 2726 | 2726 |
| 2727 | 2727 |
| 2728 MaybeObject* StoreStubCompiler::CompileStoreCallback(JSObject* object, | 2728 Handle<Code> StoreStubCompiler::CompileStoreCallback( |
| 2729 AccessorInfo* callback, | 2729 Handle<JSObject> object, |
| 2730 String* name) { | 2730 Handle<AccessorInfo> callback, |
| 2731 Handle<String> name) { |
| 2731 // ----------- S t a t e ------------- | 2732 // ----------- S t a t e ------------- |
| 2732 // -- eax : value | 2733 // -- eax : value |
| 2733 // -- ecx : name | 2734 // -- ecx : name |
| 2734 // -- edx : receiver | 2735 // -- edx : receiver |
| 2735 // -- esp[0] : return address | 2736 // -- esp[0] : return address |
| 2736 // ----------------------------------- | 2737 // ----------------------------------- |
| 2737 Label miss; | 2738 Label miss; |
| 2738 | 2739 |
| 2739 // Check that the object isn't a smi. | 2740 // Check that the object isn't a smi. |
| 2740 __ JumpIfSmi(edx, &miss); | 2741 __ JumpIfSmi(edx, &miss); |
| 2741 | 2742 |
| 2742 // Check that the map of the object hasn't changed. | 2743 // Check that the map of the object hasn't changed. |
| 2743 __ cmp(FieldOperand(edx, HeapObject::kMapOffset), | 2744 __ cmp(FieldOperand(edx, HeapObject::kMapOffset), |
| 2744 Immediate(Handle<Map>(object->map()))); | 2745 Immediate(Handle<Map>(object->map()))); |
| 2745 __ j(not_equal, &miss); | 2746 __ j(not_equal, &miss); |
| 2746 | 2747 |
| 2747 // Perform global security token check if needed. | 2748 // Perform global security token check if needed. |
| 2748 if (object->IsJSGlobalProxy()) { | 2749 if (object->IsJSGlobalProxy()) { |
| 2749 __ CheckAccessGlobalProxy(edx, ebx, &miss); | 2750 __ CheckAccessGlobalProxy(edx, ebx, &miss); |
| 2750 } | 2751 } |
| 2751 | 2752 |
| 2752 // Stub never generated for non-global objects that require access | 2753 // Stub never generated for non-global objects that require access |
| 2753 // checks. | 2754 // checks. |
| 2754 ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded()); | 2755 ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded()); |
| 2755 | 2756 |
| 2756 __ pop(ebx); // remove the return address | 2757 __ pop(ebx); // remove the return address |
| 2757 __ push(edx); // receiver | 2758 __ push(edx); // receiver |
| 2758 __ push(Immediate(Handle<AccessorInfo>(callback))); // callback info | 2759 __ push(Immediate(callback)); // callback info |
| 2759 __ push(ecx); // name | 2760 __ push(ecx); // name |
| 2760 __ push(eax); // value | 2761 __ push(eax); // value |
| 2761 __ push(ebx); // restore return address | 2762 __ push(ebx); // restore return address |
| 2762 | 2763 |
| 2763 // Do tail-call to the runtime system. | 2764 // Do tail-call to the runtime system. |
| 2764 ExternalReference store_callback_property = | 2765 ExternalReference store_callback_property = |
| 2765 ExternalReference(IC_Utility(IC::kStoreCallbackProperty), isolate()); | 2766 ExternalReference(IC_Utility(IC::kStoreCallbackProperty), isolate()); |
| 2766 __ TailCallExternalReference(store_callback_property, 4, 1); | 2767 __ TailCallExternalReference(store_callback_property, 4, 1); |
| 2767 | 2768 |
| 2768 // Handle store cache miss. | 2769 // Handle store cache miss. |
| 2769 __ bind(&miss); | 2770 __ bind(&miss); |
| 2770 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); | 2771 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); |
| 2771 __ jmp(ic, RelocInfo::CODE_TARGET); | 2772 __ jmp(ic, RelocInfo::CODE_TARGET); |
| 2772 | 2773 |
| 2773 // Return the generated code. | 2774 // Return the generated code. |
| 2774 return TryGetCode(CALLBACKS, name); | 2775 return GetCode(CALLBACKS, name); |
| 2775 } | 2776 } |
| 2776 | 2777 |
| 2777 | 2778 |
| 2778 MaybeObject* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver, | 2779 Handle<Code> StoreStubCompiler::CompileStoreInterceptor( |
| 2779 String* name) { | 2780 Handle<JSObject> receiver, |
| 2781 Handle<String> name) { |
| 2780 // ----------- S t a t e ------------- | 2782 // ----------- S t a t e ------------- |
| 2781 // -- eax : value | 2783 // -- eax : value |
| 2782 // -- ecx : name | 2784 // -- ecx : name |
| 2783 // -- edx : receiver | 2785 // -- edx : receiver |
| 2784 // -- esp[0] : return address | 2786 // -- esp[0] : return address |
| 2785 // ----------------------------------- | 2787 // ----------------------------------- |
| 2786 Label miss; | 2788 Label miss; |
| 2787 | 2789 |
| 2788 // Check that the object isn't a smi. | 2790 // Check that the object isn't a smi. |
| 2789 __ JumpIfSmi(edx, &miss); | 2791 __ JumpIfSmi(edx, &miss); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 2813 ExternalReference store_ic_property = | 2815 ExternalReference store_ic_property = |
| 2814 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty), isolate()); | 2816 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty), isolate()); |
| 2815 __ TailCallExternalReference(store_ic_property, 4, 1); | 2817 __ TailCallExternalReference(store_ic_property, 4, 1); |
| 2816 | 2818 |
| 2817 // Handle store cache miss. | 2819 // Handle store cache miss. |
| 2818 __ bind(&miss); | 2820 __ bind(&miss); |
| 2819 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); | 2821 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); |
| 2820 __ jmp(ic, RelocInfo::CODE_TARGET); | 2822 __ jmp(ic, RelocInfo::CODE_TARGET); |
| 2821 | 2823 |
| 2822 // Return the generated code. | 2824 // Return the generated code. |
| 2823 return TryGetCode(INTERCEPTOR, name); | 2825 return GetCode(INTERCEPTOR, name); |
| 2824 } | 2826 } |
| 2825 | 2827 |
| 2826 | 2828 |
| 2827 Handle<Code> StoreStubCompiler::CompileStoreGlobal( | 2829 Handle<Code> StoreStubCompiler::CompileStoreGlobal( |
| 2828 Handle<GlobalObject> object, | 2830 Handle<GlobalObject> object, |
| 2829 Handle<JSGlobalPropertyCell> cell, | 2831 Handle<JSGlobalPropertyCell> cell, |
| 2830 Handle<String> name) { | 2832 Handle<String> name) { |
| 2831 // ----------- S t a t e ------------- | 2833 // ----------- S t a t e ------------- |
| 2832 // -- eax : value | 2834 // -- eax : value |
| 2833 // -- ecx : name | 2835 // -- ecx : name |
| (...skipping 1373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4207 Handle<Code> ic_miss = masm->isolate()->builtins()->KeyedStoreIC_Miss(); | 4209 Handle<Code> ic_miss = masm->isolate()->builtins()->KeyedStoreIC_Miss(); |
| 4208 __ jmp(ic_miss, RelocInfo::CODE_TARGET); | 4210 __ jmp(ic_miss, RelocInfo::CODE_TARGET); |
| 4209 } | 4211 } |
| 4210 | 4212 |
| 4211 | 4213 |
| 4212 #undef __ | 4214 #undef __ |
| 4213 | 4215 |
| 4214 } } // namespace v8::internal | 4216 } } // namespace v8::internal |
| 4215 | 4217 |
| 4216 #endif // V8_TARGET_ARCH_IA32 | 4218 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |