| OLD | NEW |
| 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 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 1176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1187 Register reg = | 1187 Register reg = |
| 1188 CheckPrototypes(object, receiver, holder, | 1188 CheckPrototypes(object, receiver, holder, |
| 1189 scratch1, scratch2, scratch3, name, miss); | 1189 scratch1, scratch2, scratch3, name, miss); |
| 1190 | 1190 |
| 1191 // Return the constant value. | 1191 // Return the constant value. |
| 1192 __ mov(r0, Operand(Handle<Object>(value))); | 1192 __ mov(r0, Operand(Handle<Object>(value))); |
| 1193 __ Ret(); | 1193 __ Ret(); |
| 1194 } | 1194 } |
| 1195 | 1195 |
| 1196 | 1196 |
| 1197 bool StubCompiler::GenerateLoadCallback(JSObject* object, | 1197 MaybeObject* StubCompiler::GenerateLoadCallback(JSObject* object, |
| 1198 JSObject* holder, | 1198 JSObject* holder, |
| 1199 Register receiver, | 1199 Register receiver, |
| 1200 Register name_reg, | 1200 Register name_reg, |
| 1201 Register scratch1, | 1201 Register scratch1, |
| 1202 Register scratch2, | 1202 Register scratch2, |
| 1203 Register scratch3, | 1203 Register scratch3, |
| 1204 AccessorInfo* callback, | 1204 AccessorInfo* callback, |
| 1205 String* name, | 1205 String* name, |
| 1206 Label* miss, | 1206 Label* miss) { |
| 1207 Failure** failure) { | |
| 1208 // Check that the receiver isn't a smi. | 1207 // Check that the receiver isn't a smi. |
| 1209 __ tst(receiver, Operand(kSmiTagMask)); | 1208 __ tst(receiver, Operand(kSmiTagMask)); |
| 1210 __ b(eq, miss); | 1209 __ b(eq, miss); |
| 1211 | 1210 |
| 1212 // Check that the maps haven't changed. | 1211 // Check that the maps haven't changed. |
| 1213 Register reg = | 1212 Register reg = |
| 1214 CheckPrototypes(object, receiver, holder, scratch1, scratch2, scratch3, | 1213 CheckPrototypes(object, receiver, holder, scratch1, scratch2, scratch3, |
| 1215 name, miss); | 1214 name, miss); |
| 1216 | 1215 |
| 1217 // Push the arguments on the JS stack of the caller. | 1216 // Push the arguments on the JS stack of the caller. |
| 1218 __ push(receiver); // Receiver. | 1217 __ push(receiver); // Receiver. |
| 1219 __ mov(scratch3, Operand(Handle<AccessorInfo>(callback))); // callback data | 1218 __ mov(scratch3, Operand(Handle<AccessorInfo>(callback))); // callback data |
| 1220 __ ldr(ip, FieldMemOperand(scratch3, AccessorInfo::kDataOffset)); | 1219 __ ldr(ip, FieldMemOperand(scratch3, AccessorInfo::kDataOffset)); |
| 1221 __ Push(reg, ip, scratch3, name_reg); | 1220 __ Push(reg, ip, scratch3, name_reg); |
| 1222 | 1221 |
| 1223 // Do tail-call to the runtime system. | 1222 // Do tail-call to the runtime system. |
| 1224 ExternalReference load_callback_property = | 1223 ExternalReference load_callback_property = |
| 1225 ExternalReference(IC_Utility(IC::kLoadCallbackProperty)); | 1224 ExternalReference(IC_Utility(IC::kLoadCallbackProperty)); |
| 1226 __ TailCallExternalReference(load_callback_property, 5, 1); | 1225 __ TailCallExternalReference(load_callback_property, 5, 1); |
| 1227 | 1226 |
| 1228 return true; | 1227 return Heap::undefined_value(); // Success. |
| 1229 } | 1228 } |
| 1230 | 1229 |
| 1231 | 1230 |
| 1232 void StubCompiler::GenerateLoadInterceptor(JSObject* object, | 1231 void StubCompiler::GenerateLoadInterceptor(JSObject* object, |
| 1233 JSObject* interceptor_holder, | 1232 JSObject* interceptor_holder, |
| 1234 LookupResult* lookup, | 1233 LookupResult* lookup, |
| 1235 Register receiver, | 1234 Register receiver, |
| 1236 Register name_reg, | 1235 Register name_reg, |
| 1237 Register scratch1, | 1236 Register scratch1, |
| 1238 Register scratch2, | 1237 Register scratch2, |
| (...skipping 1492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2731 JSObject* object, | 2730 JSObject* object, |
| 2732 JSObject* holder, | 2731 JSObject* holder, |
| 2733 AccessorInfo* callback) { | 2732 AccessorInfo* callback) { |
| 2734 // ----------- S t a t e ------------- | 2733 // ----------- S t a t e ------------- |
| 2735 // -- r0 : receiver | 2734 // -- r0 : receiver |
| 2736 // -- r2 : name | 2735 // -- r2 : name |
| 2737 // -- lr : return address | 2736 // -- lr : return address |
| 2738 // ----------------------------------- | 2737 // ----------------------------------- |
| 2739 Label miss; | 2738 Label miss; |
| 2740 | 2739 |
| 2741 Failure* failure = Failure::InternalError(); | 2740 MaybeObject* result = GenerateLoadCallback(object, holder, r0, r2, r3, r1, r4, |
| 2742 bool success = GenerateLoadCallback(object, holder, r0, r2, r3, r1, r4, | 2741 callback, name, &miss); |
| 2743 callback, name, &miss, &failure); | 2742 if (result->IsFailure()) { |
| 2744 if (!success) { | |
| 2745 miss.Unuse(); | 2743 miss.Unuse(); |
| 2746 return failure; | 2744 return result; |
| 2747 } | 2745 } |
| 2748 | 2746 |
| 2749 __ bind(&miss); | 2747 __ bind(&miss); |
| 2750 GenerateLoadMiss(masm(), Code::LOAD_IC); | 2748 GenerateLoadMiss(masm(), Code::LOAD_IC); |
| 2751 | 2749 |
| 2752 // Return the generated code. | 2750 // Return the generated code. |
| 2753 return GetCode(CALLBACKS, name); | 2751 return GetCode(CALLBACKS, name); |
| 2754 } | 2752 } |
| 2755 | 2753 |
| 2756 | 2754 |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2883 // -- lr : return address | 2881 // -- lr : return address |
| 2884 // -- r0 : key | 2882 // -- r0 : key |
| 2885 // -- r1 : receiver | 2883 // -- r1 : receiver |
| 2886 // ----------------------------------- | 2884 // ----------------------------------- |
| 2887 Label miss; | 2885 Label miss; |
| 2888 | 2886 |
| 2889 // Check the key is the cached one. | 2887 // Check the key is the cached one. |
| 2890 __ cmp(r0, Operand(Handle<String>(name))); | 2888 __ cmp(r0, Operand(Handle<String>(name))); |
| 2891 __ b(ne, &miss); | 2889 __ b(ne, &miss); |
| 2892 | 2890 |
| 2893 Failure* failure = Failure::InternalError(); | 2891 MaybeObject* result = GenerateLoadCallback(receiver, holder, r1, r0, r2, r3, |
| 2894 bool success = GenerateLoadCallback(receiver, holder, r1, r0, r2, r3, r4, | 2892 r4, callback, name, &miss); |
| 2895 callback, name, &miss, &failure); | 2893 if (result->IsFailure()) { |
| 2896 if (!success) { | |
| 2897 miss.Unuse(); | 2894 miss.Unuse(); |
| 2898 return failure; | 2895 return result; |
| 2899 } | 2896 } |
| 2900 | 2897 |
| 2901 __ bind(&miss); | 2898 __ bind(&miss); |
| 2902 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); | 2899 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
| 2903 | 2900 |
| 2904 return GetCode(CALLBACKS, name); | 2901 return GetCode(CALLBACKS, name); |
| 2905 } | 2902 } |
| 2906 | 2903 |
| 2907 | 2904 |
| 2908 MaybeObject* KeyedLoadStubCompiler::CompileLoadConstant(String* name, | 2905 MaybeObject* KeyedLoadStubCompiler::CompileLoadConstant(String* name, |
| (...skipping 1015 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3924 | 3921 |
| 3925 return GetCode(flags); | 3922 return GetCode(flags); |
| 3926 } | 3923 } |
| 3927 | 3924 |
| 3928 | 3925 |
| 3929 #undef __ | 3926 #undef __ |
| 3930 | 3927 |
| 3931 } } // namespace v8::internal | 3928 } } // namespace v8::internal |
| 3932 | 3929 |
| 3933 #endif // V8_TARGET_ARCH_ARM | 3930 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |