OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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_X64 | 7 #if V8_TARGET_ARCH_X64 |
8 | 8 |
9 #include "src/ic/call-optimization.h" | 9 #include "src/ic/call-optimization.h" |
10 #include "src/ic/handler-compiler.h" | 10 #include "src/ic/handler-compiler.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 | 49 |
50 Label done; | 50 Label done; |
51 NameDictionaryLookupStub::GenerateNegativeLookup(masm, miss_label, &done, | 51 NameDictionaryLookupStub::GenerateNegativeLookup(masm, miss_label, &done, |
52 properties, name, scratch1); | 52 properties, name, scratch1); |
53 __ bind(&done); | 53 __ bind(&done); |
54 __ DecrementCounter(counters->negative_lookups_miss(), 1); | 54 __ DecrementCounter(counters->negative_lookups_miss(), 1); |
55 } | 55 } |
56 | 56 |
57 | 57 |
58 void NamedLoadHandlerCompiler::GenerateDirectLoadGlobalFunctionPrototype( | 58 void NamedLoadHandlerCompiler::GenerateDirectLoadGlobalFunctionPrototype( |
59 MacroAssembler* masm, int index, Register prototype, Label* miss) { | 59 MacroAssembler* masm, int index, Register result, Label* miss) { |
60 Isolate* isolate = masm->isolate(); | |
61 // Get the global function with the given index. | |
62 Handle<JSFunction> function( | |
63 JSFunction::cast(isolate->native_context()->get(index))); | |
64 | |
65 // Check we're still in the same context. | |
66 Register scratch = prototype; | |
67 const int offset = Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX); | 60 const int offset = Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX); |
68 __ movp(scratch, Operand(rsi, offset)); | 61 __ movp(result, Operand(rsi, offset)); |
69 __ movp(scratch, FieldOperand(scratch, GlobalObject::kNativeContextOffset)); | 62 __ movp(result, FieldOperand(result, GlobalObject::kNativeContextOffset)); |
70 __ Cmp(Operand(scratch, Context::SlotOffset(index)), function); | 63 __ movp(result, Operand(result, Context::SlotOffset(index))); |
71 __ j(not_equal, miss); | |
72 | |
73 // Load its initial map. The global functions all have initial maps. | 64 // Load its initial map. The global functions all have initial maps. |
74 __ Move(prototype, Handle<Map>(function->initial_map())); | 65 __ movp(result, |
| 66 FieldOperand(result, JSFunction::kPrototypeOrInitialMapOffset)); |
75 // Load the prototype from the initial map. | 67 // Load the prototype from the initial map. |
76 __ movp(prototype, FieldOperand(prototype, Map::kPrototypeOffset)); | 68 __ movp(result, FieldOperand(result, Map::kPrototypeOffset)); |
77 } | 69 } |
78 | 70 |
79 | 71 |
80 void NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype( | 72 void NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype( |
81 MacroAssembler* masm, Register receiver, Register result, Register scratch, | 73 MacroAssembler* masm, Register receiver, Register result, Register scratch, |
82 Label* miss_label) { | 74 Label* miss_label) { |
83 __ TryGetFunctionPrototype(receiver, result, miss_label); | 75 __ TryGetFunctionPrototype(receiver, result, miss_label); |
84 if (!result.is(rax)) __ movp(rax, result); | 76 if (!result.is(rax)) __ movp(rax, result); |
85 __ ret(0); | 77 __ ret(0); |
86 } | 78 } |
(...skipping 602 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 // Return the generated code. | 681 // Return the generated code. |
690 return GetCode(kind(), Code::NORMAL, name); | 682 return GetCode(kind(), Code::NORMAL, name); |
691 } | 683 } |
692 | 684 |
693 | 685 |
694 #undef __ | 686 #undef __ |
695 } | 687 } |
696 } // namespace v8::internal | 688 } // namespace v8::internal |
697 | 689 |
698 #endif // V8_TARGET_ARCH_X64 | 690 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |