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

Side by Side Diff: test/unittests/interpreter/bytecodes-unittest.cc

Issue 2537123002: [ignition] Optimize jump checks to range checks (Closed)
Patch Set: Add tests Created 4 years 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
« src/interpreter/bytecodes.h ('K') | « src/interpreter/bytecodes.h ('k') | 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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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 <vector> 5 #include <vector>
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #include "src/interpreter/bytecode-register.h" 9 #include "src/interpreter/bytecode-register.h"
10 #include "src/interpreter/bytecodes.h" 10 #include "src/interpreter/bytecodes.h"
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt8 + 1)) == 193 CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt8 + 1)) ==
194 OperandSize::kShort); 194 OperandSize::kShort);
195 CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt16)) == 195 CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt16)) ==
196 OperandSize::kShort); 196 OperandSize::kShort);
197 CHECK(Bytecodes::SizeForUnsignedOperand( 197 CHECK(Bytecodes::SizeForUnsignedOperand(
198 static_cast<size_t>(kMaxUInt16 + 1)) == OperandSize::kQuad); 198 static_cast<size_t>(kMaxUInt16 + 1)) == OperandSize::kQuad);
199 CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt32)) == 199 CHECK(Bytecodes::SizeForUnsignedOperand(static_cast<size_t>(kMaxUInt32)) ==
200 OperandSize::kQuad); 200 OperandSize::kQuad);
201 } 201 }
202 202
203 // Helper macros to generate a check for if a bytecode is in a macro list of
204 // bytecodes. We can use these to exhaustively test a check over all bytecodes,
205 // both those that should pass and those that should fail the check.
206 #define OR_IS_BYTECODE(Name, ...) || bytecode == Bytecode::k##Name
207 #define IN_BYTECODE_LIST(BYTECODE, LIST) \
208 ([](Bytecode bytecode) { return false LIST(OR_IS_BYTECODE); }(BYTECODE))
rmcilroy 2016/12/05 14:33:40 I had this hack earlier in bytecode-operands and d
Leszek Swirski 2016/12/05 17:53:11 Yeah, I hated it too but I couldn't think of a bet
209
210 TEST(Bytecodes, IsJump) {
211 #define TEST_BYTECODE(Name, ...) \
212 if (IN_BYTECODE_LIST(Bytecode::k##Name, JUMP_BYTECODE_LIST)) { \
213 EXPECT_TRUE(Bytecodes::IsJump(Bytecode::k##Name)); \
214 } else { \
215 EXPECT_FALSE(Bytecodes::IsJump(Bytecode::k##Name)); \
216 }
217
218 BYTECODE_LIST(TEST_BYTECODE)
219 #undef TEST_BYTECODE
220 }
221
222 TEST(Bytecodes, IsForwardJump) {
223 #define TEST_BYTECODE(Name, ...) \
224 if (IN_BYTECODE_LIST(Bytecode::k##Name, JUMP_FORWARD_BYTECODE_LIST)) { \
225 EXPECT_TRUE(Bytecodes::IsForwardJump(Bytecode::k##Name)); \
226 } else { \
227 EXPECT_FALSE(Bytecodes::IsForwardJump(Bytecode::k##Name)); \
228 }
229
230 BYTECODE_LIST(TEST_BYTECODE)
231 #undef TEST_BYTECODE
232 }
233
234 TEST(Bytecodes, IsConditionalJump) {
235 #define TEST_BYTECODE(Name, ...) \
236 if (IN_BYTECODE_LIST(Bytecode::k##Name, JUMP_CONDITIONAL_BYTECODE_LIST)) { \
237 EXPECT_TRUE(Bytecodes::IsConditionalJump(Bytecode::k##Name)); \
238 } else { \
239 EXPECT_FALSE(Bytecodes::IsConditionalJump(Bytecode::k##Name)); \
240 }
241
242 BYTECODE_LIST(TEST_BYTECODE)
243 #undef TEST_BYTECODE
244 }
245
246 TEST(Bytecodes, IsUnconditionalJump) {
247 #define TEST_BYTECODE(Name, ...) \
248 if (IN_BYTECODE_LIST(Bytecode::k##Name, JUMP_UNCONDITIONAL_BYTECODE_LIST)) { \
249 EXPECT_TRUE(Bytecodes::IsUnconditionalJump(Bytecode::k##Name)); \
250 } else { \
251 EXPECT_FALSE(Bytecodes::IsUnconditionalJump(Bytecode::k##Name)); \
252 }
253
254 BYTECODE_LIST(TEST_BYTECODE)
255 #undef TEST_BYTECODE
256 }
257
258 TEST(Bytecodes, IsJumpImmediate) {
259 #define TEST_BYTECODE(Name, ...) \
260 if (IN_BYTECODE_LIST(Bytecode::k##Name, JUMP_IMMEDIATE_BYTECODE_LIST)) { \
261 EXPECT_TRUE(Bytecodes::IsJumpImmediate(Bytecode::k##Name)); \
262 } else { \
263 EXPECT_FALSE(Bytecodes::IsJumpImmediate(Bytecode::k##Name)); \
264 }
265
266 BYTECODE_LIST(TEST_BYTECODE)
267 #undef TEST_BYTECODE
268 }
269
270 TEST(Bytecodes, IsJumpConstant) {
271 #define TEST_BYTECODE(Name, ...) \
272 if (IN_BYTECODE_LIST(Bytecode::k##Name, JUMP_CONSTANT_BYTECODE_LIST)) { \
273 EXPECT_TRUE(Bytecodes::IsJumpConstant(Bytecode::k##Name)); \
274 } else { \
275 EXPECT_FALSE(Bytecodes::IsJumpConstant(Bytecode::k##Name)); \
276 }
277
278 BYTECODE_LIST(TEST_BYTECODE)
279 #undef TEST_BYTECODE
280 }
281
282 TEST(Bytecodes, IsConditionalJumpImmediate) {
283 #define TEST_BYTECODE(Name, ...) \
284 if (IN_BYTECODE_LIST(Bytecode::k##Name, JUMP_CONDITIONAL_BYTECODE_LIST) && \
285 IN_BYTECODE_LIST(Bytecode::k##Name, JUMP_IMMEDIATE_BYTECODE_LIST)) { \
286 EXPECT_TRUE(Bytecodes::IsConditionalJumpImmediate(Bytecode::k##Name)); \
287 } else { \
288 EXPECT_FALSE(Bytecodes::IsConditionalJumpImmediate(Bytecode::k##Name)); \
289 }
290
291 BYTECODE_LIST(TEST_BYTECODE)
292 #undef TEST_BYTECODE
293 }
294
295 TEST(Bytecodes, IsConditionalJumpConstant) {
296 #define TEST_BYTECODE(Name, ...) \
297 if (IN_BYTECODE_LIST(Bytecode::k##Name, JUMP_CONDITIONAL_BYTECODE_LIST) && \
298 IN_BYTECODE_LIST(Bytecode::k##Name, JUMP_CONSTANT_BYTECODE_LIST)) { \
299 EXPECT_TRUE(Bytecodes::IsConditionalJumpConstant(Bytecode::k##Name)); \
300 } else { \
301 EXPECT_FALSE(Bytecodes::IsConditionalJumpConstant(Bytecode::k##Name)); \
302 }
303
304 BYTECODE_LIST(TEST_BYTECODE)
305 #undef TEST_BYTECODE
306 }
307
308 TEST(Bytecodes, IsJumpIfToBoolean) {
309 #define TEST_BYTECODE(Name, ...) \
310 if (IN_BYTECODE_LIST(Bytecode::k##Name, JUMP_TO_BOOLEAN_BYTECODE_LIST)) { \
311 EXPECT_TRUE(Bytecodes::IsJumpIfToBoolean(Bytecode::k##Name)); \
312 } else { \
313 EXPECT_FALSE(Bytecodes::IsJumpIfToBoolean(Bytecode::k##Name)); \
314 }
315
316 BYTECODE_LIST(TEST_BYTECODE)
317 #undef TEST_BYTECODE
318 }
319
320 #undef OR_IS_BYTECODE
321 #undef IN_BYTECODE_LIST
322
203 TEST(OperandScale, PrefixesRequired) { 323 TEST(OperandScale, PrefixesRequired) {
204 CHECK(!Bytecodes::OperandScaleRequiresPrefixBytecode(OperandScale::kSingle)); 324 CHECK(!Bytecodes::OperandScaleRequiresPrefixBytecode(OperandScale::kSingle));
205 CHECK(Bytecodes::OperandScaleRequiresPrefixBytecode(OperandScale::kDouble)); 325 CHECK(Bytecodes::OperandScaleRequiresPrefixBytecode(OperandScale::kDouble));
206 CHECK( 326 CHECK(
207 Bytecodes::OperandScaleRequiresPrefixBytecode(OperandScale::kQuadruple)); 327 Bytecodes::OperandScaleRequiresPrefixBytecode(OperandScale::kQuadruple));
208 CHECK(Bytecodes::OperandScaleToPrefixBytecode(OperandScale::kDouble) == 328 CHECK(Bytecodes::OperandScaleToPrefixBytecode(OperandScale::kDouble) ==
209 Bytecode::kWide); 329 Bytecode::kWide);
210 CHECK(Bytecodes::OperandScaleToPrefixBytecode(OperandScale::kQuadruple) == 330 CHECK(Bytecodes::OperandScaleToPrefixBytecode(OperandScale::kQuadruple) ==
211 Bytecode::kExtraWide); 331 Bytecode::kExtraWide);
212 } 332 }
(...skipping 20 matching lines...) Expand all
233 AccumulatorUse::kWrite); 353 AccumulatorUse::kWrite);
234 CHECK(Bytecodes::ReadsAccumulator(Bytecode::kAdd)); 354 CHECK(Bytecodes::ReadsAccumulator(Bytecode::kAdd));
235 CHECK(Bytecodes::WritesAccumulator(Bytecode::kAdd)); 355 CHECK(Bytecodes::WritesAccumulator(Bytecode::kAdd));
236 CHECK_EQ(Bytecodes::GetAccumulatorUse(Bytecode::kAdd), 356 CHECK_EQ(Bytecodes::GetAccumulatorUse(Bytecode::kAdd),
237 AccumulatorUse::kReadWrite); 357 AccumulatorUse::kReadWrite);
238 } 358 }
239 359
240 } // namespace interpreter 360 } // namespace interpreter
241 } // namespace internal 361 } // namespace internal
242 } // namespace v8 362 } // namespace v8
OLDNEW
« src/interpreter/bytecodes.h ('K') | « src/interpreter/bytecodes.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698