Commit 38480999 authored by bbudge's avatar bbudge Committed by Commit bot

[Turbofan] Add support for 16 byte frame slots.

AllocateSpillSlot can now handle requests for 16 byte slots.

LOG=N
BUG=v8:4124

Review-Url: https://codereview.chromium.org/2139663002
Cr-Commit-Position: refs/heads/master@{#37661}
parent 69fd22da
...@@ -123,12 +123,20 @@ class Frame : public ZoneObject { ...@@ -123,12 +123,20 @@ class Frame : public ZoneObject {
private: private:
int AllocateAlignedFrameSlot(int width) { int AllocateAlignedFrameSlot(int width) {
DCHECK(width == 4 || width == 8); DCHECK(width == 4 || width == 8 || width == 16);
// Skip one slot if necessary. if (kPointerSize == 4) {
if (width > kPointerSize) { // Skip one slot if necessary.
DCHECK(width == kPointerSize * 2); if (width > kPointerSize) {
frame_slot_count_++; frame_slot_count_++;
frame_slot_count_ |= 1; 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_++; return frame_slot_count_++;
} }
......
...@@ -695,8 +695,7 @@ class SpillRange final : public ZoneObject { ...@@ -695,8 +695,7 @@ class SpillRange final : public ZoneObject {
return live_ranges_; return live_ranges_;
} }
ZoneVector<TopLevelLiveRange*>& live_ranges() { return live_ranges_; } ZoneVector<TopLevelLiveRange*>& live_ranges() { return live_ranges_; }
// Currently, only 4 or 8 byte slots are supported in stack frames. // Spill slots can be 4, 8, or 16 bytes wide.
// TODO(bbudge) Add 16 byte slots for SIMD.
int byte_width() const { return byte_width_; } int byte_width() const { return byte_width_; }
void Print() const; void Print() const;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment