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

Side by Side Diff: src/interpreter/interpreter.cc

Issue 2641443002: [ignition] Use absolute values for jump offsets (Closed)
Patch Set: Rebase Created 3 years, 10 months 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
« no previous file with comments | « src/interpreter/bytecodes.h ('k') | src/interpreter/interpreter-assembler.h » ('j') | 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 "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
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
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
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
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
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
OLDNEW
« no previous file with comments | « src/interpreter/bytecodes.h ('k') | src/interpreter/interpreter-assembler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698