| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 1513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1524 Register reg = CheckPrototypes(object, a0, holder, a1, a3, t0, name, &miss); | 1524 Register reg = CheckPrototypes(object, a0, holder, a1, a3, t0, name, &miss); |
| 1525 GenerateFastPropertyLoad(masm(), a1, reg, holder, index); | 1525 GenerateFastPropertyLoad(masm(), a1, reg, holder, index); |
| 1526 | 1526 |
| 1527 GenerateCallFunction(masm(), object, arguments(), &miss, extra_state_); | 1527 GenerateCallFunction(masm(), object, arguments(), &miss, extra_state_); |
| 1528 | 1528 |
| 1529 // Handle call cache miss. | 1529 // Handle call cache miss. |
| 1530 __ bind(&miss); | 1530 __ bind(&miss); |
| 1531 GenerateMissBranch(); | 1531 GenerateMissBranch(); |
| 1532 | 1532 |
| 1533 // Return the generated code. | 1533 // Return the generated code. |
| 1534 return GetCode(FIELD, name); | 1534 return GetCode(Code::FIELD, name); |
| 1535 } | 1535 } |
| 1536 | 1536 |
| 1537 | 1537 |
| 1538 Handle<Code> CallStubCompiler::CompileArrayPushCall( | 1538 Handle<Code> CallStubCompiler::CompileArrayPushCall( |
| 1539 Handle<Object> object, | 1539 Handle<Object> object, |
| 1540 Handle<JSObject> holder, | 1540 Handle<JSObject> holder, |
| 1541 Handle<JSGlobalPropertyCell> cell, | 1541 Handle<JSGlobalPropertyCell> cell, |
| 1542 Handle<JSFunction> function, | 1542 Handle<JSFunction> function, |
| 1543 Handle<String> name) { | 1543 Handle<String> name) { |
| 1544 // ----------- S t a t e ------------- | 1544 // ----------- S t a t e ------------- |
| (...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2071 // because the function makes no use of it. | 2071 // because the function makes no use of it. |
| 2072 __ bind(&slow); | 2072 __ bind(&slow); |
| 2073 __ InvokeFunction( | 2073 __ InvokeFunction( |
| 2074 function, arguments(), JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); | 2074 function, arguments(), JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); |
| 2075 | 2075 |
| 2076 __ bind(&miss); | 2076 __ bind(&miss); |
| 2077 // a2: function name. | 2077 // a2: function name. |
| 2078 GenerateMissBranch(); | 2078 GenerateMissBranch(); |
| 2079 | 2079 |
| 2080 // Return the generated code. | 2080 // Return the generated code. |
| 2081 return cell.is_null() ? GetCode(function) : GetCode(NORMAL, name); | 2081 return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); |
| 2082 } | 2082 } |
| 2083 | 2083 |
| 2084 | 2084 |
| 2085 Handle<Code> CallStubCompiler::CompileMathFloorCall( | 2085 Handle<Code> CallStubCompiler::CompileMathFloorCall( |
| 2086 Handle<Object> object, | 2086 Handle<Object> object, |
| 2087 Handle<JSObject> holder, | 2087 Handle<JSObject> holder, |
| 2088 Handle<JSGlobalPropertyCell> cell, | 2088 Handle<JSGlobalPropertyCell> cell, |
| 2089 Handle<JSFunction> function, | 2089 Handle<JSFunction> function, |
| 2090 Handle<String> name) { | 2090 Handle<String> name) { |
| 2091 // ----------- S t a t e ------------- | 2091 // ----------- S t a t e ------------- |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2205 // Tail call the full function. We do not have to patch the receiver | 2205 // Tail call the full function. We do not have to patch the receiver |
| 2206 // because the function makes no use of it. | 2206 // because the function makes no use of it. |
| 2207 __ InvokeFunction( | 2207 __ InvokeFunction( |
| 2208 function, arguments(), JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); | 2208 function, arguments(), JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); |
| 2209 | 2209 |
| 2210 __ bind(&miss); | 2210 __ bind(&miss); |
| 2211 // a2: function name. | 2211 // a2: function name. |
| 2212 GenerateMissBranch(); | 2212 GenerateMissBranch(); |
| 2213 | 2213 |
| 2214 // Return the generated code. | 2214 // Return the generated code. |
| 2215 return cell.is_null() ? GetCode(function) : GetCode(NORMAL, name); | 2215 return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); |
| 2216 } | 2216 } |
| 2217 | 2217 |
| 2218 | 2218 |
| 2219 Handle<Code> CallStubCompiler::CompileMathAbsCall( | 2219 Handle<Code> CallStubCompiler::CompileMathAbsCall( |
| 2220 Handle<Object> object, | 2220 Handle<Object> object, |
| 2221 Handle<JSObject> holder, | 2221 Handle<JSObject> holder, |
| 2222 Handle<JSGlobalPropertyCell> cell, | 2222 Handle<JSGlobalPropertyCell> cell, |
| 2223 Handle<JSFunction> function, | 2223 Handle<JSFunction> function, |
| 2224 Handle<String> name) { | 2224 Handle<String> name) { |
| 2225 // ----------- S t a t e ------------- | 2225 // ----------- S t a t e ------------- |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2306 // because the function makes no use of it. | 2306 // because the function makes no use of it. |
| 2307 __ bind(&slow); | 2307 __ bind(&slow); |
| 2308 __ InvokeFunction( | 2308 __ InvokeFunction( |
| 2309 function, arguments(), JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); | 2309 function, arguments(), JUMP_FUNCTION, NullCallWrapper(), CALL_AS_METHOD); |
| 2310 | 2310 |
| 2311 __ bind(&miss); | 2311 __ bind(&miss); |
| 2312 // a2: function name. | 2312 // a2: function name. |
| 2313 GenerateMissBranch(); | 2313 GenerateMissBranch(); |
| 2314 | 2314 |
| 2315 // Return the generated code. | 2315 // Return the generated code. |
| 2316 return cell.is_null() ? GetCode(function) : GetCode(NORMAL, name); | 2316 return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name); |
| 2317 } | 2317 } |
| 2318 | 2318 |
| 2319 | 2319 |
| 2320 Handle<Code> CallStubCompiler::CompileFastApiCall( | 2320 Handle<Code> CallStubCompiler::CompileFastApiCall( |
| 2321 const CallOptimization& optimization, | 2321 const CallOptimization& optimization, |
| 2322 Handle<Object> object, | 2322 Handle<Object> object, |
| 2323 Handle<JSObject> holder, | 2323 Handle<JSObject> holder, |
| 2324 Handle<JSGlobalPropertyCell> cell, | 2324 Handle<JSGlobalPropertyCell> cell, |
| 2325 Handle<JSFunction> function, | 2325 Handle<JSFunction> function, |
| 2326 Handle<String> name) { | 2326 Handle<String> name) { |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2527 // Restore receiver. | 2527 // Restore receiver. |
| 2528 __ lw(a0, MemOperand(sp, argc * kPointerSize)); | 2528 __ lw(a0, MemOperand(sp, argc * kPointerSize)); |
| 2529 | 2529 |
| 2530 GenerateCallFunction(masm(), object, arguments(), &miss, extra_state_); | 2530 GenerateCallFunction(masm(), object, arguments(), &miss, extra_state_); |
| 2531 | 2531 |
| 2532 // Handle call cache miss. | 2532 // Handle call cache miss. |
| 2533 __ bind(&miss); | 2533 __ bind(&miss); |
| 2534 GenerateMissBranch(); | 2534 GenerateMissBranch(); |
| 2535 | 2535 |
| 2536 // Return the generated code. | 2536 // Return the generated code. |
| 2537 return GetCode(INTERCEPTOR, name); | 2537 return GetCode(Code::INTERCEPTOR, name); |
| 2538 } | 2538 } |
| 2539 | 2539 |
| 2540 | 2540 |
| 2541 Handle<Code> CallStubCompiler::CompileCallGlobal( | 2541 Handle<Code> CallStubCompiler::CompileCallGlobal( |
| 2542 Handle<JSObject> object, | 2542 Handle<JSObject> object, |
| 2543 Handle<GlobalObject> holder, | 2543 Handle<GlobalObject> holder, |
| 2544 Handle<JSGlobalPropertyCell> cell, | 2544 Handle<JSGlobalPropertyCell> cell, |
| 2545 Handle<JSFunction> function, | 2545 Handle<JSFunction> function, |
| 2546 Handle<String> name) { | 2546 Handle<String> name) { |
| 2547 // ----------- S t a t e ------------- | 2547 // ----------- S t a t e ------------- |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2586 __ lw(a3, FieldMemOperand(a1, JSFunction::kCodeEntryOffset)); | 2586 __ lw(a3, FieldMemOperand(a1, JSFunction::kCodeEntryOffset)); |
| 2587 __ InvokeCode(a3, expected, arguments(), JUMP_FUNCTION, | 2587 __ InvokeCode(a3, expected, arguments(), JUMP_FUNCTION, |
| 2588 NullCallWrapper(), call_kind); | 2588 NullCallWrapper(), call_kind); |
| 2589 | 2589 |
| 2590 // Handle call cache miss. | 2590 // Handle call cache miss. |
| 2591 __ bind(&miss); | 2591 __ bind(&miss); |
| 2592 __ IncrementCounter(counters->call_global_inline_miss(), 1, a1, a3); | 2592 __ IncrementCounter(counters->call_global_inline_miss(), 1, a1, a3); |
| 2593 GenerateMissBranch(); | 2593 GenerateMissBranch(); |
| 2594 | 2594 |
| 2595 // Return the generated code. | 2595 // Return the generated code. |
| 2596 return GetCode(NORMAL, name); | 2596 return GetCode(Code::NORMAL, name); |
| 2597 } | 2597 } |
| 2598 | 2598 |
| 2599 | 2599 |
| 2600 Handle<Code> StoreStubCompiler::CompileStoreField(Handle<JSObject> object, | 2600 Handle<Code> StoreStubCompiler::CompileStoreField(Handle<JSObject> object, |
| 2601 int index, | 2601 int index, |
| 2602 Handle<Map> transition, | 2602 Handle<Map> transition, |
| 2603 Handle<String> name) { | 2603 Handle<String> name) { |
| 2604 // ----------- S t a t e ------------- | 2604 // ----------- S t a t e ------------- |
| 2605 // -- a0 : value | 2605 // -- a0 : value |
| 2606 // -- a1 : receiver | 2606 // -- a1 : receiver |
| 2607 // -- a2 : name | 2607 // -- a2 : name |
| 2608 // -- ra : return address | 2608 // -- ra : return address |
| 2609 // ----------------------------------- | 2609 // ----------------------------------- |
| 2610 Label miss; | 2610 Label miss; |
| 2611 | 2611 |
| 2612 // Name register might be clobbered. | 2612 // Name register might be clobbered. |
| 2613 GenerateStoreField(masm(), | 2613 GenerateStoreField(masm(), |
| 2614 object, | 2614 object, |
| 2615 index, | 2615 index, |
| 2616 transition, | 2616 transition, |
| 2617 name, | 2617 name, |
| 2618 a1, a2, a3, t0, | 2618 a1, a2, a3, t0, |
| 2619 &miss); | 2619 &miss); |
| 2620 __ bind(&miss); | 2620 __ bind(&miss); |
| 2621 __ li(a2, Operand(Handle<String>(name))); // Restore name. | 2621 __ li(a2, Operand(Handle<String>(name))); // Restore name. |
| 2622 Handle<Code> ic = masm()->isolate()->builtins()->Builtins::StoreIC_Miss(); | 2622 Handle<Code> ic = masm()->isolate()->builtins()->Builtins::StoreIC_Miss(); |
| 2623 __ Jump(ic, RelocInfo::CODE_TARGET); | 2623 __ Jump(ic, RelocInfo::CODE_TARGET); |
| 2624 | 2624 |
| 2625 // Return the generated code. | 2625 // Return the generated code. |
| 2626 return GetCode(transition.is_null() ? FIELD : MAP_TRANSITION, name); | 2626 return GetCode(transition.is_null() |
| 2627 ? Code::FIELD |
| 2628 : Code::MAP_TRANSITION, name); |
| 2627 } | 2629 } |
| 2628 | 2630 |
| 2629 | 2631 |
| 2630 Handle<Code> StoreStubCompiler::CompileStoreCallback( | 2632 Handle<Code> StoreStubCompiler::CompileStoreCallback( |
| 2631 Handle<JSObject> object, | 2633 Handle<JSObject> object, |
| 2632 Handle<AccessorInfo> callback, | 2634 Handle<AccessorInfo> callback, |
| 2633 Handle<String> name) { | 2635 Handle<String> name) { |
| 2634 // ----------- S t a t e ------------- | 2636 // ----------- S t a t e ------------- |
| 2635 // -- a0 : value | 2637 // -- a0 : value |
| 2636 // -- a1 : receiver | 2638 // -- a1 : receiver |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2661 ExternalReference(IC_Utility(IC::kStoreCallbackProperty), | 2663 ExternalReference(IC_Utility(IC::kStoreCallbackProperty), |
| 2662 masm()->isolate()); | 2664 masm()->isolate()); |
| 2663 __ TailCallExternalReference(store_callback_property, 4, 1); | 2665 __ TailCallExternalReference(store_callback_property, 4, 1); |
| 2664 | 2666 |
| 2665 // Handle store cache miss. | 2667 // Handle store cache miss. |
| 2666 __ bind(&miss); | 2668 __ bind(&miss); |
| 2667 Handle<Code> ic = masm()->isolate()->builtins()->StoreIC_Miss(); | 2669 Handle<Code> ic = masm()->isolate()->builtins()->StoreIC_Miss(); |
| 2668 __ Jump(ic, RelocInfo::CODE_TARGET); | 2670 __ Jump(ic, RelocInfo::CODE_TARGET); |
| 2669 | 2671 |
| 2670 // Return the generated code. | 2672 // Return the generated code. |
| 2671 return GetCode(CALLBACKS, name); | 2673 return GetCode(Code::CALLBACKS, name); |
| 2672 } | 2674 } |
| 2673 | 2675 |
| 2674 | 2676 |
| 2675 Handle<Code> StoreStubCompiler::CompileStoreViaSetter( | 2677 Handle<Code> StoreStubCompiler::CompileStoreViaSetter( |
| 2676 Handle<JSObject> receiver, | 2678 Handle<JSObject> receiver, |
| 2677 Handle<JSFunction> setter, | 2679 Handle<JSFunction> setter, |
| 2678 Handle<String> name) { | 2680 Handle<String> name) { |
| 2679 // ----------- S t a t e ------------- | 2681 // ----------- S t a t e ------------- |
| 2680 // -- a0 : value | 2682 // -- a0 : value |
| 2681 // -- a1 : receiver | 2683 // -- a1 : receiver |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2707 // Restore context register. | 2709 // Restore context register. |
| 2708 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); | 2710 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
| 2709 } | 2711 } |
| 2710 __ Ret(); | 2712 __ Ret(); |
| 2711 | 2713 |
| 2712 __ bind(&miss); | 2714 __ bind(&miss); |
| 2713 Handle<Code> ic = masm()->isolate()->builtins()->StoreIC_Miss(); | 2715 Handle<Code> ic = masm()->isolate()->builtins()->StoreIC_Miss(); |
| 2714 __ Jump(ic, RelocInfo::CODE_TARGET); | 2716 __ Jump(ic, RelocInfo::CODE_TARGET); |
| 2715 | 2717 |
| 2716 // Return the generated code. | 2718 // Return the generated code. |
| 2717 return GetCode(CALLBACKS, name); | 2719 return GetCode(Code::CALLBACKS, name); |
| 2718 } | 2720 } |
| 2719 | 2721 |
| 2720 | 2722 |
| 2721 Handle<Code> StoreStubCompiler::CompileStoreInterceptor( | 2723 Handle<Code> StoreStubCompiler::CompileStoreInterceptor( |
| 2722 Handle<JSObject> receiver, | 2724 Handle<JSObject> receiver, |
| 2723 Handle<String> name) { | 2725 Handle<String> name) { |
| 2724 // ----------- S t a t e ------------- | 2726 // ----------- S t a t e ------------- |
| 2725 // -- a0 : value | 2727 // -- a0 : value |
| 2726 // -- a1 : receiver | 2728 // -- a1 : receiver |
| 2727 // -- a2 : name | 2729 // -- a2 : name |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2752 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty), | 2754 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty), |
| 2753 masm()->isolate()); | 2755 masm()->isolate()); |
| 2754 __ TailCallExternalReference(store_ic_property, 4, 1); | 2756 __ TailCallExternalReference(store_ic_property, 4, 1); |
| 2755 | 2757 |
| 2756 // Handle store cache miss. | 2758 // Handle store cache miss. |
| 2757 __ bind(&miss); | 2759 __ bind(&miss); |
| 2758 Handle<Code> ic = masm()->isolate()->builtins()->Builtins::StoreIC_Miss(); | 2760 Handle<Code> ic = masm()->isolate()->builtins()->Builtins::StoreIC_Miss(); |
| 2759 __ Jump(ic, RelocInfo::CODE_TARGET); | 2761 __ Jump(ic, RelocInfo::CODE_TARGET); |
| 2760 | 2762 |
| 2761 // Return the generated code. | 2763 // Return the generated code. |
| 2762 return GetCode(INTERCEPTOR, name); | 2764 return GetCode(Code::INTERCEPTOR, name); |
| 2763 } | 2765 } |
| 2764 | 2766 |
| 2765 | 2767 |
| 2766 Handle<Code> StoreStubCompiler::CompileStoreGlobal( | 2768 Handle<Code> StoreStubCompiler::CompileStoreGlobal( |
| 2767 Handle<GlobalObject> object, | 2769 Handle<GlobalObject> object, |
| 2768 Handle<JSGlobalPropertyCell> cell, | 2770 Handle<JSGlobalPropertyCell> cell, |
| 2769 Handle<String> name) { | 2771 Handle<String> name) { |
| 2770 // ----------- S t a t e ------------- | 2772 // ----------- S t a t e ------------- |
| 2771 // -- a0 : value | 2773 // -- a0 : value |
| 2772 // -- a1 : receiver | 2774 // -- a1 : receiver |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2797 __ IncrementCounter(counters->named_store_global_inline(), 1, a1, a3); | 2799 __ IncrementCounter(counters->named_store_global_inline(), 1, a1, a3); |
| 2798 __ Ret(); | 2800 __ Ret(); |
| 2799 | 2801 |
| 2800 // Handle store cache miss. | 2802 // Handle store cache miss. |
| 2801 __ bind(&miss); | 2803 __ bind(&miss); |
| 2802 __ IncrementCounter(counters->named_store_global_inline_miss(), 1, a1, a3); | 2804 __ IncrementCounter(counters->named_store_global_inline_miss(), 1, a1, a3); |
| 2803 Handle<Code> ic = masm()->isolate()->builtins()->StoreIC_Miss(); | 2805 Handle<Code> ic = masm()->isolate()->builtins()->StoreIC_Miss(); |
| 2804 __ Jump(ic, RelocInfo::CODE_TARGET); | 2806 __ Jump(ic, RelocInfo::CODE_TARGET); |
| 2805 | 2807 |
| 2806 // Return the generated code. | 2808 // Return the generated code. |
| 2807 return GetCode(NORMAL, name); | 2809 return GetCode(Code::NORMAL, name); |
| 2808 } | 2810 } |
| 2809 | 2811 |
| 2810 | 2812 |
| 2811 Handle<Code> LoadStubCompiler::CompileLoadNonexistent(Handle<String> name, | 2813 Handle<Code> LoadStubCompiler::CompileLoadNonexistent(Handle<String> name, |
| 2812 Handle<JSObject> object, | 2814 Handle<JSObject> object, |
| 2813 Handle<JSObject> last) { | 2815 Handle<JSObject> last) { |
| 2814 // ----------- S t a t e ------------- | 2816 // ----------- S t a t e ------------- |
| 2815 // -- a0 : receiver | 2817 // -- a0 : receiver |
| 2816 // -- ra : return address | 2818 // -- ra : return address |
| 2817 // ----------------------------------- | 2819 // ----------------------------------- |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2831 } | 2833 } |
| 2832 | 2834 |
| 2833 // Return undefined if maps of the full prototype chain is still the same. | 2835 // Return undefined if maps of the full prototype chain is still the same. |
| 2834 __ LoadRoot(v0, Heap::kUndefinedValueRootIndex); | 2836 __ LoadRoot(v0, Heap::kUndefinedValueRootIndex); |
| 2835 __ Ret(); | 2837 __ Ret(); |
| 2836 | 2838 |
| 2837 __ bind(&miss); | 2839 __ bind(&miss); |
| 2838 GenerateLoadMiss(masm(), Code::LOAD_IC); | 2840 GenerateLoadMiss(masm(), Code::LOAD_IC); |
| 2839 | 2841 |
| 2840 // Return the generated code. | 2842 // Return the generated code. |
| 2841 return GetCode(NONEXISTENT, factory()->empty_string()); | 2843 return GetCode(Code::NONEXISTENT, factory()->empty_string()); |
| 2842 } | 2844 } |
| 2843 | 2845 |
| 2844 | 2846 |
| 2845 Handle<Code> LoadStubCompiler::CompileLoadField(Handle<JSObject> object, | 2847 Handle<Code> LoadStubCompiler::CompileLoadField(Handle<JSObject> object, |
| 2846 Handle<JSObject> holder, | 2848 Handle<JSObject> holder, |
| 2847 int index, | 2849 int index, |
| 2848 Handle<String> name) { | 2850 Handle<String> name) { |
| 2849 // ----------- S t a t e ------------- | 2851 // ----------- S t a t e ------------- |
| 2850 // -- a0 : receiver | 2852 // -- a0 : receiver |
| 2851 // -- a2 : name | 2853 // -- a2 : name |
| 2852 // -- ra : return address | 2854 // -- ra : return address |
| 2853 // ----------------------------------- | 2855 // ----------------------------------- |
| 2854 Label miss; | 2856 Label miss; |
| 2855 | 2857 |
| 2856 __ mov(v0, a0); | 2858 __ mov(v0, a0); |
| 2857 | 2859 |
| 2858 GenerateLoadField(object, holder, v0, a3, a1, t0, index, name, &miss); | 2860 GenerateLoadField(object, holder, v0, a3, a1, t0, index, name, &miss); |
| 2859 __ bind(&miss); | 2861 __ bind(&miss); |
| 2860 GenerateLoadMiss(masm(), Code::LOAD_IC); | 2862 GenerateLoadMiss(masm(), Code::LOAD_IC); |
| 2861 | 2863 |
| 2862 // Return the generated code. | 2864 // Return the generated code. |
| 2863 return GetCode(FIELD, name); | 2865 return GetCode(Code::FIELD, name); |
| 2864 } | 2866 } |
| 2865 | 2867 |
| 2866 | 2868 |
| 2867 Handle<Code> LoadStubCompiler::CompileLoadCallback( | 2869 Handle<Code> LoadStubCompiler::CompileLoadCallback( |
| 2868 Handle<String> name, | 2870 Handle<String> name, |
| 2869 Handle<JSObject> object, | 2871 Handle<JSObject> object, |
| 2870 Handle<JSObject> holder, | 2872 Handle<JSObject> holder, |
| 2871 Handle<AccessorInfo> callback) { | 2873 Handle<AccessorInfo> callback) { |
| 2872 // ----------- S t a t e ------------- | 2874 // ----------- S t a t e ------------- |
| 2873 // -- a0 : receiver | 2875 // -- a0 : receiver |
| 2874 // -- a2 : name | 2876 // -- a2 : name |
| 2875 // -- ra : return address | 2877 // -- ra : return address |
| 2876 // ----------------------------------- | 2878 // ----------------------------------- |
| 2877 Label miss; | 2879 Label miss; |
| 2878 GenerateLoadCallback(object, holder, a0, a2, a3, a1, t0, callback, name, | 2880 GenerateLoadCallback(object, holder, a0, a2, a3, a1, t0, callback, name, |
| 2879 &miss); | 2881 &miss); |
| 2880 __ bind(&miss); | 2882 __ bind(&miss); |
| 2881 GenerateLoadMiss(masm(), Code::LOAD_IC); | 2883 GenerateLoadMiss(masm(), Code::LOAD_IC); |
| 2882 | 2884 |
| 2883 // Return the generated code. | 2885 // Return the generated code. |
| 2884 return GetCode(CALLBACKS, name); | 2886 return GetCode(Code::CALLBACKS, name); |
| 2885 } | 2887 } |
| 2886 | 2888 |
| 2887 | 2889 |
| 2888 Handle<Code> LoadStubCompiler::CompileLoadViaGetter( | 2890 Handle<Code> LoadStubCompiler::CompileLoadViaGetter( |
| 2889 Handle<String> name, | 2891 Handle<String> name, |
| 2890 Handle<JSObject> receiver, | 2892 Handle<JSObject> receiver, |
| 2891 Handle<JSObject> holder, | 2893 Handle<JSObject> holder, |
| 2892 Handle<JSFunction> getter) { | 2894 Handle<JSFunction> getter) { |
| 2893 // ----------- S t a t e ------------- | 2895 // ----------- S t a t e ------------- |
| 2894 // -- a0 : receiver | 2896 // -- a0 : receiver |
| (...skipping 17 matching lines...) Expand all Loading... |
| 2912 | 2914 |
| 2913 // Restore context register. | 2915 // Restore context register. |
| 2914 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); | 2916 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
| 2915 } | 2917 } |
| 2916 __ Ret(); | 2918 __ Ret(); |
| 2917 | 2919 |
| 2918 __ bind(&miss); | 2920 __ bind(&miss); |
| 2919 GenerateLoadMiss(masm(), Code::LOAD_IC); | 2921 GenerateLoadMiss(masm(), Code::LOAD_IC); |
| 2920 | 2922 |
| 2921 // Return the generated code. | 2923 // Return the generated code. |
| 2922 return GetCode(CALLBACKS, name); | 2924 return GetCode(Code::CALLBACKS, name); |
| 2923 } | 2925 } |
| 2924 | 2926 |
| 2925 | 2927 |
| 2926 Handle<Code> LoadStubCompiler::CompileLoadConstant(Handle<JSObject> object, | 2928 Handle<Code> LoadStubCompiler::CompileLoadConstant(Handle<JSObject> object, |
| 2927 Handle<JSObject> holder, | 2929 Handle<JSObject> holder, |
| 2928 Handle<JSFunction> value, | 2930 Handle<JSFunction> value, |
| 2929 Handle<String> name) { | 2931 Handle<String> name) { |
| 2930 // ----------- S t a t e ------------- | 2932 // ----------- S t a t e ------------- |
| 2931 // -- a0 : receiver | 2933 // -- a0 : receiver |
| 2932 // -- a2 : name | 2934 // -- a2 : name |
| 2933 // -- ra : return address | 2935 // -- ra : return address |
| 2934 // ----------------------------------- | 2936 // ----------------------------------- |
| 2935 Label miss; | 2937 Label miss; |
| 2936 | 2938 |
| 2937 GenerateLoadConstant(object, holder, a0, a3, a1, t0, value, name, &miss); | 2939 GenerateLoadConstant(object, holder, a0, a3, a1, t0, value, name, &miss); |
| 2938 __ bind(&miss); | 2940 __ bind(&miss); |
| 2939 GenerateLoadMiss(masm(), Code::LOAD_IC); | 2941 GenerateLoadMiss(masm(), Code::LOAD_IC); |
| 2940 | 2942 |
| 2941 // Return the generated code. | 2943 // Return the generated code. |
| 2942 return GetCode(CONSTANT_FUNCTION, name); | 2944 return GetCode(Code::CONSTANT_FUNCTION, name); |
| 2943 } | 2945 } |
| 2944 | 2946 |
| 2945 | 2947 |
| 2946 Handle<Code> LoadStubCompiler::CompileLoadInterceptor(Handle<JSObject> object, | 2948 Handle<Code> LoadStubCompiler::CompileLoadInterceptor(Handle<JSObject> object, |
| 2947 Handle<JSObject> holder, | 2949 Handle<JSObject> holder, |
| 2948 Handle<String> name) { | 2950 Handle<String> name) { |
| 2949 // ----------- S t a t e ------------- | 2951 // ----------- S t a t e ------------- |
| 2950 // -- a0 : receiver | 2952 // -- a0 : receiver |
| 2951 // -- a2 : name | 2953 // -- a2 : name |
| 2952 // -- ra : return address | 2954 // -- ra : return address |
| 2953 // -- [sp] : receiver | 2955 // -- [sp] : receiver |
| 2954 // ----------------------------------- | 2956 // ----------------------------------- |
| 2955 Label miss; | 2957 Label miss; |
| 2956 | 2958 |
| 2957 LookupResult lookup(isolate()); | 2959 LookupResult lookup(isolate()); |
| 2958 LookupPostInterceptor(holder, name, &lookup); | 2960 LookupPostInterceptor(holder, name, &lookup); |
| 2959 GenerateLoadInterceptor(object, holder, &lookup, a0, a2, a3, a1, t0, name, | 2961 GenerateLoadInterceptor(object, holder, &lookup, a0, a2, a3, a1, t0, name, |
| 2960 &miss); | 2962 &miss); |
| 2961 __ bind(&miss); | 2963 __ bind(&miss); |
| 2962 GenerateLoadMiss(masm(), Code::LOAD_IC); | 2964 GenerateLoadMiss(masm(), Code::LOAD_IC); |
| 2963 | 2965 |
| 2964 // Return the generated code. | 2966 // Return the generated code. |
| 2965 return GetCode(INTERCEPTOR, name); | 2967 return GetCode(Code::INTERCEPTOR, name); |
| 2966 } | 2968 } |
| 2967 | 2969 |
| 2968 | 2970 |
| 2969 Handle<Code> LoadStubCompiler::CompileLoadGlobal( | 2971 Handle<Code> LoadStubCompiler::CompileLoadGlobal( |
| 2970 Handle<JSObject> object, | 2972 Handle<JSObject> object, |
| 2971 Handle<GlobalObject> holder, | 2973 Handle<GlobalObject> holder, |
| 2972 Handle<JSGlobalPropertyCell> cell, | 2974 Handle<JSGlobalPropertyCell> cell, |
| 2973 Handle<String> name, | 2975 Handle<String> name, |
| 2974 bool is_dont_delete) { | 2976 bool is_dont_delete) { |
| 2975 // ----------- S t a t e ------------- | 2977 // ----------- S t a t e ------------- |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2996 __ mov(v0, t0); | 2998 __ mov(v0, t0); |
| 2997 Counters* counters = masm()->isolate()->counters(); | 2999 Counters* counters = masm()->isolate()->counters(); |
| 2998 __ IncrementCounter(counters->named_load_global_stub(), 1, a1, a3); | 3000 __ IncrementCounter(counters->named_load_global_stub(), 1, a1, a3); |
| 2999 __ Ret(); | 3001 __ Ret(); |
| 3000 | 3002 |
| 3001 __ bind(&miss); | 3003 __ bind(&miss); |
| 3002 __ IncrementCounter(counters->named_load_global_stub_miss(), 1, a1, a3); | 3004 __ IncrementCounter(counters->named_load_global_stub_miss(), 1, a1, a3); |
| 3003 GenerateLoadMiss(masm(), Code::LOAD_IC); | 3005 GenerateLoadMiss(masm(), Code::LOAD_IC); |
| 3004 | 3006 |
| 3005 // Return the generated code. | 3007 // Return the generated code. |
| 3006 return GetCode(NORMAL, name); | 3008 return GetCode(Code::NORMAL, name); |
| 3007 } | 3009 } |
| 3008 | 3010 |
| 3009 | 3011 |
| 3010 Handle<Code> KeyedLoadStubCompiler::CompileLoadField(Handle<String> name, | 3012 Handle<Code> KeyedLoadStubCompiler::CompileLoadField(Handle<String> name, |
| 3011 Handle<JSObject> receiver, | 3013 Handle<JSObject> receiver, |
| 3012 Handle<JSObject> holder, | 3014 Handle<JSObject> holder, |
| 3013 int index) { | 3015 int index) { |
| 3014 // ----------- S t a t e ------------- | 3016 // ----------- S t a t e ------------- |
| 3015 // -- ra : return address | 3017 // -- ra : return address |
| 3016 // -- a0 : key | 3018 // -- a0 : key |
| 3017 // -- a1 : receiver | 3019 // -- a1 : receiver |
| 3018 // ----------------------------------- | 3020 // ----------------------------------- |
| 3019 Label miss; | 3021 Label miss; |
| 3020 | 3022 |
| 3021 // Check the key is the cached one. | 3023 // Check the key is the cached one. |
| 3022 __ Branch(&miss, ne, a0, Operand(name)); | 3024 __ Branch(&miss, ne, a0, Operand(name)); |
| 3023 | 3025 |
| 3024 GenerateLoadField(receiver, holder, a1, a2, a3, t0, index, name, &miss); | 3026 GenerateLoadField(receiver, holder, a1, a2, a3, t0, index, name, &miss); |
| 3025 __ bind(&miss); | 3027 __ bind(&miss); |
| 3026 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); | 3028 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
| 3027 | 3029 |
| 3028 return GetCode(FIELD, name); | 3030 return GetCode(Code::FIELD, name); |
| 3029 } | 3031 } |
| 3030 | 3032 |
| 3031 | 3033 |
| 3032 Handle<Code> KeyedLoadStubCompiler::CompileLoadCallback( | 3034 Handle<Code> KeyedLoadStubCompiler::CompileLoadCallback( |
| 3033 Handle<String> name, | 3035 Handle<String> name, |
| 3034 Handle<JSObject> receiver, | 3036 Handle<JSObject> receiver, |
| 3035 Handle<JSObject> holder, | 3037 Handle<JSObject> holder, |
| 3036 Handle<AccessorInfo> callback) { | 3038 Handle<AccessorInfo> callback) { |
| 3037 // ----------- S t a t e ------------- | 3039 // ----------- S t a t e ------------- |
| 3038 // -- ra : return address | 3040 // -- ra : return address |
| 3039 // -- a0 : key | 3041 // -- a0 : key |
| 3040 // -- a1 : receiver | 3042 // -- a1 : receiver |
| 3041 // ----------------------------------- | 3043 // ----------------------------------- |
| 3042 Label miss; | 3044 Label miss; |
| 3043 | 3045 |
| 3044 // Check the key is the cached one. | 3046 // Check the key is the cached one. |
| 3045 __ Branch(&miss, ne, a0, Operand(name)); | 3047 __ Branch(&miss, ne, a0, Operand(name)); |
| 3046 | 3048 |
| 3047 GenerateLoadCallback(receiver, holder, a1, a0, a2, a3, t0, callback, name, | 3049 GenerateLoadCallback(receiver, holder, a1, a0, a2, a3, t0, callback, name, |
| 3048 &miss); | 3050 &miss); |
| 3049 __ bind(&miss); | 3051 __ bind(&miss); |
| 3050 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); | 3052 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
| 3051 | 3053 |
| 3052 return GetCode(CALLBACKS, name); | 3054 return GetCode(Code::CALLBACKS, name); |
| 3053 } | 3055 } |
| 3054 | 3056 |
| 3055 | 3057 |
| 3056 Handle<Code> KeyedLoadStubCompiler::CompileLoadConstant( | 3058 Handle<Code> KeyedLoadStubCompiler::CompileLoadConstant( |
| 3057 Handle<String> name, | 3059 Handle<String> name, |
| 3058 Handle<JSObject> receiver, | 3060 Handle<JSObject> receiver, |
| 3059 Handle<JSObject> holder, | 3061 Handle<JSObject> holder, |
| 3060 Handle<JSFunction> value) { | 3062 Handle<JSFunction> value) { |
| 3061 // ----------- S t a t e ------------- | 3063 // ----------- S t a t e ------------- |
| 3062 // -- ra : return address | 3064 // -- ra : return address |
| 3063 // -- a0 : key | 3065 // -- a0 : key |
| 3064 // -- a1 : receiver | 3066 // -- a1 : receiver |
| 3065 // ----------------------------------- | 3067 // ----------------------------------- |
| 3066 Label miss; | 3068 Label miss; |
| 3067 | 3069 |
| 3068 // Check the key is the cached one. | 3070 // Check the key is the cached one. |
| 3069 __ Branch(&miss, ne, a0, Operand(name)); | 3071 __ Branch(&miss, ne, a0, Operand(name)); |
| 3070 | 3072 |
| 3071 GenerateLoadConstant(receiver, holder, a1, a2, a3, t0, value, name, &miss); | 3073 GenerateLoadConstant(receiver, holder, a1, a2, a3, t0, value, name, &miss); |
| 3072 __ bind(&miss); | 3074 __ bind(&miss); |
| 3073 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); | 3075 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
| 3074 | 3076 |
| 3075 // Return the generated code. | 3077 // Return the generated code. |
| 3076 return GetCode(CONSTANT_FUNCTION, name); | 3078 return GetCode(Code::CONSTANT_FUNCTION, name); |
| 3077 } | 3079 } |
| 3078 | 3080 |
| 3079 | 3081 |
| 3080 Handle<Code> KeyedLoadStubCompiler::CompileLoadInterceptor( | 3082 Handle<Code> KeyedLoadStubCompiler::CompileLoadInterceptor( |
| 3081 Handle<JSObject> receiver, | 3083 Handle<JSObject> receiver, |
| 3082 Handle<JSObject> holder, | 3084 Handle<JSObject> holder, |
| 3083 Handle<String> name) { | 3085 Handle<String> name) { |
| 3084 // ----------- S t a t e ------------- | 3086 // ----------- S t a t e ------------- |
| 3085 // -- ra : return address | 3087 // -- ra : return address |
| 3086 // -- a0 : key | 3088 // -- a0 : key |
| 3087 // -- a1 : receiver | 3089 // -- a1 : receiver |
| 3088 // ----------------------------------- | 3090 // ----------------------------------- |
| 3089 Label miss; | 3091 Label miss; |
| 3090 | 3092 |
| 3091 // Check the key is the cached one. | 3093 // Check the key is the cached one. |
| 3092 __ Branch(&miss, ne, a0, Operand(name)); | 3094 __ Branch(&miss, ne, a0, Operand(name)); |
| 3093 | 3095 |
| 3094 LookupResult lookup(isolate()); | 3096 LookupResult lookup(isolate()); |
| 3095 LookupPostInterceptor(holder, name, &lookup); | 3097 LookupPostInterceptor(holder, name, &lookup); |
| 3096 GenerateLoadInterceptor(receiver, holder, &lookup, a1, a0, a2, a3, t0, name, | 3098 GenerateLoadInterceptor(receiver, holder, &lookup, a1, a0, a2, a3, t0, name, |
| 3097 &miss); | 3099 &miss); |
| 3098 __ bind(&miss); | 3100 __ bind(&miss); |
| 3099 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); | 3101 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
| 3100 | 3102 |
| 3101 return GetCode(INTERCEPTOR, name); | 3103 return GetCode(Code::INTERCEPTOR, name); |
| 3102 } | 3104 } |
| 3103 | 3105 |
| 3104 | 3106 |
| 3105 Handle<Code> KeyedLoadStubCompiler::CompileLoadArrayLength( | 3107 Handle<Code> KeyedLoadStubCompiler::CompileLoadArrayLength( |
| 3106 Handle<String> name) { | 3108 Handle<String> name) { |
| 3107 // ----------- S t a t e ------------- | 3109 // ----------- S t a t e ------------- |
| 3108 // -- ra : return address | 3110 // -- ra : return address |
| 3109 // -- a0 : key | 3111 // -- a0 : key |
| 3110 // -- a1 : receiver | 3112 // -- a1 : receiver |
| 3111 // ----------------------------------- | 3113 // ----------------------------------- |
| 3112 Label miss; | 3114 Label miss; |
| 3113 | 3115 |
| 3114 // Check the key is the cached one. | 3116 // Check the key is the cached one. |
| 3115 __ Branch(&miss, ne, a0, Operand(name)); | 3117 __ Branch(&miss, ne, a0, Operand(name)); |
| 3116 | 3118 |
| 3117 GenerateLoadArrayLength(masm(), a1, a2, &miss); | 3119 GenerateLoadArrayLength(masm(), a1, a2, &miss); |
| 3118 __ bind(&miss); | 3120 __ bind(&miss); |
| 3119 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); | 3121 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
| 3120 | 3122 |
| 3121 return GetCode(CALLBACKS, name); | 3123 return GetCode(Code::CALLBACKS, name); |
| 3122 } | 3124 } |
| 3123 | 3125 |
| 3124 | 3126 |
| 3125 Handle<Code> KeyedLoadStubCompiler::CompileLoadStringLength( | 3127 Handle<Code> KeyedLoadStubCompiler::CompileLoadStringLength( |
| 3126 Handle<String> name) { | 3128 Handle<String> name) { |
| 3127 // ----------- S t a t e ------------- | 3129 // ----------- S t a t e ------------- |
| 3128 // -- ra : return address | 3130 // -- ra : return address |
| 3129 // -- a0 : key | 3131 // -- a0 : key |
| 3130 // -- a1 : receiver | 3132 // -- a1 : receiver |
| 3131 // ----------------------------------- | 3133 // ----------------------------------- |
| 3132 Label miss; | 3134 Label miss; |
| 3133 | 3135 |
| 3134 Counters* counters = masm()->isolate()->counters(); | 3136 Counters* counters = masm()->isolate()->counters(); |
| 3135 __ IncrementCounter(counters->keyed_load_string_length(), 1, a2, a3); | 3137 __ IncrementCounter(counters->keyed_load_string_length(), 1, a2, a3); |
| 3136 | 3138 |
| 3137 // Check the key is the cached one. | 3139 // Check the key is the cached one. |
| 3138 __ Branch(&miss, ne, a0, Operand(name)); | 3140 __ Branch(&miss, ne, a0, Operand(name)); |
| 3139 | 3141 |
| 3140 GenerateLoadStringLength(masm(), a1, a2, a3, &miss, true); | 3142 GenerateLoadStringLength(masm(), a1, a2, a3, &miss, true); |
| 3141 __ bind(&miss); | 3143 __ bind(&miss); |
| 3142 __ DecrementCounter(counters->keyed_load_string_length(), 1, a2, a3); | 3144 __ DecrementCounter(counters->keyed_load_string_length(), 1, a2, a3); |
| 3143 | 3145 |
| 3144 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); | 3146 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
| 3145 | 3147 |
| 3146 return GetCode(CALLBACKS, name); | 3148 return GetCode(Code::CALLBACKS, name); |
| 3147 } | 3149 } |
| 3148 | 3150 |
| 3149 | 3151 |
| 3150 Handle<Code> KeyedLoadStubCompiler::CompileLoadFunctionPrototype( | 3152 Handle<Code> KeyedLoadStubCompiler::CompileLoadFunctionPrototype( |
| 3151 Handle<String> name) { | 3153 Handle<String> name) { |
| 3152 // ----------- S t a t e ------------- | 3154 // ----------- S t a t e ------------- |
| 3153 // -- ra : return address | 3155 // -- ra : return address |
| 3154 // -- a0 : key | 3156 // -- a0 : key |
| 3155 // -- a1 : receiver | 3157 // -- a1 : receiver |
| 3156 // ----------------------------------- | 3158 // ----------------------------------- |
| 3157 Label miss; | 3159 Label miss; |
| 3158 | 3160 |
| 3159 Counters* counters = masm()->isolate()->counters(); | 3161 Counters* counters = masm()->isolate()->counters(); |
| 3160 __ IncrementCounter(counters->keyed_load_function_prototype(), 1, a2, a3); | 3162 __ IncrementCounter(counters->keyed_load_function_prototype(), 1, a2, a3); |
| 3161 | 3163 |
| 3162 // Check the name hasn't changed. | 3164 // Check the name hasn't changed. |
| 3163 __ Branch(&miss, ne, a0, Operand(name)); | 3165 __ Branch(&miss, ne, a0, Operand(name)); |
| 3164 | 3166 |
| 3165 GenerateLoadFunctionPrototype(masm(), a1, a2, a3, &miss); | 3167 GenerateLoadFunctionPrototype(masm(), a1, a2, a3, &miss); |
| 3166 __ bind(&miss); | 3168 __ bind(&miss); |
| 3167 __ DecrementCounter(counters->keyed_load_function_prototype(), 1, a2, a3); | 3169 __ DecrementCounter(counters->keyed_load_function_prototype(), 1, a2, a3); |
| 3168 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); | 3170 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
| 3169 | 3171 |
| 3170 return GetCode(CALLBACKS, name); | 3172 return GetCode(Code::CALLBACKS, name); |
| 3171 } | 3173 } |
| 3172 | 3174 |
| 3173 | 3175 |
| 3174 Handle<Code> KeyedLoadStubCompiler::CompileLoadElement( | 3176 Handle<Code> KeyedLoadStubCompiler::CompileLoadElement( |
| 3175 Handle<Map> receiver_map) { | 3177 Handle<Map> receiver_map) { |
| 3176 // ----------- S t a t e ------------- | 3178 // ----------- S t a t e ------------- |
| 3177 // -- ra : return address | 3179 // -- ra : return address |
| 3178 // -- a0 : key | 3180 // -- a0 : key |
| 3179 // -- a1 : receiver | 3181 // -- a1 : receiver |
| 3180 // ----------------------------------- | 3182 // ----------------------------------- |
| 3181 ElementsKind elements_kind = receiver_map->elements_kind(); | 3183 ElementsKind elements_kind = receiver_map->elements_kind(); |
| 3182 Handle<Code> stub = KeyedLoadElementStub(elements_kind).GetCode(); | 3184 Handle<Code> stub = KeyedLoadElementStub(elements_kind).GetCode(); |
| 3183 | 3185 |
| 3184 __ DispatchMap(a1, a2, receiver_map, stub, DO_SMI_CHECK); | 3186 __ DispatchMap(a1, a2, receiver_map, stub, DO_SMI_CHECK); |
| 3185 | 3187 |
| 3186 Handle<Code> ic = isolate()->builtins()->KeyedLoadIC_Miss(); | 3188 Handle<Code> ic = isolate()->builtins()->KeyedLoadIC_Miss(); |
| 3187 __ Jump(ic, RelocInfo::CODE_TARGET); | 3189 __ Jump(ic, RelocInfo::CODE_TARGET); |
| 3188 | 3190 |
| 3189 // Return the generated code. | 3191 // Return the generated code. |
| 3190 return GetCode(NORMAL, factory()->empty_string()); | 3192 return GetCode(Code::NORMAL, factory()->empty_string()); |
| 3191 } | 3193 } |
| 3192 | 3194 |
| 3193 | 3195 |
| 3194 Handle<Code> KeyedLoadStubCompiler::CompileLoadPolymorphic( | 3196 Handle<Code> KeyedLoadStubCompiler::CompileLoadPolymorphic( |
| 3195 MapHandleList* receiver_maps, | 3197 MapHandleList* receiver_maps, |
| 3196 CodeHandleList* handler_ics) { | 3198 CodeHandleList* handler_ics) { |
| 3197 // ----------- S t a t e ------------- | 3199 // ----------- S t a t e ------------- |
| 3198 // -- ra : return address | 3200 // -- ra : return address |
| 3199 // -- a0 : key | 3201 // -- a0 : key |
| 3200 // -- a1 : receiver | 3202 // -- a1 : receiver |
| 3201 // ----------------------------------- | 3203 // ----------------------------------- |
| 3202 Label miss; | 3204 Label miss; |
| 3203 __ JumpIfSmi(a1, &miss); | 3205 __ JumpIfSmi(a1, &miss); |
| 3204 | 3206 |
| 3205 int receiver_count = receiver_maps->length(); | 3207 int receiver_count = receiver_maps->length(); |
| 3206 __ lw(a2, FieldMemOperand(a1, HeapObject::kMapOffset)); | 3208 __ lw(a2, FieldMemOperand(a1, HeapObject::kMapOffset)); |
| 3207 for (int current = 0; current < receiver_count; ++current) { | 3209 for (int current = 0; current < receiver_count; ++current) { |
| 3208 __ Jump(handler_ics->at(current), RelocInfo::CODE_TARGET, | 3210 __ Jump(handler_ics->at(current), RelocInfo::CODE_TARGET, |
| 3209 eq, a2, Operand(receiver_maps->at(current))); | 3211 eq, a2, Operand(receiver_maps->at(current))); |
| 3210 } | 3212 } |
| 3211 | 3213 |
| 3212 __ bind(&miss); | 3214 __ bind(&miss); |
| 3213 Handle<Code> miss_ic = isolate()->builtins()->KeyedLoadIC_Miss(); | 3215 Handle<Code> miss_ic = isolate()->builtins()->KeyedLoadIC_Miss(); |
| 3214 __ Jump(miss_ic, RelocInfo::CODE_TARGET); | 3216 __ Jump(miss_ic, RelocInfo::CODE_TARGET); |
| 3215 | 3217 |
| 3216 // Return the generated code. | 3218 // Return the generated code. |
| 3217 return GetCode(NORMAL, factory()->empty_string(), MEGAMORPHIC); | 3219 return GetCode(Code::NORMAL, factory()->empty_string(), MEGAMORPHIC); |
| 3218 } | 3220 } |
| 3219 | 3221 |
| 3220 | 3222 |
| 3221 Handle<Code> KeyedStoreStubCompiler::CompileStoreField(Handle<JSObject> object, | 3223 Handle<Code> KeyedStoreStubCompiler::CompileStoreField(Handle<JSObject> object, |
| 3222 int index, | 3224 int index, |
| 3223 Handle<Map> transition, | 3225 Handle<Map> transition, |
| 3224 Handle<String> name) { | 3226 Handle<String> name) { |
| 3225 // ----------- S t a t e ------------- | 3227 // ----------- S t a t e ------------- |
| 3226 // -- a0 : value | 3228 // -- a0 : value |
| 3227 // -- a1 : key | 3229 // -- a1 : key |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3246 name, | 3248 name, |
| 3247 a2, a1, a3, t0, | 3249 a2, a1, a3, t0, |
| 3248 &miss); | 3250 &miss); |
| 3249 __ bind(&miss); | 3251 __ bind(&miss); |
| 3250 | 3252 |
| 3251 __ DecrementCounter(counters->keyed_store_field(), 1, a3, t0); | 3253 __ DecrementCounter(counters->keyed_store_field(), 1, a3, t0); |
| 3252 Handle<Code> ic = masm()->isolate()->builtins()->KeyedStoreIC_Miss(); | 3254 Handle<Code> ic = masm()->isolate()->builtins()->KeyedStoreIC_Miss(); |
| 3253 __ Jump(ic, RelocInfo::CODE_TARGET); | 3255 __ Jump(ic, RelocInfo::CODE_TARGET); |
| 3254 | 3256 |
| 3255 // Return the generated code. | 3257 // Return the generated code. |
| 3256 return GetCode(transition.is_null() ? FIELD : MAP_TRANSITION, name); | 3258 return GetCode(transition.is_null() |
| 3259 ? Code::FIELD |
| 3260 : Code::MAP_TRANSITION, name); |
| 3257 } | 3261 } |
| 3258 | 3262 |
| 3259 | 3263 |
| 3260 Handle<Code> KeyedStoreStubCompiler::CompileStoreElement( | 3264 Handle<Code> KeyedStoreStubCompiler::CompileStoreElement( |
| 3261 Handle<Map> receiver_map) { | 3265 Handle<Map> receiver_map) { |
| 3262 // ----------- S t a t e ------------- | 3266 // ----------- S t a t e ------------- |
| 3263 // -- a0 : value | 3267 // -- a0 : value |
| 3264 // -- a1 : key | 3268 // -- a1 : key |
| 3265 // -- a2 : receiver | 3269 // -- a2 : receiver |
| 3266 // -- ra : return address | 3270 // -- ra : return address |
| 3267 // -- a3 : scratch | 3271 // -- a3 : scratch |
| 3268 // ----------------------------------- | 3272 // ----------------------------------- |
| 3269 ElementsKind elements_kind = receiver_map->elements_kind(); | 3273 ElementsKind elements_kind = receiver_map->elements_kind(); |
| 3270 bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE; | 3274 bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE; |
| 3271 Handle<Code> stub = | 3275 Handle<Code> stub = |
| 3272 KeyedStoreElementStub(is_js_array, elements_kind, grow_mode_).GetCode(); | 3276 KeyedStoreElementStub(is_js_array, elements_kind, grow_mode_).GetCode(); |
| 3273 | 3277 |
| 3274 __ DispatchMap(a2, a3, receiver_map, stub, DO_SMI_CHECK); | 3278 __ DispatchMap(a2, a3, receiver_map, stub, DO_SMI_CHECK); |
| 3275 | 3279 |
| 3276 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss(); | 3280 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss(); |
| 3277 __ Jump(ic, RelocInfo::CODE_TARGET); | 3281 __ Jump(ic, RelocInfo::CODE_TARGET); |
| 3278 | 3282 |
| 3279 // Return the generated code. | 3283 // Return the generated code. |
| 3280 return GetCode(NORMAL, factory()->empty_string()); | 3284 return GetCode(Code::NORMAL, factory()->empty_string()); |
| 3281 } | 3285 } |
| 3282 | 3286 |
| 3283 | 3287 |
| 3284 Handle<Code> KeyedStoreStubCompiler::CompileStorePolymorphic( | 3288 Handle<Code> KeyedStoreStubCompiler::CompileStorePolymorphic( |
| 3285 MapHandleList* receiver_maps, | 3289 MapHandleList* receiver_maps, |
| 3286 CodeHandleList* handler_stubs, | 3290 CodeHandleList* handler_stubs, |
| 3287 MapHandleList* transitioned_maps) { | 3291 MapHandleList* transitioned_maps) { |
| 3288 // ----------- S t a t e ------------- | 3292 // ----------- S t a t e ------------- |
| 3289 // -- a0 : value | 3293 // -- a0 : value |
| 3290 // -- a1 : key | 3294 // -- a1 : key |
| (...skipping 17 matching lines...) Expand all Loading... |
| 3308 __ Jump(handler_stubs->at(i), RelocInfo::CODE_TARGET); | 3312 __ Jump(handler_stubs->at(i), RelocInfo::CODE_TARGET); |
| 3309 __ bind(&next_map); | 3313 __ bind(&next_map); |
| 3310 } | 3314 } |
| 3311 } | 3315 } |
| 3312 | 3316 |
| 3313 __ bind(&miss); | 3317 __ bind(&miss); |
| 3314 Handle<Code> miss_ic = isolate()->builtins()->KeyedStoreIC_Miss(); | 3318 Handle<Code> miss_ic = isolate()->builtins()->KeyedStoreIC_Miss(); |
| 3315 __ Jump(miss_ic, RelocInfo::CODE_TARGET); | 3319 __ Jump(miss_ic, RelocInfo::CODE_TARGET); |
| 3316 | 3320 |
| 3317 // Return the generated code. | 3321 // Return the generated code. |
| 3318 return GetCode(NORMAL, factory()->empty_string(), MEGAMORPHIC); | 3322 return GetCode(Code::NORMAL, factory()->empty_string(), MEGAMORPHIC); |
| 3319 } | 3323 } |
| 3320 | 3324 |
| 3321 | 3325 |
| 3322 Handle<Code> ConstructStubCompiler::CompileConstructStub( | 3326 Handle<Code> ConstructStubCompiler::CompileConstructStub( |
| 3323 Handle<JSFunction> function) { | 3327 Handle<JSFunction> function) { |
| 3324 // a0 : argc | 3328 // a0 : argc |
| 3325 // a1 : constructor | 3329 // a1 : constructor |
| 3326 // ra : return address | 3330 // ra : return address |
| 3327 // [sp] : last argument | 3331 // [sp] : last argument |
| 3328 Label generic_stub_call; | 3332 Label generic_stub_call; |
| (...skipping 1408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4737 __ Jump(ic_slow, RelocInfo::CODE_TARGET); | 4741 __ Jump(ic_slow, RelocInfo::CODE_TARGET); |
| 4738 } | 4742 } |
| 4739 } | 4743 } |
| 4740 | 4744 |
| 4741 | 4745 |
| 4742 #undef __ | 4746 #undef __ |
| 4743 | 4747 |
| 4744 } } // namespace v8::internal | 4748 } } // namespace v8::internal |
| 4745 | 4749 |
| 4746 #endif // V8_TARGET_ARCH_MIPS | 4750 #endif // V8_TARGET_ARCH_MIPS |
| OLD | NEW |