Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(335)

Side by Side Diff: src/x64/code-stubs-x64.cc

Issue 2622003004: [ic] Port {Load,Store}IC_Normal to TF (Closed)
Patch Set: fix nit Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/x64/code-stubs-x64.h ('k') | src/x87/code-stubs-x87.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #if V8_TARGET_ARCH_X64 5 #if V8_TARGET_ARCH_X64
6 6
7 #include "src/code-stubs.h" 7 #include "src/code-stubs.h"
8 #include "src/api-arguments.h" 8 #include "src/api-arguments.h"
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 2558 matching lines...) Expand 10 before | Expand all | Expand 10 after
2569 NameDictionaryLookupStub stub(masm->isolate(), properties, r0, r0, 2569 NameDictionaryLookupStub stub(masm->isolate(), properties, r0, r0,
2570 NEGATIVE_LOOKUP); 2570 NEGATIVE_LOOKUP);
2571 __ Push(Handle<Object>(name)); 2571 __ Push(Handle<Object>(name));
2572 __ Push(Immediate(name->Hash())); 2572 __ Push(Immediate(name->Hash()));
2573 __ CallStub(&stub); 2573 __ CallStub(&stub);
2574 __ testp(r0, r0); 2574 __ testp(r0, r0);
2575 __ j(not_zero, miss); 2575 __ j(not_zero, miss);
2576 __ jmp(done); 2576 __ jmp(done);
2577 } 2577 }
2578 2578
2579
2580 // Probe the name dictionary in the |elements| register. Jump to the
2581 // |done| label if a property with the given name is found leaving the
2582 // index into the dictionary in |r1|. Jump to the |miss| label
2583 // otherwise.
2584 void NameDictionaryLookupStub::GeneratePositiveLookup(MacroAssembler* masm,
2585 Label* miss,
2586 Label* done,
2587 Register elements,
2588 Register name,
2589 Register r0,
2590 Register r1) {
2591 DCHECK(!elements.is(r0));
2592 DCHECK(!elements.is(r1));
2593 DCHECK(!name.is(r0));
2594 DCHECK(!name.is(r1));
2595
2596 __ AssertName(name);
2597
2598 __ SmiToInteger32(r0, FieldOperand(elements, kCapacityOffset));
2599 __ decl(r0);
2600
2601 for (int i = 0; i < kInlinedProbes; i++) {
2602 // Compute the masked index: (hash + i + i * i) & mask.
2603 __ movl(r1, FieldOperand(name, Name::kHashFieldOffset));
2604 __ shrl(r1, Immediate(Name::kHashShift));
2605 if (i > 0) {
2606 __ addl(r1, Immediate(NameDictionary::GetProbeOffset(i)));
2607 }
2608 __ andp(r1, r0);
2609
2610 // Scale the index by multiplying by the entry size.
2611 STATIC_ASSERT(NameDictionary::kEntrySize == 3);
2612 __ leap(r1, Operand(r1, r1, times_2, 0)); // r1 = r1 * 3
2613
2614 // Check if the key is identical to the name.
2615 __ cmpp(name, Operand(elements, r1, times_pointer_size,
2616 kElementsStartOffset - kHeapObjectTag));
2617 __ j(equal, done);
2618 }
2619
2620 NameDictionaryLookupStub stub(masm->isolate(), elements, r0, r1,
2621 POSITIVE_LOOKUP);
2622 __ Push(name);
2623 __ movl(r0, FieldOperand(name, Name::kHashFieldOffset));
2624 __ shrl(r0, Immediate(Name::kHashShift));
2625 __ Push(r0);
2626 __ CallStub(&stub);
2627
2628 __ testp(r0, r0);
2629 __ j(zero, miss);
2630 __ jmp(done);
2631 }
2632
2633
2634 void NameDictionaryLookupStub::Generate(MacroAssembler* masm) { 2579 void NameDictionaryLookupStub::Generate(MacroAssembler* masm) {
2635 // This stub overrides SometimesSetsUpAFrame() to return false. That means 2580 // This stub overrides SometimesSetsUpAFrame() to return false. That means
2636 // we cannot call anything that could cause a GC from this stub. 2581 // we cannot call anything that could cause a GC from this stub.
2637 // Stack frame on entry: 2582 // Stack frame on entry:
2638 // rsp[0 * kPointerSize] : return address. 2583 // rsp[0 * kPointerSize] : return address.
2639 // rsp[1 * kPointerSize] : key's hash. 2584 // rsp[1 * kPointerSize] : key's hash.
2640 // rsp[2 * kPointerSize] : key. 2585 // rsp[2 * kPointerSize] : key.
2641 // Registers: 2586 // Registers:
2642 // dictionary_: NameDictionary to probe. 2587 // dictionary_: NameDictionary to probe.
2643 // result_: used as scratch. 2588 // result_: used as scratch.
(...skipping 1535 matching lines...) Expand 10 before | Expand all | Expand 10 after
4179 kStackUnwindSpace, nullptr, return_value_operand, 4124 kStackUnwindSpace, nullptr, return_value_operand,
4180 NULL); 4125 NULL);
4181 } 4126 }
4182 4127
4183 #undef __ 4128 #undef __
4184 4129
4185 } // namespace internal 4130 } // namespace internal
4186 } // namespace v8 4131 } // namespace v8
4187 4132
4188 #endif // V8_TARGET_ARCH_X64 4133 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/x64/code-stubs-x64.h ('k') | src/x87/code-stubs-x87.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698