| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #if V8_TARGET_ARCH_ARM64 | 7 #if V8_TARGET_ARCH_ARM64 |
| 8 | 8 |
| 9 #include "src/codegen.h" | 9 #include "src/codegen.h" |
| 10 #include "src/ic-inl.h" | 10 #include "src/ic-inl.h" |
| (...skipping 776 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 787 __ B(&success); | 787 __ B(&success); |
| 788 | 788 |
| 789 GenerateRestoreName(miss, name); | 789 GenerateRestoreName(miss, name); |
| 790 TailCallBuiltin(masm(), MissBuiltin(kind())); | 790 TailCallBuiltin(masm(), MissBuiltin(kind())); |
| 791 | 791 |
| 792 __ Bind(&success); | 792 __ Bind(&success); |
| 793 } | 793 } |
| 794 } | 794 } |
| 795 | 795 |
| 796 | 796 |
| 797 Register NamedLoadHandlerCompiler::CallbackFrontend(Register object_reg, | |
| 798 Handle<Name> name, | |
| 799 Handle<Object> callback) { | |
| 800 Label miss; | |
| 801 | |
| 802 Register reg = FrontendHeader(object_reg, name, &miss); | |
| 803 // FrontendHeader can return its result into scratch1() so do not | |
| 804 // use it. | |
| 805 Register scratch2 = this->scratch2(); | |
| 806 Register scratch3 = this->scratch3(); | |
| 807 Register dictionary = this->scratch4(); | |
| 808 DCHECK(!AreAliased(reg, scratch2, scratch3, dictionary)); | |
| 809 | |
| 810 if (!holder()->HasFastProperties()) { | |
| 811 DCHECK(!holder()->IsGlobalObject()); | |
| 812 // Load the properties dictionary. | |
| 813 __ Ldr(dictionary, FieldMemOperand(reg, JSObject::kPropertiesOffset)); | |
| 814 | |
| 815 // Probe the dictionary. | |
| 816 Label probe_done; | |
| 817 NameDictionaryLookupStub::GeneratePositiveLookup(masm(), | |
| 818 &miss, | |
| 819 &probe_done, | |
| 820 dictionary, | |
| 821 this->name(), | |
| 822 scratch2, | |
| 823 scratch3); | |
| 824 __ Bind(&probe_done); | |
| 825 | |
| 826 // If probing finds an entry in the dictionary, scratch3 contains the | |
| 827 // pointer into the dictionary. Check that the value is the callback. | |
| 828 Register pointer = scratch3; | |
| 829 const int kElementsStartOffset = NameDictionary::kHeaderSize + | |
| 830 NameDictionary::kElementsStartIndex * kPointerSize; | |
| 831 const int kValueOffset = kElementsStartOffset + kPointerSize; | |
| 832 __ Ldr(scratch2, FieldMemOperand(pointer, kValueOffset)); | |
| 833 __ Cmp(scratch2, Operand(callback)); | |
| 834 __ B(ne, &miss); | |
| 835 } | |
| 836 | |
| 837 FrontendFooter(name, &miss); | |
| 838 return reg; | |
| 839 } | |
| 840 | |
| 841 | |
| 842 void NamedLoadHandlerCompiler::GenerateLoadField( | 797 void NamedLoadHandlerCompiler::GenerateLoadField( |
| 843 Register reg, FieldIndex field, Representation representation) { | 798 Register reg, FieldIndex field, Representation representation) { |
| 844 __ Mov(receiver(), reg); | 799 __ Mov(receiver(), reg); |
| 845 LoadFieldStub stub(isolate(), field); | 800 LoadFieldStub stub(isolate(), field); |
| 846 GenerateTailCall(masm(), stub.GetCode()); | 801 GenerateTailCall(masm(), stub.GetCode()); |
| 847 } | 802 } |
| 848 | 803 |
| 849 | 804 |
| 850 void NamedLoadHandlerCompiler::GenerateLoadConstant(Handle<Object> value) { | 805 void NamedLoadHandlerCompiler::GenerateLoadConstant(Handle<Object> value) { |
| 851 // Return the constant value. | 806 // Return the constant value. |
| (...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1298 | 1253 |
| 1299 // Miss case, call the runtime. | 1254 // Miss case, call the runtime. |
| 1300 __ Bind(&miss); | 1255 __ Bind(&miss); |
| 1301 TailCallBuiltin(masm, Builtins::kKeyedLoadIC_Miss); | 1256 TailCallBuiltin(masm, Builtins::kKeyedLoadIC_Miss); |
| 1302 } | 1257 } |
| 1303 | 1258 |
| 1304 | 1259 |
| 1305 } } // namespace v8::internal | 1260 } } // namespace v8::internal |
| 1306 | 1261 |
| 1307 #endif // V8_TARGET_ARCH_ARM64 | 1262 #endif // V8_TARGET_ARCH_ARM64 |
| OLD | NEW |