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/interpreter/interpreter.h" | 5 #include "src/interpreter/interpreter.h" |
6 | 6 |
7 #include <fstream> | 7 #include <fstream> |
8 #include <memory> | 8 #include <memory> |
9 | 9 |
10 #include "src/ast/prettyprinter.h" | 10 #include "src/ast/prettyprinter.h" |
(...skipping 2373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2384 } | 2384 } |
2385 | 2385 |
2386 __ Bind(&end); | 2386 __ Bind(&end); |
2387 __ Dispatch(); | 2387 __ Dispatch(); |
2388 } | 2388 } |
2389 | 2389 |
2390 // Jump <imm> | 2390 // Jump <imm> |
2391 // | 2391 // |
2392 // Jump by number of bytes represented by the immediate operand |imm|. | 2392 // Jump by number of bytes represented by the immediate operand |imm|. |
2393 void Interpreter::DoJump(InterpreterAssembler* assembler) { | 2393 void Interpreter::DoJump(InterpreterAssembler* assembler) { |
2394 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); | 2394 Node* relative_jump = __ BytecodeOperandUImmWord(0); |
2395 __ Jump(relative_jump); | 2395 __ Jump(relative_jump); |
2396 } | 2396 } |
2397 | 2397 |
2398 // JumpConstant <idx> | 2398 // JumpConstant <idx> |
2399 // | 2399 // |
2400 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool. | 2400 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool. |
2401 void Interpreter::DoJumpConstant(InterpreterAssembler* assembler) { | 2401 void Interpreter::DoJumpConstant(InterpreterAssembler* assembler) { |
2402 Node* index = __ BytecodeOperandIdx(0); | 2402 Node* index = __ BytecodeOperandIdx(0); |
2403 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); | 2403 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); |
2404 __ Jump(relative_jump); | 2404 __ Jump(relative_jump); |
2405 } | 2405 } |
2406 | 2406 |
2407 // JumpIfTrue <imm> | 2407 // JumpIfTrue <imm> |
2408 // | 2408 // |
2409 // Jump by number of bytes represented by an immediate operand if the | 2409 // Jump by number of bytes represented by an immediate operand if the |
2410 // accumulator contains true. | 2410 // accumulator contains true. |
2411 void Interpreter::DoJumpIfTrue(InterpreterAssembler* assembler) { | 2411 void Interpreter::DoJumpIfTrue(InterpreterAssembler* assembler) { |
2412 Node* accumulator = __ GetAccumulator(); | 2412 Node* accumulator = __ GetAccumulator(); |
2413 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); | 2413 Node* relative_jump = __ BytecodeOperandUImmWord(0); |
2414 Node* true_value = __ BooleanConstant(true); | 2414 Node* true_value = __ BooleanConstant(true); |
2415 __ JumpIfWordEqual(accumulator, true_value, relative_jump); | 2415 __ JumpIfWordEqual(accumulator, true_value, relative_jump); |
2416 } | 2416 } |
2417 | 2417 |
2418 // JumpIfTrueConstant <idx> | 2418 // JumpIfTrueConstant <idx> |
2419 // | 2419 // |
2420 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool | 2420 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool |
2421 // if the accumulator contains true. | 2421 // if the accumulator contains true. |
2422 void Interpreter::DoJumpIfTrueConstant(InterpreterAssembler* assembler) { | 2422 void Interpreter::DoJumpIfTrueConstant(InterpreterAssembler* assembler) { |
2423 Node* accumulator = __ GetAccumulator(); | 2423 Node* accumulator = __ GetAccumulator(); |
2424 Node* index = __ BytecodeOperandIdx(0); | 2424 Node* index = __ BytecodeOperandIdx(0); |
2425 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); | 2425 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); |
2426 Node* true_value = __ BooleanConstant(true); | 2426 Node* true_value = __ BooleanConstant(true); |
2427 __ JumpIfWordEqual(accumulator, true_value, relative_jump); | 2427 __ JumpIfWordEqual(accumulator, true_value, relative_jump); |
2428 } | 2428 } |
2429 | 2429 |
2430 // JumpIfFalse <imm> | 2430 // JumpIfFalse <imm> |
2431 // | 2431 // |
2432 // Jump by number of bytes represented by an immediate operand if the | 2432 // Jump by number of bytes represented by an immediate operand if the |
2433 // accumulator contains false. | 2433 // accumulator contains false. |
2434 void Interpreter::DoJumpIfFalse(InterpreterAssembler* assembler) { | 2434 void Interpreter::DoJumpIfFalse(InterpreterAssembler* assembler) { |
2435 Node* accumulator = __ GetAccumulator(); | 2435 Node* accumulator = __ GetAccumulator(); |
2436 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); | 2436 Node* relative_jump = __ BytecodeOperandUImmWord(0); |
2437 Node* false_value = __ BooleanConstant(false); | 2437 Node* false_value = __ BooleanConstant(false); |
2438 __ JumpIfWordEqual(accumulator, false_value, relative_jump); | 2438 __ JumpIfWordEqual(accumulator, false_value, relative_jump); |
2439 } | 2439 } |
2440 | 2440 |
2441 // JumpIfFalseConstant <idx> | 2441 // JumpIfFalseConstant <idx> |
2442 // | 2442 // |
2443 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool | 2443 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool |
2444 // if the accumulator contains false. | 2444 // if the accumulator contains false. |
2445 void Interpreter::DoJumpIfFalseConstant(InterpreterAssembler* assembler) { | 2445 void Interpreter::DoJumpIfFalseConstant(InterpreterAssembler* assembler) { |
2446 Node* accumulator = __ GetAccumulator(); | 2446 Node* accumulator = __ GetAccumulator(); |
2447 Node* index = __ BytecodeOperandIdx(0); | 2447 Node* index = __ BytecodeOperandIdx(0); |
2448 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); | 2448 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); |
2449 Node* false_value = __ BooleanConstant(false); | 2449 Node* false_value = __ BooleanConstant(false); |
2450 __ JumpIfWordEqual(accumulator, false_value, relative_jump); | 2450 __ JumpIfWordEqual(accumulator, false_value, relative_jump); |
2451 } | 2451 } |
2452 | 2452 |
2453 // JumpIfToBooleanTrue <imm> | 2453 // JumpIfToBooleanTrue <imm> |
2454 // | 2454 // |
2455 // Jump by number of bytes represented by an immediate operand if the object | 2455 // Jump by number of bytes represented by an immediate operand if the object |
2456 // referenced by the accumulator is true when the object is cast to boolean. | 2456 // referenced by the accumulator is true when the object is cast to boolean. |
2457 void Interpreter::DoJumpIfToBooleanTrue(InterpreterAssembler* assembler) { | 2457 void Interpreter::DoJumpIfToBooleanTrue(InterpreterAssembler* assembler) { |
2458 Node* value = __ GetAccumulator(); | 2458 Node* value = __ GetAccumulator(); |
2459 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); | 2459 Node* relative_jump = __ BytecodeOperandUImmWord(0); |
2460 Label if_true(assembler), if_false(assembler); | 2460 Label if_true(assembler), if_false(assembler); |
2461 __ BranchIfToBooleanIsTrue(value, &if_true, &if_false); | 2461 __ BranchIfToBooleanIsTrue(value, &if_true, &if_false); |
2462 __ Bind(&if_true); | 2462 __ Bind(&if_true); |
2463 __ Jump(relative_jump); | 2463 __ Jump(relative_jump); |
2464 __ Bind(&if_false); | 2464 __ Bind(&if_false); |
2465 __ Dispatch(); | 2465 __ Dispatch(); |
2466 } | 2466 } |
2467 | 2467 |
2468 // JumpIfToBooleanTrueConstant <idx> | 2468 // JumpIfToBooleanTrueConstant <idx> |
2469 // | 2469 // |
(...skipping 12 matching lines...) Expand all Loading... |
2482 __ Bind(&if_false); | 2482 __ Bind(&if_false); |
2483 __ Dispatch(); | 2483 __ Dispatch(); |
2484 } | 2484 } |
2485 | 2485 |
2486 // JumpIfToBooleanFalse <imm> | 2486 // JumpIfToBooleanFalse <imm> |
2487 // | 2487 // |
2488 // Jump by number of bytes represented by an immediate operand if the object | 2488 // Jump by number of bytes represented by an immediate operand if the object |
2489 // referenced by the accumulator is false when the object is cast to boolean. | 2489 // referenced by the accumulator is false when the object is cast to boolean. |
2490 void Interpreter::DoJumpIfToBooleanFalse(InterpreterAssembler* assembler) { | 2490 void Interpreter::DoJumpIfToBooleanFalse(InterpreterAssembler* assembler) { |
2491 Node* value = __ GetAccumulator(); | 2491 Node* value = __ GetAccumulator(); |
2492 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); | 2492 Node* relative_jump = __ BytecodeOperandUImmWord(0); |
2493 Label if_true(assembler), if_false(assembler); | 2493 Label if_true(assembler), if_false(assembler); |
2494 __ BranchIfToBooleanIsTrue(value, &if_true, &if_false); | 2494 __ BranchIfToBooleanIsTrue(value, &if_true, &if_false); |
2495 __ Bind(&if_true); | 2495 __ Bind(&if_true); |
2496 __ Dispatch(); | 2496 __ Dispatch(); |
2497 __ Bind(&if_false); | 2497 __ Bind(&if_false); |
2498 __ Jump(relative_jump); | 2498 __ Jump(relative_jump); |
2499 } | 2499 } |
2500 | 2500 |
2501 // JumpIfToBooleanFalseConstant <idx> | 2501 // JumpIfToBooleanFalseConstant <idx> |
2502 // | 2502 // |
(...skipping 13 matching lines...) Expand all Loading... |
2516 __ Jump(relative_jump); | 2516 __ Jump(relative_jump); |
2517 } | 2517 } |
2518 | 2518 |
2519 // JumpIfNull <imm> | 2519 // JumpIfNull <imm> |
2520 // | 2520 // |
2521 // Jump by number of bytes represented by an immediate operand if the object | 2521 // Jump by number of bytes represented by an immediate operand if the object |
2522 // referenced by the accumulator is the null constant. | 2522 // referenced by the accumulator is the null constant. |
2523 void Interpreter::DoJumpIfNull(InterpreterAssembler* assembler) { | 2523 void Interpreter::DoJumpIfNull(InterpreterAssembler* assembler) { |
2524 Node* accumulator = __ GetAccumulator(); | 2524 Node* accumulator = __ GetAccumulator(); |
2525 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); | 2525 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); |
2526 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); | 2526 Node* relative_jump = __ BytecodeOperandUImmWord(0); |
2527 __ JumpIfWordEqual(accumulator, null_value, relative_jump); | 2527 __ JumpIfWordEqual(accumulator, null_value, relative_jump); |
2528 } | 2528 } |
2529 | 2529 |
2530 // JumpIfNullConstant <idx> | 2530 // JumpIfNullConstant <idx> |
2531 // | 2531 // |
2532 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool | 2532 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool |
2533 // if the object referenced by the accumulator is the null constant. | 2533 // if the object referenced by the accumulator is the null constant. |
2534 void Interpreter::DoJumpIfNullConstant(InterpreterAssembler* assembler) { | 2534 void Interpreter::DoJumpIfNullConstant(InterpreterAssembler* assembler) { |
2535 Node* accumulator = __ GetAccumulator(); | 2535 Node* accumulator = __ GetAccumulator(); |
2536 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); | 2536 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); |
2537 Node* index = __ BytecodeOperandIdx(0); | 2537 Node* index = __ BytecodeOperandIdx(0); |
2538 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); | 2538 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); |
2539 __ JumpIfWordEqual(accumulator, null_value, relative_jump); | 2539 __ JumpIfWordEqual(accumulator, null_value, relative_jump); |
2540 } | 2540 } |
2541 | 2541 |
2542 // JumpIfUndefined <imm> | 2542 // JumpIfUndefined <imm> |
2543 // | 2543 // |
2544 // Jump by number of bytes represented by an immediate operand if the object | 2544 // Jump by number of bytes represented by an immediate operand if the object |
2545 // referenced by the accumulator is the undefined constant. | 2545 // referenced by the accumulator is the undefined constant. |
2546 void Interpreter::DoJumpIfUndefined(InterpreterAssembler* assembler) { | 2546 void Interpreter::DoJumpIfUndefined(InterpreterAssembler* assembler) { |
2547 Node* accumulator = __ GetAccumulator(); | 2547 Node* accumulator = __ GetAccumulator(); |
2548 Node* undefined_value = | 2548 Node* undefined_value = |
2549 __ HeapConstant(isolate_->factory()->undefined_value()); | 2549 __ HeapConstant(isolate_->factory()->undefined_value()); |
2550 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); | 2550 Node* relative_jump = __ BytecodeOperandUImmWord(0); |
2551 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); | 2551 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); |
2552 } | 2552 } |
2553 | 2553 |
2554 // JumpIfUndefinedConstant <idx> | 2554 // JumpIfUndefinedConstant <idx> |
2555 // | 2555 // |
2556 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool | 2556 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool |
2557 // if the object referenced by the accumulator is the undefined constant. | 2557 // if the object referenced by the accumulator is the undefined constant. |
2558 void Interpreter::DoJumpIfUndefinedConstant(InterpreterAssembler* assembler) { | 2558 void Interpreter::DoJumpIfUndefinedConstant(InterpreterAssembler* assembler) { |
2559 Node* accumulator = __ GetAccumulator(); | 2559 Node* accumulator = __ GetAccumulator(); |
2560 Node* undefined_value = | 2560 Node* undefined_value = |
2561 __ HeapConstant(isolate_->factory()->undefined_value()); | 2561 __ HeapConstant(isolate_->factory()->undefined_value()); |
2562 Node* index = __ BytecodeOperandIdx(0); | 2562 Node* index = __ BytecodeOperandIdx(0); |
2563 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); | 2563 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); |
2564 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); | 2564 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); |
2565 } | 2565 } |
2566 | 2566 |
2567 // JumpIfJSReceiver <imm> | 2567 // JumpIfJSReceiver <imm> |
2568 // | 2568 // |
2569 // Jump by number of bytes represented by an immediate operand if the object | 2569 // Jump by number of bytes represented by an immediate operand if the object |
2570 // referenced by the accumulator is a JSReceiver. | 2570 // referenced by the accumulator is a JSReceiver. |
2571 void Interpreter::DoJumpIfJSReceiver(InterpreterAssembler* assembler) { | 2571 void Interpreter::DoJumpIfJSReceiver(InterpreterAssembler* assembler) { |
2572 Node* accumulator = __ GetAccumulator(); | 2572 Node* accumulator = __ GetAccumulator(); |
2573 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); | 2573 Node* relative_jump = __ BytecodeOperandUImmWord(0); |
2574 | 2574 |
2575 Label if_object(assembler), if_notobject(assembler, Label::kDeferred), | 2575 Label if_object(assembler), if_notobject(assembler, Label::kDeferred), |
2576 if_notsmi(assembler); | 2576 if_notsmi(assembler); |
2577 __ Branch(__ TaggedIsSmi(accumulator), &if_notobject, &if_notsmi); | 2577 __ Branch(__ TaggedIsSmi(accumulator), &if_notobject, &if_notsmi); |
2578 | 2578 |
2579 __ Bind(&if_notsmi); | 2579 __ Bind(&if_notsmi); |
2580 __ Branch(__ IsJSReceiver(accumulator), &if_object, &if_notobject); | 2580 __ Branch(__ IsJSReceiver(accumulator), &if_object, &if_notobject); |
2581 __ Bind(&if_object); | 2581 __ Bind(&if_object); |
2582 __ Jump(relative_jump); | 2582 __ Jump(relative_jump); |
2583 | 2583 |
(...skipping 23 matching lines...) Expand all Loading... |
2607 __ Dispatch(); | 2607 __ Dispatch(); |
2608 } | 2608 } |
2609 | 2609 |
2610 // JumpIfNotHole <imm> | 2610 // JumpIfNotHole <imm> |
2611 // | 2611 // |
2612 // Jump by number of bytes represented by an immediate operand if the object | 2612 // Jump by number of bytes represented by an immediate operand if the object |
2613 // referenced by the accumulator is the hole. | 2613 // referenced by the accumulator is the hole. |
2614 void Interpreter::DoJumpIfNotHole(InterpreterAssembler* assembler) { | 2614 void Interpreter::DoJumpIfNotHole(InterpreterAssembler* assembler) { |
2615 Node* accumulator = __ GetAccumulator(); | 2615 Node* accumulator = __ GetAccumulator(); |
2616 Node* the_hole_value = __ HeapConstant(isolate_->factory()->the_hole_value()); | 2616 Node* the_hole_value = __ HeapConstant(isolate_->factory()->the_hole_value()); |
2617 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); | 2617 Node* relative_jump = __ BytecodeOperandUImmWord(0); |
2618 __ JumpIfWordNotEqual(accumulator, the_hole_value, relative_jump); | 2618 __ JumpIfWordNotEqual(accumulator, the_hole_value, relative_jump); |
2619 } | 2619 } |
2620 | 2620 |
2621 // JumpIfNotHoleConstant <idx> | 2621 // JumpIfNotHoleConstant <idx> |
2622 // | 2622 // |
2623 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool | 2623 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool |
2624 // if the object referenced by the accumulator is the hole constant. | 2624 // if the object referenced by the accumulator is the hole constant. |
2625 void Interpreter::DoJumpIfNotHoleConstant(InterpreterAssembler* assembler) { | 2625 void Interpreter::DoJumpIfNotHoleConstant(InterpreterAssembler* assembler) { |
2626 Node* accumulator = __ GetAccumulator(); | 2626 Node* accumulator = __ GetAccumulator(); |
2627 Node* the_hole_value = __ HeapConstant(isolate_->factory()->the_hole_value()); | 2627 Node* the_hole_value = __ HeapConstant(isolate_->factory()->the_hole_value()); |
2628 Node* index = __ BytecodeOperandIdx(0); | 2628 Node* index = __ BytecodeOperandIdx(0); |
2629 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); | 2629 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); |
2630 __ JumpIfWordNotEqual(accumulator, the_hole_value, relative_jump); | 2630 __ JumpIfWordNotEqual(accumulator, the_hole_value, relative_jump); |
2631 } | 2631 } |
2632 | 2632 |
2633 // JumpLoop <imm> <loop_depth> | 2633 // JumpLoop <imm> <loop_depth> |
2634 // | 2634 // |
2635 // Jump by number of bytes represented by the immediate operand |imm|. Also | 2635 // Jump by number of bytes represented by the immediate operand |imm|. Also |
2636 // performs a loop nesting check and potentially triggers OSR in case the | 2636 // performs a loop nesting check and potentially triggers OSR in case the |
2637 // current OSR level matches (or exceeds) the specified |loop_depth|. | 2637 // current OSR level matches (or exceeds) the specified |loop_depth|. |
2638 void Interpreter::DoJumpLoop(InterpreterAssembler* assembler) { | 2638 void Interpreter::DoJumpLoop(InterpreterAssembler* assembler) { |
2639 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); | 2639 Node* relative_jump = __ BytecodeOperandUImmWord(0); |
2640 Node* loop_depth = __ BytecodeOperandImm(1); | 2640 Node* loop_depth = __ BytecodeOperandImm(1); |
2641 Node* osr_level = __ LoadOSRNestingLevel(); | 2641 Node* osr_level = __ LoadOSRNestingLevel(); |
2642 | 2642 |
2643 // Check if OSR points at the given {loop_depth} are armed by comparing it to | 2643 // Check if OSR points at the given {loop_depth} are armed by comparing it to |
2644 // the current {osr_level} loaded from the header of the BytecodeArray. | 2644 // the current {osr_level} loaded from the header of the BytecodeArray. |
2645 Label ok(assembler), osr_armed(assembler, Label::kDeferred); | 2645 Label ok(assembler), osr_armed(assembler, Label::kDeferred); |
2646 Node* condition = __ Int32GreaterThanOrEqual(loop_depth, osr_level); | 2646 Node* condition = __ Int32GreaterThanOrEqual(loop_depth, osr_level); |
2647 __ Branch(condition, &ok, &osr_armed); | 2647 __ Branch(condition, &ok, &osr_armed); |
2648 | 2648 |
2649 __ Bind(&ok); | 2649 __ Bind(&ok); |
2650 __ Jump(relative_jump); | 2650 __ JumpBackward(relative_jump); |
2651 | 2651 |
2652 __ Bind(&osr_armed); | 2652 __ Bind(&osr_armed); |
2653 { | 2653 { |
2654 Callable callable = CodeFactory::InterpreterOnStackReplacement(isolate_); | 2654 Callable callable = CodeFactory::InterpreterOnStackReplacement(isolate_); |
2655 Node* target = __ HeapConstant(callable.code()); | 2655 Node* target = __ HeapConstant(callable.code()); |
2656 Node* context = __ GetContext(); | 2656 Node* context = __ GetContext(); |
2657 __ CallStub(callable.descriptor(), target, context); | 2657 __ CallStub(callable.descriptor(), target, context); |
2658 __ Jump(relative_jump); | 2658 __ JumpBackward(relative_jump); |
2659 } | 2659 } |
2660 } | 2660 } |
2661 | 2661 |
2662 // CreateRegExpLiteral <pattern_idx> <literal_idx> <flags> | 2662 // CreateRegExpLiteral <pattern_idx> <literal_idx> <flags> |
2663 // | 2663 // |
2664 // Creates a regular expression literal for literal index <literal_idx> with | 2664 // Creates a regular expression literal for literal index <literal_idx> with |
2665 // <flags> and the pattern in <pattern_idx>. | 2665 // <flags> and the pattern in <pattern_idx>. |
2666 void Interpreter::DoCreateRegExpLiteral(InterpreterAssembler* assembler) { | 2666 void Interpreter::DoCreateRegExpLiteral(InterpreterAssembler* assembler) { |
2667 Node* index = __ BytecodeOperandIdx(0); | 2667 Node* index = __ BytecodeOperandIdx(0); |
2668 Node* pattern = __ LoadConstantPoolEntry(index); | 2668 Node* pattern = __ LoadConstantPoolEntry(index); |
(...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3299 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, | 3299 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, |
3300 __ SmiTag(new_state)); | 3300 __ SmiTag(new_state)); |
3301 __ SetAccumulator(old_state); | 3301 __ SetAccumulator(old_state); |
3302 | 3302 |
3303 __ Dispatch(); | 3303 __ Dispatch(); |
3304 } | 3304 } |
3305 | 3305 |
3306 } // namespace interpreter | 3306 } // namespace interpreter |
3307 } // namespace internal | 3307 } // namespace internal |
3308 } // namespace v8 | 3308 } // namespace v8 |
OLD | NEW |