| 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 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 568 // -- sp[0] : holder (set by CheckPrototypes) | 568 // -- sp[0] : holder (set by CheckPrototypes) |
| 569 // -- sp[4] : callee js function | 569 // -- sp[4] : callee js function |
| 570 // -- sp[8] : call data | 570 // -- sp[8] : call data |
| 571 // -- sp[12] : last js argument | 571 // -- sp[12] : last js argument |
| 572 // -- ... | 572 // -- ... |
| 573 // -- sp[(argc + 3) * 4] : first js argument | 573 // -- sp[(argc + 3) * 4] : first js argument |
| 574 // -- sp[(argc + 4) * 4] : receiver | 574 // -- sp[(argc + 4) * 4] : receiver |
| 575 // ----------------------------------- | 575 // ----------------------------------- |
| 576 // Get the function and setup the context. | 576 // Get the function and setup the context. |
| 577 Handle<JSFunction> function = optimization.constant_function(); | 577 Handle<JSFunction> function = optimization.constant_function(); |
| 578 __ mov(r5, Operand(function)); | 578 __ LoadHeapObject(r5, function); |
| 579 __ ldr(cp, FieldMemOperand(r5, JSFunction::kContextOffset)); | 579 __ ldr(cp, FieldMemOperand(r5, JSFunction::kContextOffset)); |
| 580 | 580 |
| 581 // Pass the additional arguments FastHandleApiCall expects. | 581 // Pass the additional arguments FastHandleApiCall expects. |
| 582 Handle<CallHandlerInfo> api_call_info = optimization.api_call_info(); | 582 Handle<CallHandlerInfo> api_call_info = optimization.api_call_info(); |
| 583 Handle<Object> call_data(api_call_info->data()); | 583 Handle<Object> call_data(api_call_info->data()); |
| 584 if (masm->isolate()->heap()->InNewSpace(*call_data)) { | 584 if (masm->isolate()->heap()->InNewSpace(*call_data)) { |
| 585 __ Move(r0, api_call_info); | 585 __ Move(r0, api_call_info); |
| 586 __ ldr(r6, FieldMemOperand(r0, CallHandlerInfo::kDataOffset)); | 586 __ ldr(r6, FieldMemOperand(r0, CallHandlerInfo::kDataOffset)); |
| 587 } else { | 587 } else { |
| 588 __ Move(r6, call_data); | 588 __ Move(r6, call_data); |
| (...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1092 __ Ret(); | 1092 __ Ret(); |
| 1093 } | 1093 } |
| 1094 | 1094 |
| 1095 | 1095 |
| 1096 void StubCompiler::GenerateLoadConstant(Handle<JSObject> object, | 1096 void StubCompiler::GenerateLoadConstant(Handle<JSObject> object, |
| 1097 Handle<JSObject> holder, | 1097 Handle<JSObject> holder, |
| 1098 Register receiver, | 1098 Register receiver, |
| 1099 Register scratch1, | 1099 Register scratch1, |
| 1100 Register scratch2, | 1100 Register scratch2, |
| 1101 Register scratch3, | 1101 Register scratch3, |
| 1102 Handle<Object> value, | 1102 Handle<JSFunction> value, |
| 1103 Handle<String> name, | 1103 Handle<String> name, |
| 1104 Label* miss) { | 1104 Label* miss) { |
| 1105 // Check that the receiver isn't a smi. | 1105 // Check that the receiver isn't a smi. |
| 1106 __ JumpIfSmi(receiver, miss); | 1106 __ JumpIfSmi(receiver, miss); |
| 1107 | 1107 |
| 1108 // Check that the maps haven't changed. | 1108 // Check that the maps haven't changed. |
| 1109 CheckPrototypes( | 1109 CheckPrototypes( |
| 1110 object, receiver, holder, scratch1, scratch2, scratch3, name, miss); | 1110 object, receiver, holder, scratch1, scratch2, scratch3, name, miss); |
| 1111 | 1111 |
| 1112 // Return the constant value. | 1112 // Return the constant value. |
| 1113 __ mov(r0, Operand(value)); | 1113 __ LoadHeapObject(r0, value); |
| 1114 __ Ret(); | 1114 __ Ret(); |
| 1115 } | 1115 } |
| 1116 | 1116 |
| 1117 | 1117 |
| 1118 void StubCompiler::GenerateLoadCallback(Handle<JSObject> object, | 1118 void StubCompiler::GenerateLoadCallback(Handle<JSObject> object, |
| 1119 Handle<JSObject> holder, | 1119 Handle<JSObject> holder, |
| 1120 Register receiver, | 1120 Register receiver, |
| 1121 Register name_reg, | 1121 Register name_reg, |
| 1122 Register scratch1, | 1122 Register scratch1, |
| 1123 Register scratch2, | 1123 Register scratch2, |
| (...skipping 1559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2683 __ bind(&miss); | 2683 __ bind(&miss); |
| 2684 GenerateLoadMiss(masm(), Code::LOAD_IC); | 2684 GenerateLoadMiss(masm(), Code::LOAD_IC); |
| 2685 | 2685 |
| 2686 // Return the generated code. | 2686 // Return the generated code. |
| 2687 return GetCode(CALLBACKS, name); | 2687 return GetCode(CALLBACKS, name); |
| 2688 } | 2688 } |
| 2689 | 2689 |
| 2690 | 2690 |
| 2691 Handle<Code> LoadStubCompiler::CompileLoadConstant(Handle<JSObject> object, | 2691 Handle<Code> LoadStubCompiler::CompileLoadConstant(Handle<JSObject> object, |
| 2692 Handle<JSObject> holder, | 2692 Handle<JSObject> holder, |
| 2693 Handle<Object> value, | 2693 Handle<JSFunction> value, |
| 2694 Handle<String> name) { | 2694 Handle<String> name) { |
| 2695 // ----------- S t a t e ------------- | 2695 // ----------- S t a t e ------------- |
| 2696 // -- r0 : receiver | 2696 // -- r0 : receiver |
| 2697 // -- r2 : name | 2697 // -- r2 : name |
| 2698 // -- lr : return address | 2698 // -- lr : return address |
| 2699 // ----------------------------------- | 2699 // ----------------------------------- |
| 2700 Label miss; | 2700 Label miss; |
| 2701 | 2701 |
| 2702 GenerateLoadConstant(object, holder, r0, r3, r1, r4, value, name, &miss); | 2702 GenerateLoadConstant(object, holder, r0, r3, r1, r4, value, name, &miss); |
| 2703 __ bind(&miss); | 2703 __ bind(&miss); |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2823 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); | 2823 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
| 2824 | 2824 |
| 2825 return GetCode(CALLBACKS, name); | 2825 return GetCode(CALLBACKS, name); |
| 2826 } | 2826 } |
| 2827 | 2827 |
| 2828 | 2828 |
| 2829 Handle<Code> KeyedLoadStubCompiler::CompileLoadConstant( | 2829 Handle<Code> KeyedLoadStubCompiler::CompileLoadConstant( |
| 2830 Handle<String> name, | 2830 Handle<String> name, |
| 2831 Handle<JSObject> receiver, | 2831 Handle<JSObject> receiver, |
| 2832 Handle<JSObject> holder, | 2832 Handle<JSObject> holder, |
| 2833 Handle<Object> value) { | 2833 Handle<JSFunction> value) { |
| 2834 // ----------- S t a t e ------------- | 2834 // ----------- S t a t e ------------- |
| 2835 // -- lr : return address | 2835 // -- lr : return address |
| 2836 // -- r0 : key | 2836 // -- r0 : key |
| 2837 // -- r1 : receiver | 2837 // -- r1 : receiver |
| 2838 // ----------------------------------- | 2838 // ----------------------------------- |
| 2839 Label miss; | 2839 Label miss; |
| 2840 | 2840 |
| 2841 // Check the key is the cached one. | 2841 // Check the key is the cached one. |
| 2842 __ cmp(r0, Operand(name)); | 2842 __ cmp(r0, Operand(name)); |
| 2843 __ b(ne, &miss); | 2843 __ b(ne, &miss); |
| (...skipping 1390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4234 Handle<Code> ic_miss = masm->isolate()->builtins()->KeyedStoreIC_Miss(); | 4234 Handle<Code> ic_miss = masm->isolate()->builtins()->KeyedStoreIC_Miss(); |
| 4235 __ Jump(ic_miss, RelocInfo::CODE_TARGET); | 4235 __ Jump(ic_miss, RelocInfo::CODE_TARGET); |
| 4236 } | 4236 } |
| 4237 | 4237 |
| 4238 | 4238 |
| 4239 #undef __ | 4239 #undef __ |
| 4240 | 4240 |
| 4241 } } // namespace v8::internal | 4241 } } // namespace v8::internal |
| 4242 | 4242 |
| 4243 #endif // V8_TARGET_ARCH_ARM | 4243 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |