MIPS: Ensure double aligned allocations through runtime routines.
authorplind44@gmail.com <plind44@gmail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Sun, 17 Nov 2013 17:23:58 +0000 (17:23 +0000)
committerplind44@gmail.com <plind44@gmail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Sun, 17 Nov 2013 17:23:58 +0000 (17:23 +0000)
3rd (of 3) CLs to ensure complete alignment of FixedDoubleArrays.

TEST=
BUG=
R=mstarzinger@chromium.org, plind44@gmail.com

Review URL: https://codereview.chromium.org/35313002

Patch from Dusan Milosavljevic <Dusan.Milosavljevic@rt-rk.com>.

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17809 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/runtime.cc

index 28506dd..1001fe2 100644 (file)
@@ -9786,6 +9786,7 @@ static MaybeObject* Allocate(Isolate* isolate,
                              bool double_align,
                              AllocationSpace space) {
   Heap* heap = isolate->heap();
+  if (double_align) size += kPointerSize;
   RUNTIME_ASSERT(IsAligned(size, kPointerSize));
   RUNTIME_ASSERT(size > 0);
   RUNTIME_ASSERT(size <= heap->MaxRegularSpaceAllocationSize());
@@ -9797,6 +9798,9 @@ static MaybeObject* Allocate(Isolate* isolate,
   MemoryChunk* chunk = MemoryChunk::FromAddress(allocation->address());
   ASSERT(chunk->owner()->identity() == space);
 #endif
+  if (double_align) {
+    allocation = heap->EnsureDoubleAligned(allocation, size);
+  }
   heap->CreateFillerObjectAt(allocation->address(), size);
   return allocation;
 }