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

Side by Side Diff: src/arm64/codegen-arm64.cc

Issue 1922553002: Get rid of AllocationFlags::TAG_OBJECT (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Remove TAG_OBJECT from AllocationFlags Created 4 years, 7 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/arm64/code-stubs-arm64.cc ('k') | src/arm64/macro-assembler-arm64.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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/arm64/codegen-arm64.h" 5 #include "src/arm64/codegen-arm64.h"
6 6
7 #if V8_TARGET_ARCH_ARM64 7 #if V8_TARGET_ARCH_ARM64
8 8
9 #include "src/arm64/simulator-arm64.h" 9 #include "src/arm64/simulator-arm64.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 // Allocate new FixedDoubleArray. 168 // Allocate new FixedDoubleArray.
169 __ Lsl(array_size, length, kDoubleSizeLog2); 169 __ Lsl(array_size, length, kDoubleSizeLog2);
170 __ Add(array_size, array_size, FixedDoubleArray::kHeaderSize); 170 __ Add(array_size, array_size, FixedDoubleArray::kHeaderSize);
171 __ Allocate(array_size, array, x10, x11, &gc_required, DOUBLE_ALIGNMENT); 171 __ Allocate(array_size, array, x10, x11, &gc_required, DOUBLE_ALIGNMENT);
172 // Register array is non-tagged heap object. 172 // Register array is non-tagged heap object.
173 173
174 // Set the destination FixedDoubleArray's length and map. 174 // Set the destination FixedDoubleArray's length and map.
175 Register map_root = array_size; 175 Register map_root = array_size;
176 __ LoadRoot(map_root, Heap::kFixedDoubleArrayMapRootIndex); 176 __ LoadRoot(map_root, Heap::kFixedDoubleArrayMapRootIndex);
177 __ SmiTag(x11, length); 177 __ SmiTag(x11, length);
178 __ Str(x11, MemOperand(array, FixedDoubleArray::kLengthOffset)); 178 __ Str(x11, FieldMemOperand(array, FixedDoubleArray::kLengthOffset));
179 __ Str(map_root, MemOperand(array, HeapObject::kMapOffset)); 179 __ Str(map_root, FieldMemOperand(array, HeapObject::kMapOffset));
180 180
181 __ Str(target_map, FieldMemOperand(receiver, HeapObject::kMapOffset)); 181 __ Str(target_map, FieldMemOperand(receiver, HeapObject::kMapOffset));
182 __ RecordWriteField(receiver, HeapObject::kMapOffset, target_map, scratch, 182 __ RecordWriteField(receiver, HeapObject::kMapOffset, target_map, scratch,
183 kLRHasBeenSaved, kDontSaveFPRegs, OMIT_REMEMBERED_SET, 183 kLRHasBeenSaved, kDontSaveFPRegs, OMIT_REMEMBERED_SET,
184 OMIT_SMI_CHECK); 184 OMIT_SMI_CHECK);
185 185
186 // Replace receiver's backing store with newly created FixedDoubleArray. 186 // Replace receiver's backing store with newly created FixedDoubleArray.
187 __ Add(x10, array, kHeapObjectTag); 187 __ Move(x10, array);
188 __ Str(x10, FieldMemOperand(receiver, JSObject::kElementsOffset)); 188 __ Str(array, FieldMemOperand(receiver, JSObject::kElementsOffset));
189 __ RecordWriteField(receiver, JSObject::kElementsOffset, x10, 189 __ RecordWriteField(receiver, JSObject::kElementsOffset, x10, scratch,
190 scratch, kLRHasBeenSaved, kDontSaveFPRegs, 190 kLRHasBeenSaved, kDontSaveFPRegs, EMIT_REMEMBERED_SET,
191 EMIT_REMEMBERED_SET, OMIT_SMI_CHECK); 191 OMIT_SMI_CHECK);
192 192
193 // Prepare for conversion loop. 193 // Prepare for conversion loop.
194 Register src_elements = x10; 194 Register src_elements = x10;
195 Register dst_elements = x11; 195 Register dst_elements = x11;
196 Register dst_end = x12; 196 Register dst_end = x12;
197 __ Add(src_elements, elements, FixedArray::kHeaderSize - kHeapObjectTag); 197 __ Add(src_elements, elements, FixedArray::kHeaderSize - kHeapObjectTag);
198 __ Add(dst_elements, array, FixedDoubleArray::kHeaderSize); 198 __ Add(dst_elements, array, FixedDoubleArray::kHeaderSize - kHeapObjectTag);
199 __ Add(dst_end, dst_elements, Operand(length, LSL, kDoubleSizeLog2)); 199 __ Add(dst_end, dst_elements, Operand(length, LSL, kDoubleSizeLog2));
200 200
201 FPRegister nan_d = d1; 201 FPRegister nan_d = d1;
202 __ Fmov(nan_d, rawbits_to_double(kHoleNanInt64)); 202 __ Fmov(nan_d, rawbits_to_double(kHoleNanInt64));
203 203
204 Label entry, done; 204 Label entry, done;
205 __ B(&entry); 205 __ B(&entry);
206 206
207 __ Bind(&only_change_map); 207 __ Bind(&only_change_map);
208 __ Str(target_map, FieldMemOperand(receiver, HeapObject::kMapOffset)); 208 __ Str(target_map, FieldMemOperand(receiver, HeapObject::kMapOffset));
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 // Allocate new FixedArray. 275 // Allocate new FixedArray.
276 Label gc_required; 276 Label gc_required;
277 __ Mov(array_size, FixedDoubleArray::kHeaderSize); 277 __ Mov(array_size, FixedDoubleArray::kHeaderSize);
278 __ Add(array_size, array_size, Operand(length, LSL, kPointerSizeLog2)); 278 __ Add(array_size, array_size, Operand(length, LSL, kPointerSizeLog2));
279 __ Allocate(array_size, array, x10, x11, &gc_required, NO_ALLOCATION_FLAGS); 279 __ Allocate(array_size, array, x10, x11, &gc_required, NO_ALLOCATION_FLAGS);
280 280
281 // Set destination FixedDoubleArray's length and map. 281 // Set destination FixedDoubleArray's length and map.
282 Register map_root = array_size; 282 Register map_root = array_size;
283 __ LoadRoot(map_root, Heap::kFixedArrayMapRootIndex); 283 __ LoadRoot(map_root, Heap::kFixedArrayMapRootIndex);
284 __ SmiTag(x11, length); 284 __ SmiTag(x11, length);
285 __ Str(x11, MemOperand(array, FixedDoubleArray::kLengthOffset)); 285 __ Str(x11, FieldMemOperand(array, FixedDoubleArray::kLengthOffset));
286 __ Str(map_root, MemOperand(array, HeapObject::kMapOffset)); 286 __ Str(map_root, FieldMemOperand(array, HeapObject::kMapOffset));
287 287
288 // Prepare for conversion loop. 288 // Prepare for conversion loop.
289 Register src_elements = x10; 289 Register src_elements = x10;
290 Register dst_elements = x11; 290 Register dst_elements = x11;
291 Register dst_end = x12; 291 Register dst_end = x12;
292 Register the_hole = x14; 292 Register the_hole = x14;
293 __ LoadRoot(the_hole, Heap::kTheHoleValueRootIndex); 293 __ LoadRoot(the_hole, Heap::kTheHoleValueRootIndex);
294 __ Add(src_elements, elements, 294 __ Add(src_elements, elements,
295 FixedDoubleArray::kHeaderSize - kHeapObjectTag); 295 FixedDoubleArray::kHeaderSize - kHeapObjectTag);
296 __ Add(dst_elements, array, FixedArray::kHeaderSize); 296 __ Add(dst_elements, array, FixedArray::kHeaderSize - kHeapObjectTag);
297 __ Add(dst_end, dst_elements, Operand(length, LSL, kPointerSizeLog2)); 297 __ Add(dst_end, dst_elements, Operand(length, LSL, kPointerSizeLog2));
298 298
299 // Allocating heap numbers in the loop below can fail and cause a jump to 299 // Allocating heap numbers in the loop below can fail and cause a jump to
300 // gc_required. We can't leave a partly initialized FixedArray behind, 300 // gc_required. We can't leave a partly initialized FixedArray behind,
301 // so pessimistically fill it with holes now. 301 // so pessimistically fill it with holes now.
302 Label initialization_loop, initialization_loop_entry; 302 Label initialization_loop, initialization_loop_entry;
303 __ B(&initialization_loop_entry); 303 __ B(&initialization_loop_entry);
304 __ bind(&initialization_loop); 304 __ bind(&initialization_loop);
305 __ Str(the_hole, MemOperand(dst_elements, kPointerSize, PostIndex)); 305 __ Str(the_hole, MemOperand(dst_elements, kPointerSize, PostIndex));
306 __ bind(&initialization_loop_entry); 306 __ bind(&initialization_loop_entry);
307 __ Cmp(dst_elements, dst_end); 307 __ Cmp(dst_elements, dst_end);
308 __ B(lt, &initialization_loop); 308 __ B(lt, &initialization_loop);
309 309
310 __ Add(dst_elements, array, FixedArray::kHeaderSize); 310 __ Add(dst_elements, array, FixedArray::kHeaderSize - kHeapObjectTag);
311 __ Add(array, array, kHeapObjectTag);
312 311
313 Register heap_num_map = x15; 312 Register heap_num_map = x15;
314 __ LoadRoot(heap_num_map, Heap::kHeapNumberMapRootIndex); 313 __ LoadRoot(heap_num_map, Heap::kHeapNumberMapRootIndex);
315 314
316 Label entry; 315 Label entry;
317 __ B(&entry); 316 __ B(&entry);
318 317
319 // Call into runtime if GC is required. 318 // Call into runtime if GC is required.
320 __ Bind(&gc_required); 319 __ Bind(&gc_required);
321 __ Pop(value, key, receiver, target_map); 320 __ Pop(value, key, receiver, target_map);
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 630
632 __ Bind(&done); 631 __ Bind(&done);
633 } 632 }
634 633
635 #undef __ 634 #undef __
636 635
637 } // namespace internal 636 } // namespace internal
638 } // namespace v8 637 } // namespace v8
639 638
640 #endif // V8_TARGET_ARCH_ARM64 639 #endif // V8_TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « src/arm64/code-stubs-arm64.cc ('k') | src/arm64/macro-assembler-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698