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

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

Issue 2641443002: [ignition] Use absolute values for jump offsets (Closed)
Patch Set: Fix unsigned comparison Created 3 years, 11 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
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 2333 matching lines...) Expand 10 before | Expand all | Expand 10 after
2344 } 2344 }
2345 2345
2346 __ Bind(&end); 2346 __ Bind(&end);
2347 __ Dispatch(); 2347 __ Dispatch();
2348 } 2348 }
2349 2349
2350 // Jump <imm> 2350 // Jump <imm>
2351 // 2351 //
2352 // Jump by number of bytes represented by the immediate operand |imm|. 2352 // Jump by number of bytes represented by the immediate operand |imm|.
2353 void Interpreter::DoJump(InterpreterAssembler* assembler) { 2353 void Interpreter::DoJump(InterpreterAssembler* assembler) {
2354 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); 2354 Node* relative_jump = __ BytecodeOperandUImmWord(0);
2355 __ Jump(relative_jump); 2355 __ Jump(relative_jump);
2356 } 2356 }
2357 2357
2358 // JumpConstant <idx> 2358 // JumpConstant <idx>
2359 // 2359 //
2360 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool. 2360 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool.
2361 void Interpreter::DoJumpConstant(InterpreterAssembler* assembler) { 2361 void Interpreter::DoJumpConstant(InterpreterAssembler* assembler) {
2362 Node* index = __ BytecodeOperandIdx(0); 2362 Node* index = __ BytecodeOperandIdx(0);
2363 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); 2363 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index);
2364 __ Jump(relative_jump); 2364 __ Jump(relative_jump);
2365 } 2365 }
2366 2366
2367 // JumpIfTrue <imm> 2367 // JumpIfTrue <imm>
2368 // 2368 //
2369 // Jump by number of bytes represented by an immediate operand if the 2369 // Jump by number of bytes represented by an immediate operand if the
2370 // accumulator contains true. 2370 // accumulator contains true.
2371 void Interpreter::DoJumpIfTrue(InterpreterAssembler* assembler) { 2371 void Interpreter::DoJumpIfTrue(InterpreterAssembler* assembler) {
2372 Node* accumulator = __ GetAccumulator(); 2372 Node* accumulator = __ GetAccumulator();
2373 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); 2373 Node* relative_jump = __ BytecodeOperandUImmWord(0);
2374 Node* true_value = __ BooleanConstant(true); 2374 Node* true_value = __ BooleanConstant(true);
2375 __ JumpIfWordEqual(accumulator, true_value, relative_jump); 2375 __ JumpIfWordEqual(accumulator, true_value, relative_jump);
2376 } 2376 }
2377 2377
2378 // JumpIfTrueConstant <idx> 2378 // JumpIfTrueConstant <idx>
2379 // 2379 //
2380 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 2380 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool
2381 // if the accumulator contains true. 2381 // if the accumulator contains true.
2382 void Interpreter::DoJumpIfTrueConstant(InterpreterAssembler* assembler) { 2382 void Interpreter::DoJumpIfTrueConstant(InterpreterAssembler* assembler) {
2383 Node* accumulator = __ GetAccumulator(); 2383 Node* accumulator = __ GetAccumulator();
2384 Node* index = __ BytecodeOperandIdx(0); 2384 Node* index = __ BytecodeOperandIdx(0);
2385 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); 2385 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index);
2386 Node* true_value = __ BooleanConstant(true); 2386 Node* true_value = __ BooleanConstant(true);
2387 __ JumpIfWordEqual(accumulator, true_value, relative_jump); 2387 __ JumpIfWordEqual(accumulator, true_value, relative_jump);
2388 } 2388 }
2389 2389
2390 // JumpIfFalse <imm> 2390 // JumpIfFalse <imm>
2391 // 2391 //
2392 // Jump by number of bytes represented by an immediate operand if the 2392 // Jump by number of bytes represented by an immediate operand if the
2393 // accumulator contains false. 2393 // accumulator contains false.
2394 void Interpreter::DoJumpIfFalse(InterpreterAssembler* assembler) { 2394 void Interpreter::DoJumpIfFalse(InterpreterAssembler* assembler) {
2395 Node* accumulator = __ GetAccumulator(); 2395 Node* accumulator = __ GetAccumulator();
2396 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); 2396 Node* relative_jump = __ BytecodeOperandUImmWord(0);
2397 Node* false_value = __ BooleanConstant(false); 2397 Node* false_value = __ BooleanConstant(false);
2398 __ JumpIfWordEqual(accumulator, false_value, relative_jump); 2398 __ JumpIfWordEqual(accumulator, false_value, relative_jump);
2399 } 2399 }
2400 2400
2401 // JumpIfFalseConstant <idx> 2401 // JumpIfFalseConstant <idx>
2402 // 2402 //
2403 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 2403 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool
2404 // if the accumulator contains false. 2404 // if the accumulator contains false.
2405 void Interpreter::DoJumpIfFalseConstant(InterpreterAssembler* assembler) { 2405 void Interpreter::DoJumpIfFalseConstant(InterpreterAssembler* assembler) {
2406 Node* accumulator = __ GetAccumulator(); 2406 Node* accumulator = __ GetAccumulator();
2407 Node* index = __ BytecodeOperandIdx(0); 2407 Node* index = __ BytecodeOperandIdx(0);
2408 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); 2408 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index);
2409 Node* false_value = __ BooleanConstant(false); 2409 Node* false_value = __ BooleanConstant(false);
2410 __ JumpIfWordEqual(accumulator, false_value, relative_jump); 2410 __ JumpIfWordEqual(accumulator, false_value, relative_jump);
2411 } 2411 }
2412 2412
2413 // JumpIfToBooleanTrue <imm> 2413 // JumpIfToBooleanTrue <imm>
2414 // 2414 //
2415 // Jump by number of bytes represented by an immediate operand if the object 2415 // Jump by number of bytes represented by an immediate operand if the object
2416 // referenced by the accumulator is true when the object is cast to boolean. 2416 // referenced by the accumulator is true when the object is cast to boolean.
2417 void Interpreter::DoJumpIfToBooleanTrue(InterpreterAssembler* assembler) { 2417 void Interpreter::DoJumpIfToBooleanTrue(InterpreterAssembler* assembler) {
2418 Node* value = __ GetAccumulator(); 2418 Node* value = __ GetAccumulator();
2419 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); 2419 Node* relative_jump = __ BytecodeOperandUImmWord(0);
2420 Label if_true(assembler), if_false(assembler); 2420 Label if_true(assembler), if_false(assembler);
2421 __ BranchIfToBooleanIsTrue(value, &if_true, &if_false); 2421 __ BranchIfToBooleanIsTrue(value, &if_true, &if_false);
2422 __ Bind(&if_true); 2422 __ Bind(&if_true);
2423 __ Jump(relative_jump); 2423 __ Jump(relative_jump);
2424 __ Bind(&if_false); 2424 __ Bind(&if_false);
2425 __ Dispatch(); 2425 __ Dispatch();
2426 } 2426 }
2427 2427
2428 // JumpIfToBooleanTrueConstant <idx> 2428 // JumpIfToBooleanTrueConstant <idx>
2429 // 2429 //
(...skipping 12 matching lines...) Expand all
2442 __ Bind(&if_false); 2442 __ Bind(&if_false);
2443 __ Dispatch(); 2443 __ Dispatch();
2444 } 2444 }
2445 2445
2446 // JumpIfToBooleanFalse <imm> 2446 // JumpIfToBooleanFalse <imm>
2447 // 2447 //
2448 // Jump by number of bytes represented by an immediate operand if the object 2448 // Jump by number of bytes represented by an immediate operand if the object
2449 // referenced by the accumulator is false when the object is cast to boolean. 2449 // referenced by the accumulator is false when the object is cast to boolean.
2450 void Interpreter::DoJumpIfToBooleanFalse(InterpreterAssembler* assembler) { 2450 void Interpreter::DoJumpIfToBooleanFalse(InterpreterAssembler* assembler) {
2451 Node* value = __ GetAccumulator(); 2451 Node* value = __ GetAccumulator();
2452 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); 2452 Node* relative_jump = __ BytecodeOperandUImmWord(0);
2453 Label if_true(assembler), if_false(assembler); 2453 Label if_true(assembler), if_false(assembler);
2454 __ BranchIfToBooleanIsTrue(value, &if_true, &if_false); 2454 __ BranchIfToBooleanIsTrue(value, &if_true, &if_false);
2455 __ Bind(&if_true); 2455 __ Bind(&if_true);
2456 __ Dispatch(); 2456 __ Dispatch();
2457 __ Bind(&if_false); 2457 __ Bind(&if_false);
2458 __ Jump(relative_jump); 2458 __ Jump(relative_jump);
2459 } 2459 }
2460 2460
2461 // JumpIfToBooleanFalseConstant <idx> 2461 // JumpIfToBooleanFalseConstant <idx>
2462 // 2462 //
(...skipping 13 matching lines...) Expand all
2476 __ Jump(relative_jump); 2476 __ Jump(relative_jump);
2477 } 2477 }
2478 2478
2479 // JumpIfNull <imm> 2479 // JumpIfNull <imm>
2480 // 2480 //
2481 // Jump by number of bytes represented by an immediate operand if the object 2481 // Jump by number of bytes represented by an immediate operand if the object
2482 // referenced by the accumulator is the null constant. 2482 // referenced by the accumulator is the null constant.
2483 void Interpreter::DoJumpIfNull(InterpreterAssembler* assembler) { 2483 void Interpreter::DoJumpIfNull(InterpreterAssembler* assembler) {
2484 Node* accumulator = __ GetAccumulator(); 2484 Node* accumulator = __ GetAccumulator();
2485 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); 2485 Node* null_value = __ HeapConstant(isolate_->factory()->null_value());
2486 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); 2486 Node* relative_jump = __ BytecodeOperandUImmWord(0);
2487 __ JumpIfWordEqual(accumulator, null_value, relative_jump); 2487 __ JumpIfWordEqual(accumulator, null_value, relative_jump);
2488 } 2488 }
2489 2489
2490 // JumpIfNullConstant <idx> 2490 // JumpIfNullConstant <idx>
2491 // 2491 //
2492 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 2492 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool
2493 // if the object referenced by the accumulator is the null constant. 2493 // if the object referenced by the accumulator is the null constant.
2494 void Interpreter::DoJumpIfNullConstant(InterpreterAssembler* assembler) { 2494 void Interpreter::DoJumpIfNullConstant(InterpreterAssembler* assembler) {
2495 Node* accumulator = __ GetAccumulator(); 2495 Node* accumulator = __ GetAccumulator();
2496 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); 2496 Node* null_value = __ HeapConstant(isolate_->factory()->null_value());
2497 Node* index = __ BytecodeOperandIdx(0); 2497 Node* index = __ BytecodeOperandIdx(0);
2498 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); 2498 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index);
2499 __ JumpIfWordEqual(accumulator, null_value, relative_jump); 2499 __ JumpIfWordEqual(accumulator, null_value, relative_jump);
2500 } 2500 }
2501 2501
2502 // JumpIfUndefined <imm> 2502 // JumpIfUndefined <imm>
2503 // 2503 //
2504 // Jump by number of bytes represented by an immediate operand if the object 2504 // Jump by number of bytes represented by an immediate operand if the object
2505 // referenced by the accumulator is the undefined constant. 2505 // referenced by the accumulator is the undefined constant.
2506 void Interpreter::DoJumpIfUndefined(InterpreterAssembler* assembler) { 2506 void Interpreter::DoJumpIfUndefined(InterpreterAssembler* assembler) {
2507 Node* accumulator = __ GetAccumulator(); 2507 Node* accumulator = __ GetAccumulator();
2508 Node* undefined_value = 2508 Node* undefined_value =
2509 __ HeapConstant(isolate_->factory()->undefined_value()); 2509 __ HeapConstant(isolate_->factory()->undefined_value());
2510 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); 2510 Node* relative_jump = __ BytecodeOperandUImmWord(0);
2511 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); 2511 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump);
2512 } 2512 }
2513 2513
2514 // JumpIfUndefinedConstant <idx> 2514 // JumpIfUndefinedConstant <idx>
2515 // 2515 //
2516 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 2516 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool
2517 // if the object referenced by the accumulator is the undefined constant. 2517 // if the object referenced by the accumulator is the undefined constant.
2518 void Interpreter::DoJumpIfUndefinedConstant(InterpreterAssembler* assembler) { 2518 void Interpreter::DoJumpIfUndefinedConstant(InterpreterAssembler* assembler) {
2519 Node* accumulator = __ GetAccumulator(); 2519 Node* accumulator = __ GetAccumulator();
2520 Node* undefined_value = 2520 Node* undefined_value =
2521 __ HeapConstant(isolate_->factory()->undefined_value()); 2521 __ HeapConstant(isolate_->factory()->undefined_value());
2522 Node* index = __ BytecodeOperandIdx(0); 2522 Node* index = __ BytecodeOperandIdx(0);
2523 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); 2523 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index);
2524 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); 2524 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump);
2525 } 2525 }
2526 2526
2527 // JumpIfJSReceiver <imm> 2527 // JumpIfJSReceiver <imm>
2528 // 2528 //
2529 // Jump by number of bytes represented by an immediate operand if the object 2529 // Jump by number of bytes represented by an immediate operand if the object
2530 // referenced by the accumulator is a JSReceiver. 2530 // referenced by the accumulator is a JSReceiver.
2531 void Interpreter::DoJumpIfJSReceiver(InterpreterAssembler* assembler) { 2531 void Interpreter::DoJumpIfJSReceiver(InterpreterAssembler* assembler) {
2532 Node* accumulator = __ GetAccumulator(); 2532 Node* accumulator = __ GetAccumulator();
2533 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); 2533 Node* relative_jump = __ BytecodeOperandUImmWord(0);
2534 2534
2535 Label if_object(assembler), if_notobject(assembler, Label::kDeferred), 2535 Label if_object(assembler), if_notobject(assembler, Label::kDeferred),
2536 if_notsmi(assembler); 2536 if_notsmi(assembler);
2537 __ Branch(__ TaggedIsSmi(accumulator), &if_notobject, &if_notsmi); 2537 __ Branch(__ TaggedIsSmi(accumulator), &if_notobject, &if_notsmi);
2538 2538
2539 __ Bind(&if_notsmi); 2539 __ Bind(&if_notsmi);
2540 __ Branch(__ IsJSReceiver(accumulator), &if_object, &if_notobject); 2540 __ Branch(__ IsJSReceiver(accumulator), &if_object, &if_notobject);
2541 __ Bind(&if_object); 2541 __ Bind(&if_object);
2542 __ Jump(relative_jump); 2542 __ Jump(relative_jump);
2543 2543
(...skipping 23 matching lines...) Expand all
2567 __ Dispatch(); 2567 __ Dispatch();
2568 } 2568 }
2569 2569
2570 // JumpIfNotHole <imm> 2570 // JumpIfNotHole <imm>
2571 // 2571 //
2572 // Jump by number of bytes represented by an immediate operand if the object 2572 // Jump by number of bytes represented by an immediate operand if the object
2573 // referenced by the accumulator is the hole. 2573 // referenced by the accumulator is the hole.
2574 void Interpreter::DoJumpIfNotHole(InterpreterAssembler* assembler) { 2574 void Interpreter::DoJumpIfNotHole(InterpreterAssembler* assembler) {
2575 Node* accumulator = __ GetAccumulator(); 2575 Node* accumulator = __ GetAccumulator();
2576 Node* the_hole_value = __ HeapConstant(isolate_->factory()->the_hole_value()); 2576 Node* the_hole_value = __ HeapConstant(isolate_->factory()->the_hole_value());
2577 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); 2577 Node* relative_jump = __ BytecodeOperandUImmWord(0);
2578 __ JumpIfWordNotEqual(accumulator, the_hole_value, relative_jump); 2578 __ JumpIfWordNotEqual(accumulator, the_hole_value, relative_jump);
2579 } 2579 }
2580 2580
2581 // JumpIfNotHoleConstant <idx> 2581 // JumpIfNotHoleConstant <idx>
2582 // 2582 //
2583 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 2583 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool
2584 // if the object referenced by the accumulator is the hole constant. 2584 // if the object referenced by the accumulator is the hole constant.
2585 void Interpreter::DoJumpIfNotHoleConstant(InterpreterAssembler* assembler) { 2585 void Interpreter::DoJumpIfNotHoleConstant(InterpreterAssembler* assembler) {
2586 Node* accumulator = __ GetAccumulator(); 2586 Node* accumulator = __ GetAccumulator();
2587 Node* the_hole_value = __ HeapConstant(isolate_->factory()->the_hole_value()); 2587 Node* the_hole_value = __ HeapConstant(isolate_->factory()->the_hole_value());
2588 Node* index = __ BytecodeOperandIdx(0); 2588 Node* index = __ BytecodeOperandIdx(0);
2589 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index); 2589 Node* relative_jump = __ LoadAndUntagConstantPoolEntry(index);
2590 __ JumpIfWordNotEqual(accumulator, the_hole_value, relative_jump); 2590 __ JumpIfWordNotEqual(accumulator, the_hole_value, relative_jump);
2591 } 2591 }
2592 2592
2593 // JumpLoop <imm> <loop_depth> 2593 // JumpLoop <imm> <loop_depth>
2594 // 2594 //
2595 // Jump by number of bytes represented by the immediate operand |imm|. Also 2595 // Jump by number of bytes represented by the immediate operand |imm|. Also
2596 // performs a loop nesting check and potentially triggers OSR in case the 2596 // performs a loop nesting check and potentially triggers OSR in case the
2597 // current OSR level matches (or exceeds) the specified |loop_depth|. 2597 // current OSR level matches (or exceeds) the specified |loop_depth|.
2598 void Interpreter::DoJumpLoop(InterpreterAssembler* assembler) { 2598 void Interpreter::DoJumpLoop(InterpreterAssembler* assembler) {
2599 Node* relative_jump = __ BytecodeOperandImmIntPtr(0); 2599 Node* relative_jump = __ BytecodeOperandUImmWord(0);
2600 Node* loop_depth = __ BytecodeOperandImm(1); 2600 Node* loop_depth = __ BytecodeOperandImm(1);
2601 Node* osr_level = __ LoadOSRNestingLevel(); 2601 Node* osr_level = __ LoadOSRNestingLevel();
2602 2602
2603 // Check if OSR points at the given {loop_depth} are armed by comparing it to 2603 // Check if OSR points at the given {loop_depth} are armed by comparing it to
2604 // the current {osr_level} loaded from the header of the BytecodeArray. 2604 // the current {osr_level} loaded from the header of the BytecodeArray.
2605 Label ok(assembler), osr_armed(assembler, Label::kDeferred); 2605 Label ok(assembler), osr_armed(assembler, Label::kDeferred);
2606 Node* condition = __ Int32GreaterThanOrEqual(loop_depth, osr_level); 2606 Node* condition = __ Int32GreaterThanOrEqual(loop_depth, osr_level);
2607 __ Branch(condition, &ok, &osr_armed); 2607 __ Branch(condition, &ok, &osr_armed);
2608 2608
2609 __ Bind(&ok); 2609 __ Bind(&ok);
2610 __ Jump(relative_jump); 2610 __ Jump(relative_jump, true);
2611 2611
2612 __ Bind(&osr_armed); 2612 __ Bind(&osr_armed);
2613 { 2613 {
2614 Callable callable = CodeFactory::InterpreterOnStackReplacement(isolate_); 2614 Callable callable = CodeFactory::InterpreterOnStackReplacement(isolate_);
2615 Node* target = __ HeapConstant(callable.code()); 2615 Node* target = __ HeapConstant(callable.code());
2616 Node* context = __ GetContext(); 2616 Node* context = __ GetContext();
2617 __ CallStub(callable.descriptor(), target, context); 2617 __ CallStub(callable.descriptor(), target, context);
2618 __ Jump(relative_jump); 2618 __ Jump(relative_jump, true);
2619 } 2619 }
2620 } 2620 }
2621 2621
2622 // CreateRegExpLiteral <pattern_idx> <literal_idx> <flags> 2622 // CreateRegExpLiteral <pattern_idx> <literal_idx> <flags>
2623 // 2623 //
2624 // Creates a regular expression literal for literal index <literal_idx> with 2624 // Creates a regular expression literal for literal index <literal_idx> with
2625 // <flags> and the pattern in <pattern_idx>. 2625 // <flags> and the pattern in <pattern_idx>.
2626 void Interpreter::DoCreateRegExpLiteral(InterpreterAssembler* assembler) { 2626 void Interpreter::DoCreateRegExpLiteral(InterpreterAssembler* assembler) {
2627 Node* index = __ BytecodeOperandIdx(0); 2627 Node* index = __ BytecodeOperandIdx(0);
2628 Node* pattern = __ LoadConstantPoolEntry(index); 2628 Node* pattern = __ LoadConstantPoolEntry(index);
(...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after
3259 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, 3259 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset,
3260 __ SmiTag(new_state)); 3260 __ SmiTag(new_state));
3261 __ SetAccumulator(old_state); 3261 __ SetAccumulator(old_state);
3262 3262
3263 __ Dispatch(); 3263 __ Dispatch();
3264 } 3264 }
3265 3265
3266 } // namespace interpreter 3266 } // namespace interpreter
3267 } // namespace internal 3267 } // namespace internal
3268 } // namespace v8 3268 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698