OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/interpreter/bytecode-array-builder.h" | 7 #include "src/interpreter/bytecode-array-builder.h" |
8 #include "src/interpreter/bytecode-register-allocator.h" | 8 #include "src/interpreter/bytecode-register-allocator.h" |
9 #include "test/unittests/test-utils.h" | 9 #include "test/unittests/test-utils.h" |
10 | 10 |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 | 133 |
134 int start = allocator()->PrepareForConsecutiveTemporaryRegisters(kRunLength); | 134 int start = allocator()->PrepareForConsecutiveTemporaryRegisters(kRunLength); |
135 CHECK_EQ(start, kNotRunLength); | 135 CHECK_EQ(start, kNotRunLength); |
136 for (int i = 0; i < kRunLength; i++) { | 136 for (int i = 0; i < kRunLength; i++) { |
137 CHECK(!allocator()->RegisterIsLive(Register(start + i))); | 137 CHECK(!allocator()->RegisterIsLive(Register(start + i))); |
138 allocator()->BorrowConsecutiveTemporaryRegister(start + i); | 138 allocator()->BorrowConsecutiveTemporaryRegister(start + i); |
139 CHECK(allocator()->RegisterIsLive(Register(start + i))); | 139 CHECK(allocator()->RegisterIsLive(Register(start + i))); |
140 } | 140 } |
141 } | 141 } |
142 | 142 |
143 TEST_F(TemporaryRegisterAllocatorTest, RangeAvoidsTranslationBoundary) { | |
144 int boundary = RegisterTranslator::DistanceToTranslationWindow(Register(0)); | |
145 int limit = boundary + 64; | |
146 | |
147 for (int run_length = 2; run_length < 32; run_length += 7) { | |
148 ZoneVector<int> run_starts(zone()); | |
149 for (int start = 0; start < limit; start += run_length) { | |
150 int run_start = | |
151 allocator()->PrepareForConsecutiveTemporaryRegisters(run_length); | |
152 run_starts.push_back(run_start); | |
153 for (int i = 0; i < run_length; i++) { | |
154 allocator()->BorrowConsecutiveTemporaryRegister(run_start + i); | |
155 } | |
156 CHECK(run_start >= boundary || run_start + run_length <= boundary); | |
157 } | |
158 for (size_t batch = 0; batch < run_starts.size(); batch++) { | |
159 for (int i = run_starts[batch]; i < run_starts[batch] + run_length; i++) { | |
160 allocator()->ReturnTemporaryRegister(i); | |
161 } | |
162 } | |
163 } | |
164 } | |
165 | |
166 TEST_F(TemporaryRegisterAllocatorTest, NotInRange) { | 143 TEST_F(TemporaryRegisterAllocatorTest, NotInRange) { |
167 for (int i = 0; i < 10; i++) { | 144 for (int i = 0; i < 10; i++) { |
168 int reg = allocator()->BorrowTemporaryRegisterNotInRange(2, 5); | 145 int reg = allocator()->BorrowTemporaryRegisterNotInRange(2, 5); |
169 CHECK(reg == i || (reg > 2 && reg == i + 4)); | 146 CHECK(reg == i || (reg > 2 && reg == i + 4)); |
170 } | 147 } |
171 for (int i = 0; i < 10; i++) { | 148 for (int i = 0; i < 10; i++) { |
172 if (i < 2) { | 149 if (i < 2) { |
173 allocator()->ReturnTemporaryRegister(i); | 150 allocator()->ReturnTemporaryRegister(i); |
174 } else { | 151 } else { |
175 allocator()->ReturnTemporaryRegister(i + 4); | 152 allocator()->ReturnTemporaryRegister(i + 4); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 Register reg2 = allocator.NextConsecutiveRegister(); | 203 Register reg2 = allocator.NextConsecutiveRegister(); |
227 Register reg3 = allocator.NextConsecutiveRegister(); | 204 Register reg3 = allocator.NextConsecutiveRegister(); |
228 USE(other); | 205 USE(other); |
229 | 206 |
230 CHECK(Register::AreContiguous(reg0, reg1, reg2, reg3)); | 207 CHECK(Register::AreContiguous(reg0, reg1, reg2, reg3)); |
231 } | 208 } |
232 | 209 |
233 } // namespace interpreter | 210 } // namespace interpreter |
234 } // namespace internal | 211 } // namespace internal |
235 } // namespace v8 | 212 } // namespace v8 |
OLD | NEW |