OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/globals.h" // NOLINT | 5 #include "vm/globals.h" // NOLINT |
6 #if defined(TARGET_ARCH_ARM) | 6 #if defined(TARGET_ARCH_ARM) |
7 | 7 |
8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
9 #include "vm/cpu.h" | 9 #include "vm/cpu.h" |
10 #include "vm/longjump.h" | 10 #include "vm/longjump.h" |
(...skipping 3453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3464 | 3464 |
3465 // Successfully allocated the object, now update top to point to | 3465 // Successfully allocated the object, now update top to point to |
3466 // next object start and store the class in the class field of object. | 3466 // next object start and store the class in the class field of object. |
3467 str(instance_reg, Address(temp_reg, Heap::TopOffset(space))); | 3467 str(instance_reg, Address(temp_reg, Heap::TopOffset(space))); |
3468 | 3468 |
3469 NOT_IN_PRODUCT(LoadAllocationStatsAddress(temp_reg, cls.id())); | 3469 NOT_IN_PRODUCT(LoadAllocationStatsAddress(temp_reg, cls.id())); |
3470 | 3470 |
3471 ASSERT(instance_size >= kHeapObjectTag); | 3471 ASSERT(instance_size >= kHeapObjectTag); |
3472 AddImmediate(instance_reg, -instance_size + kHeapObjectTag); | 3472 AddImmediate(instance_reg, -instance_size + kHeapObjectTag); |
3473 | 3473 |
3474 uint32_t tags = 0; | 3474 uword tags = 0; |
3475 tags = RawObject::SizeTag::update(instance_size, tags); | 3475 tags = RawObject::SizeTag::update(instance_size, tags); |
3476 ASSERT(cls.id() != kIllegalCid); | 3476 ASSERT(cls.id() != kIllegalCid); |
3477 tags = RawObject::ClassIdTag::update(cls.id(), tags); | 3477 tags = RawObject::ClassIdTag::update(cls.id(), tags); |
3478 LoadImmediate(IP, tags); | 3478 LoadImmediate(IP, tags); |
3479 str(IP, FieldAddress(instance_reg, Object::tags_offset())); | 3479 str(IP, FieldAddress(instance_reg, Object::tags_offset())); |
3480 | 3480 |
3481 NOT_IN_PRODUCT(IncrementAllocationStats(temp_reg, cls.id(), space)); | 3481 NOT_IN_PRODUCT(IncrementAllocationStats(temp_reg, cls.id(), space)); |
3482 } else { | 3482 } else { |
3483 b(failure); | 3483 b(failure); |
3484 } | 3484 } |
(...skipping 28 matching lines...) Expand all Loading... |
3513 | 3513 |
3514 NOT_IN_PRODUCT(LoadAllocationStatsAddress(temp2, cid)); | 3514 NOT_IN_PRODUCT(LoadAllocationStatsAddress(temp2, cid)); |
3515 | 3515 |
3516 // Successfully allocated the object(s), now update top to point to | 3516 // Successfully allocated the object(s), now update top to point to |
3517 // next object start and initialize the object. | 3517 // next object start and initialize the object. |
3518 str(end_address, Address(temp1, Heap::TopOffset(space))); | 3518 str(end_address, Address(temp1, Heap::TopOffset(space))); |
3519 add(instance, instance, Operand(kHeapObjectTag)); | 3519 add(instance, instance, Operand(kHeapObjectTag)); |
3520 | 3520 |
3521 // Initialize the tags. | 3521 // Initialize the tags. |
3522 // instance: new object start as a tagged pointer. | 3522 // instance: new object start as a tagged pointer. |
3523 uint32_t tags = 0; | 3523 uword tags = 0; |
3524 tags = RawObject::ClassIdTag::update(cid, tags); | 3524 tags = RawObject::ClassIdTag::update(cid, tags); |
3525 tags = RawObject::SizeTag::update(instance_size, tags); | 3525 tags = RawObject::SizeTag::update(instance_size, tags); |
3526 LoadImmediate(temp1, tags); | 3526 LoadImmediate(temp1, tags); |
3527 str(temp1, FieldAddress(instance, Array::tags_offset())); // Store tags. | 3527 str(temp1, FieldAddress(instance, Array::tags_offset())); // Store tags. |
3528 | 3528 |
3529 LoadImmediate(temp1, instance_size); | 3529 LoadImmediate(temp1, instance_size); |
3530 NOT_IN_PRODUCT(IncrementAllocationStatsWithSize(temp2, temp1, space)); | 3530 NOT_IN_PRODUCT(IncrementAllocationStatsWithSize(temp2, temp1, space)); |
3531 } else { | 3531 } else { |
3532 b(failure); | 3532 b(failure); |
3533 } | 3533 } |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3728 | 3728 |
3729 | 3729 |
3730 const char* Assembler::FpuRegisterName(FpuRegister reg) { | 3730 const char* Assembler::FpuRegisterName(FpuRegister reg) { |
3731 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); | 3731 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); |
3732 return fpu_reg_names[reg]; | 3732 return fpu_reg_names[reg]; |
3733 } | 3733 } |
3734 | 3734 |
3735 } // namespace dart | 3735 } // namespace dart |
3736 | 3736 |
3737 #endif // defined TARGET_ARCH_ARM | 3737 #endif // defined TARGET_ARCH_ARM |
OLD | NEW |