Index: src/compiler/frame.h |
diff --git a/src/compiler/frame.h b/src/compiler/frame.h |
index 8c2633113a293b550347413403b8e9a7d289bda1..8c947072fa96c1982ddc1e340af012043e476517 100644 |
--- a/src/compiler/frame.h |
+++ b/src/compiler/frame.h |
@@ -123,12 +123,20 @@ class Frame : public ZoneObject { |
private: |
int AllocateAlignedFrameSlot(int width) { |
- DCHECK(width == 4 || width == 8); |
- // Skip one slot if necessary. |
- if (width > kPointerSize) { |
- DCHECK(width == kPointerSize * 2); |
- frame_slot_count_++; |
- frame_slot_count_ |= 1; |
+ DCHECK(width == 4 || width == 8 || width == 16); |
+ if (kPointerSize == 4) { |
+ // Skip one slot if necessary. |
+ if (width > kPointerSize) { |
+ frame_slot_count_++; |
+ frame_slot_count_ |= 1; |
+ // 2 extra slots if width == 16. |
+ frame_slot_count_ += (width & 16) / 8; |
+ } |
+ } else { |
+ // No alignment when slots are 8 bytes. |
+ DCHECK_EQ(8, kPointerSize); |
+ // 1 extra slot if width == 16. |
+ frame_slot_count_ += (width & 16) / 16; |
} |
return frame_slot_count_++; |
} |