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

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

Issue 242603002: Update ElementsTransitionGenerator::GenerateSmiToDouble to support x32 port. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | 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 "v8.h" 5 #include "v8.h"
6 6
7 #if V8_TARGET_ARCH_X64 7 #if V8_TARGET_ARCH_X64
8 8
9 #include "codegen.h" 9 #include "codegen.h"
10 #include "macro-assembler.h" 10 #include "macro-assembler.h"
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 if (mode == TRACK_ALLOCATION_SITE) { 226 if (mode == TRACK_ALLOCATION_SITE) {
227 __ JumpIfJSArrayHasAllocationMemento(rdx, rdi, fail); 227 __ JumpIfJSArrayHasAllocationMemento(rdx, rdi, fail);
228 } 228 }
229 229
230 // Check for empty arrays, which only require a map transition and no changes 230 // Check for empty arrays, which only require a map transition and no changes
231 // to the backing store. 231 // to the backing store.
232 __ movp(r8, FieldOperand(rdx, JSObject::kElementsOffset)); 232 __ movp(r8, FieldOperand(rdx, JSObject::kElementsOffset));
233 __ CompareRoot(r8, Heap::kEmptyFixedArrayRootIndex); 233 __ CompareRoot(r8, Heap::kEmptyFixedArrayRootIndex);
234 __ j(equal, &only_change_map); 234 __ j(equal, &only_change_map);
235 235
236 // Check backing store for COW-ness. For COW arrays we have to
237 // allocate a new backing store.
238 __ SmiToInteger32(r9, FieldOperand(r8, FixedDoubleArray::kLengthOffset)); 236 __ SmiToInteger32(r9, FieldOperand(r8, FixedDoubleArray::kLengthOffset));
239 __ CompareRoot(FieldOperand(r8, HeapObject::kMapOffset), 237 if (kPointerSize == kDoubleSize) {
240 Heap::kFixedCOWArrayMapRootIndex); 238 // Check backing store for COW-ness. For COW arrays we have to
241 __ j(equal, &new_backing_store); 239 // allocate a new backing store.
240 __ CompareRoot(FieldOperand(r8, HeapObject::kMapOffset),
241 Heap::kFixedCOWArrayMapRootIndex);
242 __ j(equal, &new_backing_store);
243 } else {
244 // For x32 port we have to allocate a new backing store as SMI size is
245 // not equal with double size.
246 ASSERT(kDoubleSize == 2 * kPointerSize);
247 __ jmp(&new_backing_store);
248 }
249
242 // Check if the backing store is in new-space. If not, we need to allocate 250 // Check if the backing store is in new-space. If not, we need to allocate
243 // a new one since the old one is in pointer-space. 251 // a new one since the old one is in pointer-space.
244 // If in new space, we can reuse the old backing store because it is 252 // If in new space, we can reuse the old backing store because it is
245 // the same size. 253 // the same size.
246 __ JumpIfNotInNewSpace(r8, rdi, &new_backing_store); 254 __ JumpIfNotInNewSpace(r8, rdi, &new_backing_store);
247 255
248 __ movp(r14, r8); // Destination array equals source array. 256 __ movp(r14, r8); // Destination array equals source array.
249 257
250 // r8 : source FixedArray 258 // r8 : source FixedArray
251 // r9 : elements array length 259 // r9 : elements array length
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 // argument_count_reg_ * times_pointer_size + (receiver - 1) * kPointerSize. 695 // argument_count_reg_ * times_pointer_size + (receiver - 1) * kPointerSize.
688 return Operand(base_reg_, argument_count_reg_, times_pointer_size, 696 return Operand(base_reg_, argument_count_reg_, times_pointer_size,
689 displacement_to_last_argument + (receiver - 1 - index) * kPointerSize); 697 displacement_to_last_argument + (receiver - 1 - index) * kPointerSize);
690 } 698 }
691 } 699 }
692 700
693 701
694 } } // namespace v8::internal 702 } } // namespace v8::internal
695 703
696 #endif // V8_TARGET_ARCH_X64 704 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698