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 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/api.h" | 8 #include "src/api.h" |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/base/once.h" | 10 #include "src/base/once.h" |
(...skipping 2087 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2098 } | 2098 } |
2099 } | 2099 } |
2100 | 2100 |
2101 template <int alignment> | 2101 template <int alignment> |
2102 static inline bool SemiSpaceCopyObject(Map* map, HeapObject** slot, | 2102 static inline bool SemiSpaceCopyObject(Map* map, HeapObject** slot, |
2103 HeapObject* object, int object_size) { | 2103 HeapObject* object, int object_size) { |
2104 Heap* heap = map->GetHeap(); | 2104 Heap* heap = map->GetHeap(); |
2105 | 2105 |
2106 DCHECK(heap->AllowedToBeMigrated(object, NEW_SPACE)); | 2106 DCHECK(heap->AllowedToBeMigrated(object, NEW_SPACE)); |
2107 AllocationResult allocation; | 2107 AllocationResult allocation; |
| 2108 #ifndef V8_HOST_ARCH_64_BIT |
2108 if (alignment == kDoubleAlignment) { | 2109 if (alignment == kDoubleAlignment) { |
2109 allocation = heap->new_space()->AllocateRawDoubleAligned(object_size); | 2110 allocation = heap->new_space()->AllocateRawDoubleAligned(object_size); |
2110 } else { | 2111 } else { |
2111 allocation = heap->new_space()->AllocateRaw(object_size); | 2112 allocation = heap->new_space()->AllocateRaw(object_size); |
2112 } | 2113 } |
| 2114 #else |
| 2115 allocation = heap->new_space()->AllocateRaw(object_size); |
| 2116 #endif |
2113 | 2117 |
2114 HeapObject* target = NULL; // Initialization to please compiler. | 2118 HeapObject* target = NULL; // Initialization to please compiler. |
2115 if (allocation.To(&target)) { | 2119 if (allocation.To(&target)) { |
2116 // Order is important here: Set the promotion limit before storing a | 2120 // Order is important here: Set the promotion limit before storing a |
2117 // filler for double alignment or migrating the object. Otherwise we | 2121 // filler for double alignment or migrating the object. Otherwise we |
2118 // may end up overwriting promotion queue entries when we migrate the | 2122 // may end up overwriting promotion queue entries when we migrate the |
2119 // object. | 2123 // object. |
2120 heap->promotion_queue()->SetNewLimit(heap->new_space()->top()); | 2124 heap->promotion_queue()->SetNewLimit(heap->new_space()->top()); |
2121 | 2125 |
2122 MigrateObject(heap, object, target, object_size); | 2126 MigrateObject(heap, object, target, object_size); |
2123 | 2127 |
2124 // Update slot to new target. | 2128 // Update slot to new target. |
2125 *slot = target; | 2129 *slot = target; |
2126 | 2130 |
2127 heap->IncrementSemiSpaceCopiedObjectSize(object_size); | 2131 heap->IncrementSemiSpaceCopiedObjectSize(object_size); |
2128 return true; | 2132 return true; |
2129 } | 2133 } |
2130 return false; | 2134 return false; |
2131 } | 2135 } |
2132 | 2136 |
2133 | 2137 |
2134 template <ObjectContents object_contents, int alignment> | 2138 template <ObjectContents object_contents, int alignment> |
2135 static inline bool PromoteObject(Map* map, HeapObject** slot, | 2139 static inline bool PromoteObject(Map* map, HeapObject** slot, |
2136 HeapObject* object, int object_size) { | 2140 HeapObject* object, int object_size) { |
2137 Heap* heap = map->GetHeap(); | 2141 Heap* heap = map->GetHeap(); |
2138 | 2142 |
2139 AllocationResult allocation; | 2143 AllocationResult allocation; |
| 2144 #ifndef V8_HOST_ARCH_64_BIT |
2140 if (alignment == kDoubleAlignment) { | 2145 if (alignment == kDoubleAlignment) { |
2141 allocation = heap->old_space()->AllocateRawDoubleAligned(object_size); | 2146 allocation = heap->old_space()->AllocateRawDoubleAligned(object_size); |
2142 } else { | 2147 } else { |
2143 allocation = heap->old_space()->AllocateRaw(object_size); | 2148 allocation = heap->old_space()->AllocateRaw(object_size); |
2144 } | 2149 } |
| 2150 #else |
| 2151 allocation = heap->old_space()->AllocateRaw(object_size); |
| 2152 #endif |
2145 | 2153 |
2146 HeapObject* target = NULL; // Initialization to please compiler. | 2154 HeapObject* target = NULL; // Initialization to please compiler. |
2147 if (allocation.To(&target)) { | 2155 if (allocation.To(&target)) { |
2148 MigrateObject(heap, object, target, object_size); | 2156 MigrateObject(heap, object, target, object_size); |
2149 | 2157 |
2150 // Update slot to new target. | 2158 // Update slot to new target. |
2151 *slot = target; | 2159 *slot = target; |
2152 | 2160 |
2153 if (object_contents == POINTER_OBJECT) { | 2161 if (object_contents == POINTER_OBJECT) { |
2154 if (map->instance_type() == JS_FUNCTION_TYPE) { | 2162 if (map->instance_type() == JS_FUNCTION_TYPE) { |
(...skipping 4314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6469 } | 6477 } |
6470 delete list; | 6478 delete list; |
6471 } else { | 6479 } else { |
6472 prev = list; | 6480 prev = list; |
6473 } | 6481 } |
6474 list = next; | 6482 list = next; |
6475 } | 6483 } |
6476 } | 6484 } |
6477 } | 6485 } |
6478 } // namespace v8::internal | 6486 } // namespace v8::internal |
OLD | NEW |