OLD | NEW |
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_X64 | 7 #if V8_TARGET_ARCH_X64 |
8 | 8 |
9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 4575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4586 #ifdef DEBUG | 4586 #ifdef DEBUG |
4587 cmpp(object, top_operand); | 4587 cmpp(object, top_operand); |
4588 Check(below, kUndoAllocationOfNonAllocatedMemory); | 4588 Check(below, kUndoAllocationOfNonAllocatedMemory); |
4589 #endif | 4589 #endif |
4590 movp(top_operand, object); | 4590 movp(top_operand, object); |
4591 } | 4591 } |
4592 | 4592 |
4593 | 4593 |
4594 void MacroAssembler::AllocateHeapNumber(Register result, | 4594 void MacroAssembler::AllocateHeapNumber(Register result, |
4595 Register scratch, | 4595 Register scratch, |
4596 Label* gc_required) { | 4596 Label* gc_required, |
| 4597 MutableMode mode) { |
4597 // Allocate heap number in new space. | 4598 // Allocate heap number in new space. |
4598 Allocate(HeapNumber::kSize, result, scratch, no_reg, gc_required, TAG_OBJECT); | 4599 Allocate(HeapNumber::kSize, result, scratch, no_reg, gc_required, TAG_OBJECT); |
4599 | 4600 |
| 4601 Heap::RootListIndex map_index = mode == MUTABLE |
| 4602 ? Heap::kMutableHeapNumberMapRootIndex |
| 4603 : Heap::kHeapNumberMapRootIndex; |
| 4604 |
4600 // Set the map. | 4605 // Set the map. |
4601 LoadRoot(kScratchRegister, Heap::kHeapNumberMapRootIndex); | 4606 LoadRoot(kScratchRegister, map_index); |
4602 movp(FieldOperand(result, HeapObject::kMapOffset), kScratchRegister); | 4607 movp(FieldOperand(result, HeapObject::kMapOffset), kScratchRegister); |
4603 } | 4608 } |
4604 | 4609 |
4605 | 4610 |
4606 void MacroAssembler::AllocateTwoByteString(Register result, | 4611 void MacroAssembler::AllocateTwoByteString(Register result, |
4607 Register length, | 4612 Register length, |
4608 Register scratch1, | 4613 Register scratch1, |
4609 Register scratch2, | 4614 Register scratch2, |
4610 Register scratch3, | 4615 Register scratch3, |
4611 Label* gc_required) { | 4616 Label* gc_required) { |
(...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5350 if (ms.shift() > 0) sarl(rdx, Immediate(ms.shift())); | 5355 if (ms.shift() > 0) sarl(rdx, Immediate(ms.shift())); |
5351 movl(rax, dividend); | 5356 movl(rax, dividend); |
5352 shrl(rax, Immediate(31)); | 5357 shrl(rax, Immediate(31)); |
5353 addl(rdx, rax); | 5358 addl(rdx, rax); |
5354 } | 5359 } |
5355 | 5360 |
5356 | 5361 |
5357 } } // namespace v8::internal | 5362 } } // namespace v8::internal |
5358 | 5363 |
5359 #endif // V8_TARGET_ARCH_X64 | 5364 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |