OLD | NEW |
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 "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/compiler.h" | 7 #include "src/compiler.h" |
8 #include "src/interpreter/bytecode-array-iterator.h" | 8 #include "src/interpreter/bytecode-array-iterator.h" |
9 #include "src/interpreter/bytecode-generator.h" | 9 #include "src/interpreter/bytecode-generator.h" |
10 #include "src/interpreter/interpreter.h" | 10 #include "src/interpreter/interpreter.h" |
(...skipping 7280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7291 for (size_t i = 0; i < 157; ++i) { | 7291 for (size_t i = 0; i < 157; ++i) { |
7292 os << "var x" << i << ";\n"; | 7292 os << "var x" << i << ";\n"; |
7293 } | 7293 } |
7294 std::string prologue(os.str()); | 7294 std::string prologue(os.str()); |
7295 | 7295 |
7296 ExpectedSnippet<int> snippets[] = { | 7296 ExpectedSnippet<int> snippets[] = { |
7297 {"x0 = x127;\n" | 7297 {"x0 = x127;\n" |
7298 "return x0;\n", | 7298 "return x0;\n", |
7299 161 * kPointerSize, | 7299 161 * kPointerSize, |
7300 1, | 7300 1, |
7301 15, | 7301 10, |
7302 { | 7302 { |
7303 B(MovWide), R16(131), R16(125), // | 7303 B(MovWide), R16(131), R16(125), // |
7304 B(Ldar), R(125), // | 7304 B(Ldar), R(125), // |
7305 B(MovWide), R16(125), R16(131), // | |
7306 B(Star), R(0), // | 7305 B(Star), R(0), // |
7307 B(Return), // | 7306 B(Return), // |
7308 }}, | 7307 }}, |
7309 {"x127 = x126;\n" | 7308 {"x127 = x126;\n" |
7310 "return x127;\n", | 7309 "return x127;\n", |
7311 161 * kPointerSize, | 7310 161 * kPointerSize, |
7312 1, | 7311 1, |
7313 37, | 7312 22, |
7314 { | 7313 { |
7315 B(MovWide), R16(130), R16(125), // | 7314 B(MovWide), R16(130), R16(125), // |
7316 B(Ldar), R(125), // | 7315 B(Ldar), R(125), // |
7317 B(MovWide), R16(125), R16(130), // | |
7318 B(MovWide), R16(131), R16(125), // | |
7319 B(Star), R(125), // | 7316 B(Star), R(125), // |
7320 B(MovWide), R16(125), R16(131), // | 7317 B(MovWide), R16(125), R16(131), // |
7321 B(MovWide), R16(131), R16(125), // | 7318 B(MovWide), R16(131), R16(125), // |
7322 B(Ldar), R(125), // | 7319 B(Ldar), R(125), // |
7323 B(MovWide), R16(125), R16(131), // | |
7324 B(Return), // | 7320 B(Return), // |
7325 }}, | 7321 }}, |
7326 {"if (x2 > 3) { return x129; }\n" | 7322 {"if (x2 > 3) { return x129; }\n" |
7327 "return x128;\n", | 7323 "return x128;\n", |
7328 162 * kPointerSize, | 7324 162 * kPointerSize, |
7329 1, | 7325 1, |
7330 56, | 7326 36, |
7331 { | 7327 { |
7332 B(Ldar), R(2), // | 7328 B(Ldar), R(2), // |
7333 B(MovWide), R16(161), R16(125), // | 7329 B(Star), R(125), // |
7334 B(Star), R(125), // | 7330 B(MovWide), R16(125), R16(161), // |
7335 B(MovWide), R16(125), R16(161), // | 7331 B(LdaSmi8), U8(3), // |
7336 B(LdaSmi8), U8(3), // | 7332 B(MovWide), R16(161), R16(125), // |
7337 B(MovWide), R16(161), R16(125), // | 7333 B(TestGreaterThan), R(125), // |
7338 B(TestGreaterThan), R(125), // | 7334 B(JumpIfFalse), U8(10), // |
7339 B(MovWide), R16(125), R16(161), // | 7335 B(MovWide), R16(133), R16(125), // |
7340 B(JumpIfToBooleanFalse), U8(15), // | 7336 B(Ldar), R(125), // |
7341 B(MovWide), R16(133), R16(125), // | 7337 B(Return), // |
7342 B(Ldar), R(125), // | 7338 B(MovWide), R16(132), R16(125), // |
7343 B(MovWide), R16(125), R16(133), // | 7339 B(Ldar), R(125), // |
7344 B(Return), // | 7340 B(Return), // |
7345 B(MovWide), R16(132), R16(125), // | |
7346 B(Ldar), R(125), // | |
7347 B(MovWide), R16(125), R16(132), // | |
7348 B(Return), // | |
7349 }}, | 7341 }}, |
7350 {"var x0 = 0;\n" | 7342 {"var x0 = 0;\n" |
7351 "if (x129 == 3) { var x129 = x0; }\n" | 7343 "if (x129 == 3) { var x129 = x0; }\n" |
7352 "if (x2 > 3) { return x0; }\n" | 7344 "if (x2 > 3) { return x0; }\n" |
7353 "return x129;\n", | 7345 "return x129;\n", |
7354 162 * kPointerSize, | 7346 162 * kPointerSize, |
7355 1, | 7347 1, |
7356 103, | 7348 68, |
7357 { | 7349 { |
7358 B(LdaZero), // | 7350 B(LdaZero), // |
7359 B(Star), R(0), // | 7351 B(Star), R(0), // |
7360 B(MovWide), R16(133), R16(125), // | 7352 B(MovWide), R16(133), R16(125), // |
7361 B(Ldar), R(125), // | 7353 B(Ldar), R(125), // |
7362 B(MovWide), R16(125), R16(133), // | 7354 B(Star), R(125), // |
7363 B(MovWide), R16(161), R16(125), // | 7355 B(MovWide), R16(125), R16(161), // |
7364 B(Star), R(125), // | 7356 B(LdaSmi8), U8(3), // |
7365 B(MovWide), R16(125), R16(161), // | 7357 B(MovWide), R16(161), R16(125), // |
7366 B(LdaSmi8), U8(3), // | 7358 B(TestEqual), R(125), // |
7367 B(MovWide), R16(161), R16(125), // | 7359 B(JumpIfFalse), U8(11), // |
7368 B(TestEqual), R(125), // | 7360 B(Ldar), R(0), // |
7369 B(MovWide), R16(125), R16(161), // | 7361 B(Star), R(125), // |
7370 B(JumpIfToBooleanFalse), U8(16), // | 7362 B(MovWide), R16(125), R16(133), // |
7371 B(Ldar), R(0), // | 7363 B(Ldar), R(2), // |
7372 B(MovWide), R16(133), R16(125), // | 7364 B(Star), R(125), // |
7373 B(Star), R(125), // | 7365 B(MovWide), R16(125), R16(161), // |
7374 B(MovWide), R16(125), R16(133), // | 7366 B(LdaSmi8), U8(3), // |
7375 B(Ldar), R(2), // | 7367 B(MovWide), R16(161), R16(125), // |
7376 B(MovWide), R16(161), R16(125), // | 7368 B(TestGreaterThan), R(125), // |
7377 B(Star), R(125), // | 7369 B(JumpIfFalse), U8(5), // |
7378 B(MovWide), R16(125), R16(161), // | 7370 B(Ldar), R(0), // |
7379 B(LdaSmi8), U8(3), // | 7371 B(Return), // |
7380 B(MovWide), R16(161), R16(125), // | 7372 B(MovWide), R16(133), R16(125), // |
7381 B(TestGreaterThan), R(125), // | 7373 B(Ldar), R(125), // |
7382 B(MovWide), R16(125), R16(161), // | 7374 B(Return), // |
7383 B(JumpIfToBooleanFalse), U8(5), // | |
7384 B(Ldar), R(0), // | |
7385 B(Return), // | |
7386 B(MovWide), R16(133), R16(125), // | |
7387 B(Ldar), R(125), // | |
7388 B(MovWide), R16(125), R16(133), // | |
7389 B(Return), // | |
7390 }}, | 7375 }}, |
7391 {"var x0 = 0;\n" | 7376 {"var x0 = 0;\n" |
7392 "var x1 = 0;\n" | 7377 "var x1 = 0;\n" |
7393 "for (x128 = 0; x128 < 64; x128++) {" | 7378 "for (x128 = 0; x128 < 64; x128++) {" |
7394 " x1 += x128;" | 7379 " x1 += x128;" |
7395 "}" | 7380 "}" |
7396 "return x128;\n", | 7381 "return x128;\n", |
7397 162 * kPointerSize, | 7382 162 * kPointerSize, |
7398 1, | 7383 1, |
7399 152, | 7384 97, |
7400 { | 7385 { |
7401 B(LdaZero), // | 7386 B(LdaZero), // |
7402 B(Star), R(0), // | 7387 B(Star), R(0), // |
7403 B(LdaZero), // | 7388 B(LdaZero), // |
7404 B(Star), R(1), // | 7389 B(Star), R(1), // |
7405 B(LdaZero), // | 7390 B(LdaZero), // |
7406 B(MovWide), R16(132), R16(125), // | 7391 B(Star), R(125), // |
7407 B(Star), R(125), // | 7392 B(MovWide), R16(125), R16(132), // |
7408 B(MovWide), R16(125), R16(132), // | 7393 B(MovWide), R16(132), R16(125), // |
7409 B(MovWide), R16(132), R16(125), // | 7394 B(Ldar), R(125), // |
7410 B(Ldar), R(125), // | 7395 B(Star), R(125), // |
7411 B(MovWide), R16(125), R16(132), // | 7396 B(MovWide), R16(125), R16(161), // |
7412 B(MovWide), R16(161), R16(125), // | 7397 B(LdaSmi8), U8(64), // |
7413 B(Star), R(125), // | 7398 B(MovWide), R16(161), R16(125), // |
7414 B(MovWide), R16(125), R16(161), // | 7399 B(TestLessThan), R(125), // |
7415 B(LdaSmi8), U8(64), // | 7400 B(JumpIfFalse), U8(52), // |
7416 B(MovWide), R16(161), R16(125), // | 7401 B(Ldar), R(1), // |
7417 B(TestLessThan), R(125), // | 7402 B(Star), R(125), // |
7418 B(MovWide), R16(125), R16(161), // | 7403 B(MovWide), R16(125), R16(161), // |
7419 B(JumpIfToBooleanFalse), U8(82), // | 7404 B(MovWide), R16(132), R16(125), // |
7420 B(Ldar), R(1), // | 7405 B(Ldar), R(125), // |
7421 B(MovWide), R16(161), R16(125), // | 7406 B(MovWide), R16(161), R16(125), // |
7422 B(Star), R(125), // | 7407 B(Add), R(125), // |
7423 B(MovWide), R16(125), R16(161), // | 7408 B(Star), R(1), // |
7424 B(MovWide), R16(132), R16(125), // | 7409 B(MovWide), R16(132), R16(125), // |
7425 B(Ldar), R(125), // | 7410 B(Ldar), R(125), // |
7426 B(MovWide), R16(125), R16(132), // | 7411 B(ToNumber), // |
7427 B(MovWide), R16(161), R16(125), // | 7412 B(Star), R(125), // |
7428 B(Add), R(125), // | 7413 B(MovWide), R16(125), R16(161), // |
7429 B(MovWide), R16(125), R16(161), // | 7414 B(Inc), // |
7430 B(Star), R(1), // | 7415 B(Star), R(125), // |
7431 B(MovWide), R16(132), R16(125), // | 7416 B(MovWide), R16(125), R16(132), // |
7432 B(Ldar), R(125), // | 7417 B(Jump), U8(-73), // |
7433 B(MovWide), R16(125), R16(132), // | 7418 B(MovWide), R16(132), R16(125), // |
7434 B(ToNumber), // | 7419 B(Ldar), R(125), // |
7435 B(MovWide), R16(161), R16(125), // | 7420 B(Return), // |
7436 B(Star), R(125), // | |
7437 B(MovWide), R16(125), R16(161), // | |
7438 B(Inc), // | |
7439 B(MovWide), R16(132), R16(125), // | |
7440 B(Star), R(125), // | |
7441 B(MovWide), R16(125), R16(132), // | |
7442 B(Jump), U8(-118), // | |
7443 B(MovWide), R16(132), R16(125), // | |
7444 B(Ldar), R(125), // | |
7445 B(MovWide), R16(125), R16(132), // | |
7446 B(Return), // | |
7447 }}, | 7421 }}, |
7448 {"var x0 = 1234;\n" | 7422 {"var x0 = 1234;\n" |
7449 "var x1 = 0;\n" | 7423 "var x1 = 0;\n" |
7450 "for (x128 in x0) {" | 7424 "for (x128 in x0) {" |
7451 " x1 += x128;" | 7425 " x1 += x128;" |
7452 "}" | 7426 "}" |
7453 "return x1;\n", | 7427 "return x1;\n", |
7454 167 * kPointerSize, | 7428 167 * kPointerSize, |
7455 1, | 7429 1, |
7456 159, | 7430 109, |
7457 { | 7431 { |
7458 B(LdaConstant), U8(0), // | 7432 B(LdaConstant), U8(0), // |
7459 B(Star), R(0), // | 7433 B(Star), R(0), // |
7460 B(LdaZero), // | 7434 B(LdaZero), // |
7461 B(Star), R(1), // | 7435 B(Star), R(1), // |
7462 B(Ldar), R(0), // | 7436 B(Ldar), R(0), // |
7463 B(JumpIfUndefinedConstant), U8(3), // | 7437 B(JumpIfUndefined), U8(97), // |
7464 B(JumpIfNullConstant), U8(2), // | 7438 B(JumpIfNull), U8(95), // |
7465 B(ToObject), // | 7439 B(ToObject), // |
7466 B(JumpIfNullConstant), U8(1), // | 7440 B(JumpIfNull), U8(92), // |
7467 B(MovWide), R16(161), R16(125), // | |
7468 B(Star), R(125), // | 7441 B(Star), R(125), // |
7469 B(MovWide), R16(125), R16(161), // | 7442 B(MovWide), R16(125), R16(161), // |
7470 B(ForInPrepareWide), R16(162), // | 7443 B(ForInPrepareWide), R16(162), // |
7471 B(LdaZero), // | 7444 B(LdaZero), // |
7472 B(MovWide), R16(165), R16(125), // | |
7473 B(Star), R(125), // | 7445 B(Star), R(125), // |
7474 B(MovWide), R16(125), R16(165), // | 7446 B(MovWide), R16(125), R16(165), // |
7475 B(MovWide), R16(165), R16(125), // | 7447 B(MovWide), R16(165), R16(125), // |
7476 B(MovWide), R16(164), R16(126), // | 7448 B(MovWide), R16(164), R16(126), // |
7477 B(ForInDone), R(125), R(126), // | 7449 B(ForInDone), R(125), R(126), // |
7478 B(MovWide), R16(126), R16(164), // | 7450 B(JumpIfTrue), U8(59), // |
7479 B(MovWide), R16(125), R16(165), // | |
7480 B(JumpIfToBooleanTrue), U8(89), // | |
7481 B(ForInNextWide), R16(161), R16(165), R16(162), // | 7451 B(ForInNextWide), R16(161), R16(165), R16(162), // |
7482 B(JumpIfUndefined), U8(54), // | 7452 B(JumpIfUndefined), U8(34), // |
7483 B(MovWide), R16(132), R16(125), // | |
7484 B(Star), R(125), // | 7453 B(Star), R(125), // |
7485 B(MovWide), R16(125), R16(132), // | 7454 B(MovWide), R16(125), R16(132), // |
7486 B(Ldar), R(1), // | 7455 B(Ldar), R(1), // |
7487 B(MovWide), R16(166), R16(125), // | |
7488 B(Star), R(125), // | 7456 B(Star), R(125), // |
7489 B(MovWide), R16(125), R16(166), // | 7457 B(MovWide), R16(125), R16(166), // |
7490 B(MovWide), R16(132), R16(125), // | 7458 B(MovWide), R16(132), R16(125), // |
7491 B(Ldar), R(125), // | 7459 B(Ldar), R(125), // |
7492 B(MovWide), R16(125), R16(132), // | |
7493 B(MovWide), R16(166), R16(125), // | 7460 B(MovWide), R16(166), R16(125), // |
7494 B(Add), R(125), // | 7461 B(Add), R(125), // |
7495 B(MovWide), R16(125), R16(166), // | |
7496 B(Star), R(1), // | 7462 B(Star), R(1), // |
7497 B(MovWide), R16(165), R16(125), // | 7463 B(MovWide), R16(165), R16(125), // |
7498 B(ForInStep), R(125), // | 7464 B(ForInStep), R(125), // |
7499 B(MovWide), R16(125), R16(165), // | |
7500 B(MovWide), R16(165), R16(125), // | |
7501 B(Star), R(125), // | 7465 B(Star), R(125), // |
7502 B(MovWide), R16(125), R16(165), // | 7466 B(MovWide), R16(125), R16(165), // |
7503 B(Jump), U8(-110), // | 7467 B(Jump), U8(-70), // |
7504 B(Ldar), R(1), // | 7468 B(Ldar), R(1), // |
7505 B(Return), // | 7469 B(Return), // |
7506 }, | 7470 }, |
7507 4, | 7471 1, |
7508 {1234, 142, 145, 147}}, | 7472 {1234}}, |
7509 {"x0 = %Add(x64, x63);\n" | 7473 {"x0 = %Add(x64, x63);\n" |
7510 "x1 = %Add(x27, x143);\n" | 7474 "x1 = %Add(x27, x143);\n" |
7511 "%TheHole();\n" | 7475 "%TheHole();\n" |
7512 "return x1;\n", | 7476 "return x1;\n", |
7513 163 * kPointerSize, | 7477 163 * kPointerSize, |
7514 1, | 7478 1, |
7515 90, | 7479 65, |
7516 { | 7480 { |
7517 B(Ldar), R(64), // | 7481 B(Ldar), R(64), // |
7518 B(MovWide), R16(161), R16(125), // | |
7519 B(Star), R(125), // | 7482 B(Star), R(125), // |
7520 B(MovWide), R16(125), R16(161), // | 7483 B(MovWide), R16(125), R16(161), // |
7521 B(Ldar), R(63), // | 7484 B(Ldar), R(63), // |
7522 B(MovWide), R16(162), R16(125), // | |
7523 B(Star), R(125), // | 7485 B(Star), R(125), // |
7524 B(MovWide), R16(125), R16(162), // | 7486 B(MovWide), R16(125), R16(162), // |
7525 B(CallRuntimeWide), U16(Runtime::kAdd), R16(161), U8(2), // | 7487 B(CallRuntimeWide), U16(Runtime::kAdd), R16(161), U8(2), // |
7526 B(Star), R(0), // | 7488 B(Star), R(0), // |
7527 B(Ldar), R(27), // | 7489 B(Ldar), R(27), // |
7528 B(MovWide), R16(161), R16(125), // | |
7529 B(Star), R(125), // | 7490 B(Star), R(125), // |
7530 B(MovWide), R16(125), R16(161), // | 7491 B(MovWide), R16(125), R16(161), // |
7531 B(MovWide), R16(147), R16(125), // | 7492 B(MovWide), R16(147), R16(125), // |
7532 B(Ldar), R(125), // | 7493 B(Ldar), R(125), // |
7533 B(MovWide), R16(125), R16(147), // | |
7534 B(MovWide), R16(162), R16(125), // | |
7535 B(Star), R(125), // | 7494 B(Star), R(125), // |
7536 B(MovWide), R16(125), R16(162), // | 7495 B(MovWide), R16(125), R16(162), // |
7537 B(CallRuntimeWide), U16(Runtime::kAdd), R16(161), U8(2), // | 7496 B(CallRuntimeWide), U16(Runtime::kAdd), R16(161), U8(2), // |
7538 B(Star), R(1), // | 7497 B(Star), R(1), // |
7539 B(CallRuntime), U16(Runtime::kTheHole), R(0), U8(0), // | 7498 B(CallRuntime), U16(Runtime::kTheHole), R(0), U8(0), // |
7540 B(Ldar), R(1), // | 7499 B(Ldar), R(1), // |
7541 B(Return), // | 7500 B(Return), // |
7542 }}}; | 7501 }}}; |
7543 | 7502 |
7544 for (size_t i = 0; i < arraysize(snippets); ++i) { | 7503 for (size_t i = 0; i < arraysize(snippets); ++i) { |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7607 Handle<BytecodeArray> bytecode_array = | 7566 Handle<BytecodeArray> bytecode_array = |
7608 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 7567 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
7609 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 7568 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
7610 } | 7569 } |
7611 FLAG_harmony_do_expressions = old_flag; | 7570 FLAG_harmony_do_expressions = old_flag; |
7612 } | 7571 } |
7613 | 7572 |
7614 } // namespace interpreter | 7573 } // namespace interpreter |
7615 } // namespace internal | 7574 } // namespace internal |
7616 } // namespace v8 | 7575 } // namespace v8 |
OLD | NEW |