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

Side by Side Diff: src/mips64/builtins-mips64.cc

Issue 1239593003: Fix memento initialization when constructing from new call (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: addressed comment Created 5 years, 5 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/mips/builtins-mips.cc ('k') | src/x64/builtins-x64.cc » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 5
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #if V8_TARGET_ARCH_MIPS64 9 #if V8_TARGET_ARCH_MIPS64
10 10
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 329
330 // Should never create mementos for api functions. 330 // Should never create mementos for api functions.
331 DCHECK(!is_api_function || !create_memento); 331 DCHECK(!is_api_function || !create_memento);
332 332
333 Isolate* isolate = masm->isolate(); 333 Isolate* isolate = masm->isolate();
334 334
335 // Enter a construct frame. 335 // Enter a construct frame.
336 { 336 {
337 FrameScope scope(masm, StackFrame::CONSTRUCT); 337 FrameScope scope(masm, StackFrame::CONSTRUCT);
338 338
339 if (create_memento) {
340 __ AssertUndefinedOrAllocationSite(a2, t0);
341 __ push(a2);
342 }
343
344 // Preserve the incoming parameters on the stack. 339 // Preserve the incoming parameters on the stack.
340 __ AssertUndefinedOrAllocationSite(a2, t0);
345 __ SmiTag(a0); 341 __ SmiTag(a0);
346 __ Push(a0, a1, a3); 342 __ Push(a2, a0, a1, a3);
347 343
348 // Try to allocate the object without transitioning into C code. If any of 344 // Try to allocate the object without transitioning into C code. If any of
349 // the preconditions is not met, the code bails out to the runtime call. 345 // the preconditions is not met, the code bails out to the runtime call.
350 Label rt_call, allocated; 346 Label rt_call, allocated;
351 if (FLAG_inline_new) { 347 if (FLAG_inline_new) {
352 ExternalReference debug_step_in_fp = 348 ExternalReference debug_step_in_fp =
353 ExternalReference::debug_step_in_fp_address(isolate); 349 ExternalReference::debug_step_in_fp_address(isolate);
354 __ li(a2, Operand(debug_step_in_fp)); 350 __ li(a2, Operand(debug_step_in_fp));
355 __ ld(a2, MemOperand(a2)); 351 __ ld(a2, MemOperand(a2));
356 __ Branch(&rt_call, ne, a2, Operand(zero_reg)); 352 __ Branch(&rt_call, ne, a2, Operand(zero_reg));
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 __ Daddu(a0, t0, Operand(a0)); // End of object. 465 __ Daddu(a0, t0, Operand(a0)); // End of object.
470 __ InitializeFieldsWithFiller(t1, a0, t3); 466 __ InitializeFieldsWithFiller(t1, a0, t3);
471 467
472 // Fill in memento fields. 468 // Fill in memento fields.
473 // t1: points to the allocated but uninitialized memento. 469 // t1: points to the allocated but uninitialized memento.
474 __ LoadRoot(t3, Heap::kAllocationMementoMapRootIndex); 470 __ LoadRoot(t3, Heap::kAllocationMementoMapRootIndex);
475 DCHECK_EQ(0 * kPointerSize, AllocationMemento::kMapOffset); 471 DCHECK_EQ(0 * kPointerSize, AllocationMemento::kMapOffset);
476 __ sd(t3, MemOperand(t1)); 472 __ sd(t3, MemOperand(t1));
477 __ Daddu(t1, t1, kPointerSize); 473 __ Daddu(t1, t1, kPointerSize);
478 // Load the AllocationSite. 474 // Load the AllocationSite.
479 __ ld(t3, MemOperand(sp, 2 * kPointerSize)); 475 __ ld(t3, MemOperand(sp, 3 * kPointerSize));
476 __ AssertUndefinedOrAllocationSite(t3, a0);
480 DCHECK_EQ(1 * kPointerSize, AllocationMemento::kAllocationSiteOffset); 477 DCHECK_EQ(1 * kPointerSize, AllocationMemento::kAllocationSiteOffset);
481 __ sd(t3, MemOperand(t1)); 478 __ sd(t3, MemOperand(t1));
482 __ Daddu(t1, t1, kPointerSize); 479 __ Daddu(t1, t1, kPointerSize);
483 } else { 480 } else {
484 __ dsll(at, a3, kPointerSizeLog2); 481 __ dsll(at, a3, kPointerSizeLog2);
485 __ Daddu(a0, t0, Operand(at)); // End of object. 482 __ Daddu(a0, t0, Operand(at)); // End of object.
486 __ InitializeFieldsWithFiller(t1, a0, t3); 483 __ InitializeFieldsWithFiller(t1, a0, t3);
487 } 484 }
488 485
489 // Add the object tag to make the JSObject real, so that we can continue 486 // Add the object tag to make the JSObject real, so that we can continue
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 void Builtins::Generate_JSConstructStubForDerived(MacroAssembler* masm) { 648 void Builtins::Generate_JSConstructStubForDerived(MacroAssembler* masm) {
652 // ----------- S t a t e ------------- 649 // ----------- S t a t e -------------
653 // -- a0 : number of arguments 650 // -- a0 : number of arguments
654 // -- a1 : constructor function 651 // -- a1 : constructor function
655 // -- a2 : allocation site or undefined 652 // -- a2 : allocation site or undefined
656 // -- a3 : original constructor 653 // -- a3 : original constructor
657 // -- ra : return address 654 // -- ra : return address
658 // -- sp[...]: constructor arguments 655 // -- sp[...]: constructor arguments
659 // ----------------------------------- 656 // -----------------------------------
660 657
661 // TODO(dslomov): support pretenuring
662 CHECK(!FLAG_pretenuring_call_new);
663
664 { 658 {
665 FrameScope frame_scope(masm, StackFrame::CONSTRUCT); 659 FrameScope frame_scope(masm, StackFrame::CONSTRUCT);
666 660
661 __ AssertUndefinedOrAllocationSite(a2, t0);
662 __ push(a2);
663
667 __ mov(a4, a0); 664 __ mov(a4, a0);
668 __ SmiTag(a4); 665 __ SmiTag(a4);
669 __ push(a4); // Smi-tagged arguments count. 666 __ push(a4); // Smi-tagged arguments count.
670 667
671 // Push new.target. 668 // Push new.target.
672 __ push(a3); 669 __ push(a3);
673 670
674 // receiver is the hole. 671 // receiver is the hole.
675 __ LoadRoot(at, Heap::kTheHoleValueRootIndex); 672 __ LoadRoot(at, Heap::kTheHoleValueRootIndex);
676 __ push(at); 673 __ push(at);
(...skipping 1059 matching lines...) Expand 10 before | Expand all | Expand 10 after
1736 } 1733 }
1737 } 1734 }
1738 1735
1739 1736
1740 #undef __ 1737 #undef __
1741 1738
1742 } // namespace internal 1739 } // namespace internal
1743 } // namespace v8 1740 } // namespace v8
1744 1741
1745 #endif // V8_TARGET_ARCH_MIPS64 1742 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/mips/builtins-mips.cc ('k') | src/x64/builtins-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698