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

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

Issue 1186823003: Clean up JSConstructStub (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebased Created 5 years, 6 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 | « no previous file | src/arm/macro-assembler-arm.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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_ARM 7 #if V8_TARGET_ARCH_ARM
8 8
9 #include "src/codegen.h" 9 #include "src/codegen.h"
10 #include "src/debug.h" 10 #include "src/debug.h"
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 if (create_memento) { 439 if (create_memento) {
440 __ add(r3, r3, Operand(AllocationMemento::kSize / kPointerSize)); 440 __ add(r3, r3, Operand(AllocationMemento::kSize / kPointerSize));
441 } 441 }
442 442
443 __ Allocate(r3, r4, r5, r6, &rt_call, SIZE_IN_WORDS); 443 __ Allocate(r3, r4, r5, r6, &rt_call, SIZE_IN_WORDS);
444 444
445 // Allocated the JSObject, now initialize the fields. Map is set to 445 // Allocated the JSObject, now initialize the fields. Map is set to
446 // initial map and properties and elements are set to empty fixed array. 446 // initial map and properties and elements are set to empty fixed array.
447 // r1: constructor function 447 // r1: constructor function
448 // r2: initial map 448 // r2: initial map
449 // r3: object size (not including memento if create_memento) 449 // r3: object size (including memento if create_memento)
450 // r4: JSObject (not tagged) 450 // r4: JSObject (not tagged)
451 __ LoadRoot(r6, Heap::kEmptyFixedArrayRootIndex); 451 __ LoadRoot(r6, Heap::kEmptyFixedArrayRootIndex);
452 __ mov(r5, r4); 452 __ mov(r5, r4);
453 DCHECK_EQ(0 * kPointerSize, JSObject::kMapOffset); 453 DCHECK_EQ(0 * kPointerSize, JSObject::kMapOffset);
454 __ str(r2, MemOperand(r5, kPointerSize, PostIndex)); 454 __ str(r2, MemOperand(r5, kPointerSize, PostIndex));
455 DCHECK_EQ(1 * kPointerSize, JSObject::kPropertiesOffset); 455 DCHECK_EQ(1 * kPointerSize, JSObject::kPropertiesOffset);
456 __ str(r6, MemOperand(r5, kPointerSize, PostIndex)); 456 __ str(r6, MemOperand(r5, kPointerSize, PostIndex));
457 DCHECK_EQ(2 * kPointerSize, JSObject::kElementsOffset); 457 DCHECK_EQ(2 * kPointerSize, JSObject::kElementsOffset);
458 __ str(r6, MemOperand(r5, kPointerSize, PostIndex)); 458 __ str(r6, MemOperand(r5, kPointerSize, PostIndex));
459 459
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 __ InitializeFieldsWithFiller(r5, r0, r6); 513 __ InitializeFieldsWithFiller(r5, r0, r6);
514 } 514 }
515 515
516 // Add the object tag to make the JSObject real, so that we can continue 516 // Add the object tag to make the JSObject real, so that we can continue
517 // and jump into the continuation code at any time from now on. Any 517 // and jump into the continuation code at any time from now on. Any
518 // failures need to undo the allocation, so that the heap is in a 518 // failures need to undo the allocation, so that the heap is in a
519 // consistent state and verifiable. 519 // consistent state and verifiable.
520 __ add(r4, r4, Operand(kHeapObjectTag)); 520 __ add(r4, r4, Operand(kHeapObjectTag));
521 521
522 // Check if a non-empty properties array is needed. Continue with 522 // Check if a non-empty properties array is needed. Continue with
523 // allocated object if not fall through to runtime call if it is. 523 // allocated object if not; allocate and initialize a FixedArray if yes.
524 // r1: constructor function 524 // r1: constructor function
525 // r4: JSObject 525 // r4: JSObject
526 // r5: start of next object (not tagged) 526 // r5: start of next object (not tagged)
527 __ ldrb(r3, FieldMemOperand(r2, Map::kUnusedPropertyFieldsOffset)); 527 __ ldrb(r3, FieldMemOperand(r2, Map::kUnusedPropertyFieldsOffset));
528 // The field instance sizes contains both pre-allocated property fields 528 // The field instance sizes contains both pre-allocated property fields
529 // and in-object properties. 529 // and in-object properties.
530 __ ldr(r0, FieldMemOperand(r2, Map::kInstanceSizesOffset)); 530 __ ldr(r0, FieldMemOperand(r2, Map::kInstanceSizesOffset));
531 __ Ubfx(r6, r0, Map::kPreAllocatedPropertyFieldsByte * kBitsPerByte, 531 __ Ubfx(r6, r0, Map::kPreAllocatedPropertyFieldsByte * kBitsPerByte,
532 kBitsPerByte); 532 kBitsPerByte);
533 __ add(r3, r3, Operand(r6)); 533 __ add(r3, r3, Operand(r6));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 __ str(r0, MemOperand(r2, kPointerSize, PostIndex)); 568 __ str(r0, MemOperand(r2, kPointerSize, PostIndex));
569 569
570 // Initialize the fields to undefined. 570 // Initialize the fields to undefined.
571 // r1: constructor function 571 // r1: constructor function
572 // r2: First element of FixedArray (not tagged) 572 // r2: First element of FixedArray (not tagged)
573 // r3: number of elements in properties array 573 // r3: number of elements in properties array
574 // r4: JSObject 574 // r4: JSObject
575 // r5: FixedArray (not tagged) 575 // r5: FixedArray (not tagged)
576 __ add(r6, r2, Operand(r3, LSL, kPointerSizeLog2)); // End of object. 576 __ add(r6, r2, Operand(r3, LSL, kPointerSizeLog2)); // End of object.
577 DCHECK_EQ(2 * kPointerSize, FixedArray::kHeaderSize); 577 DCHECK_EQ(2 * kPointerSize, FixedArray::kHeaderSize);
578 { Label loop, entry; 578 __ LoadRoot(r0, Heap::kUndefinedValueRootIndex);
579 __ LoadRoot(r0, Heap::kUndefinedValueRootIndex); 579 __ InitializeFieldsWithFiller(r2, r6, r0);
580 __ b(&entry);
581 __ bind(&loop);
582 __ str(r0, MemOperand(r2, kPointerSize, PostIndex));
583 __ bind(&entry);
584 __ cmp(r2, r6);
585 __ b(lt, &loop);
586 }
587 580
588 // Store the initialized FixedArray into the properties field of 581 // Store the initialized FixedArray into the properties field of
589 // the JSObject 582 // the JSObject
590 // r1: constructor function 583 // r1: constructor function
591 // r4: JSObject 584 // r4: JSObject
592 // r5: FixedArray (not tagged) 585 // r5: FixedArray (not tagged)
593 __ add(r5, r5, Operand(kHeapObjectTag)); // Add the heap tag. 586 __ add(r5, r5, Operand(kHeapObjectTag)); // Add the heap tag.
594 __ str(r5, FieldMemOperand(r4, JSObject::kPropertiesOffset)); 587 __ str(r5, FieldMemOperand(r4, JSObject::kPropertiesOffset));
595 588
596 // Continue with JSObject being successfully allocated 589 // Continue with JSObject being successfully allocated
(...skipping 1213 matching lines...) Expand 10 before | Expand all | Expand 10 after
1810 } 1803 }
1811 } 1804 }
1812 1805
1813 1806
1814 #undef __ 1807 #undef __
1815 1808
1816 } // namespace internal 1809 } // namespace internal
1817 } // namespace v8 1810 } // namespace v8
1818 1811
1819 #endif // V8_TARGET_ARCH_ARM 1812 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/arm/macro-assembler-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698