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

Side by Side Diff: src/compiler/interpreter-assembler.cc

Issue 1512543002: [Interpreter] Save bytecode offset in interpreter stack frames. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 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
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/compiler/interpreter-assembler.h" 5 #include "src/compiler/interpreter-assembler.h"
6 6
7 #include <ostream> 7 #include <ostream>
8 8
9 #include "src/code-factory.h" 9 #include "src/code-factory.h"
10 #include "src/compiler/graph.h" 10 #include "src/compiler/graph.h"
(...skipping 16 matching lines...) Expand all
27 27
28 InterpreterAssembler::InterpreterAssembler(Isolate* isolate, Zone* zone, 28 InterpreterAssembler::InterpreterAssembler(Isolate* isolate, Zone* zone,
29 interpreter::Bytecode bytecode) 29 interpreter::Bytecode bytecode)
30 : bytecode_(bytecode), 30 : bytecode_(bytecode),
31 raw_assembler_(new RawMachineAssembler( 31 raw_assembler_(new RawMachineAssembler(
32 isolate, new (zone) Graph(zone), 32 isolate, new (zone) Graph(zone),
33 Linkage::GetInterpreterDispatchDescriptor(zone), kMachPtr, 33 Linkage::GetInterpreterDispatchDescriptor(zone), kMachPtr,
34 InstructionSelector::SupportedMachineOperatorFlags())), 34 InstructionSelector::SupportedMachineOperatorFlags())),
35 accumulator_( 35 accumulator_(
36 raw_assembler_->Parameter(Linkage::kInterpreterAccumulatorParameter)), 36 raw_assembler_->Parameter(Linkage::kInterpreterAccumulatorParameter)),
37 bytecode_offset_(raw_assembler_->Parameter(
38 Linkage::kInterpreterBytecodeOffsetParameter)),
37 context_( 39 context_(
38 raw_assembler_->Parameter(Linkage::kInterpreterContextParameter)), 40 raw_assembler_->Parameter(Linkage::kInterpreterContextParameter)),
39 code_generated_(false) {} 41 code_generated_(false) {}
40 42
41 43
42 InterpreterAssembler::~InterpreterAssembler() {} 44 InterpreterAssembler::~InterpreterAssembler() {}
43 45
44 46
45 Handle<Code> InterpreterAssembler::GenerateCode() { 47 Handle<Code> InterpreterAssembler::GenerateCode() {
46 DCHECK(!code_generated_); 48 DCHECK(!code_generated_);
(...skipping 26 matching lines...) Expand all
73 75
74 void InterpreterAssembler::SetAccumulator(Node* value) { accumulator_ = value; } 76 void InterpreterAssembler::SetAccumulator(Node* value) { accumulator_ = value; }
75 77
76 78
77 Node* InterpreterAssembler::GetContext() { return context_; } 79 Node* InterpreterAssembler::GetContext() { return context_; }
78 80
79 81
80 void InterpreterAssembler::SetContext(Node* value) { context_ = value; } 82 void InterpreterAssembler::SetContext(Node* value) { context_ = value; }
81 83
82 84
85 Node* InterpreterAssembler::BytecodeOffset() { return bytecode_offset_; }
86
87
83 Node* InterpreterAssembler::RegisterFileRawPointer() { 88 Node* InterpreterAssembler::RegisterFileRawPointer() {
84 return raw_assembler_->Parameter(Linkage::kInterpreterRegisterFileParameter); 89 return raw_assembler_->Parameter(Linkage::kInterpreterRegisterFileParameter);
85 } 90 }
86 91
87 92
88 Node* InterpreterAssembler::BytecodeArrayTaggedPointer() { 93 Node* InterpreterAssembler::BytecodeArrayTaggedPointer() {
89 return raw_assembler_->Parameter(Linkage::kInterpreterBytecodeArrayParameter); 94 return raw_assembler_->Parameter(Linkage::kInterpreterBytecodeArrayParameter);
90 } 95 }
91 96
92 97
93 Node* InterpreterAssembler::BytecodeOffset() {
94 return raw_assembler_->Parameter(
95 Linkage::kInterpreterBytecodeOffsetParameter);
96 }
97
98
99 Node* InterpreterAssembler::DispatchTableRawPointer() { 98 Node* InterpreterAssembler::DispatchTableRawPointer() {
100 return raw_assembler_->Parameter(Linkage::kInterpreterDispatchTableParameter); 99 return raw_assembler_->Parameter(Linkage::kInterpreterDispatchTableParameter);
101 } 100 }
102 101
103 102
103 Node* InterpreterAssembler::RegisterLocation(Node* reg_index) {
104 return IntPtrAdd(RegisterFileRawPointer(), RegisterFrameOffset(reg_index));
105 }
106
107
108 Node* InterpreterAssembler::LoadRegister(int offset) {
109 return raw_assembler_->Load(kMachAnyTagged, RegisterFileRawPointer(),
110 Int32Constant(offset));
111 }
112
113
114 Node* InterpreterAssembler::LoadRegister(interpreter::Register reg) {
115 return LoadRegister(reg.ToOperand() << kPointerSizeLog2);
116 }
117
118
104 Node* InterpreterAssembler::RegisterFrameOffset(Node* index) { 119 Node* InterpreterAssembler::RegisterFrameOffset(Node* index) {
105 return WordShl(index, kPointerSizeLog2); 120 return WordShl(index, kPointerSizeLog2);
106 } 121 }
107 122
108 123
109 Node* InterpreterAssembler::RegisterLocation(Node* reg_index) {
110 return IntPtrAdd(RegisterFileRawPointer(), RegisterFrameOffset(reg_index));
111 }
112
113
114 Node* InterpreterAssembler::LoadRegister(interpreter::Register reg) {
115 return raw_assembler_->Load(
116 kMachAnyTagged, RegisterFileRawPointer(),
117 RegisterFrameOffset(Int32Constant(reg.ToOperand())));
118 }
119
120
121 Node* InterpreterAssembler::LoadRegister(Node* reg_index) { 124 Node* InterpreterAssembler::LoadRegister(Node* reg_index) {
122 return raw_assembler_->Load(kMachAnyTagged, RegisterFileRawPointer(), 125 return raw_assembler_->Load(kMachAnyTagged, RegisterFileRawPointer(),
123 RegisterFrameOffset(reg_index)); 126 RegisterFrameOffset(reg_index));
124 } 127 }
125 128
126 129
130 Node* InterpreterAssembler::StoreRegister(Node* value, int offset) {
131 return raw_assembler_->Store(kMachAnyTagged, RegisterFileRawPointer(),
132 Int32Constant(offset), value, kNoWriteBarrier);
133 }
134
135
136 Node* InterpreterAssembler::StoreRegister(Node* value,
137 interpreter::Register reg) {
138 return StoreRegister(value, reg.ToOperand() << kPointerSizeLog2);
139 }
140
141
127 Node* InterpreterAssembler::StoreRegister(Node* value, Node* reg_index) { 142 Node* InterpreterAssembler::StoreRegister(Node* value, Node* reg_index) {
128 return raw_assembler_->Store(kMachAnyTagged, RegisterFileRawPointer(), 143 return raw_assembler_->Store(kMachAnyTagged, RegisterFileRawPointer(),
129 RegisterFrameOffset(reg_index), value, 144 RegisterFrameOffset(reg_index), value,
130 kNoWriteBarrier); 145 kNoWriteBarrier);
131 } 146 }
132 147
133 148
134 Node* InterpreterAssembler::BytecodeOperand(int operand_index) { 149 Node* InterpreterAssembler::BytecodeOperand(int operand_index) {
135 DCHECK_LT(operand_index, interpreter::Bytecodes::NumberOfOperands(bytecode_)); 150 DCHECK_LT(operand_index, interpreter::Bytecodes::NumberOfOperands(bytecode_));
136 DCHECK_EQ(interpreter::OperandSize::kByte, 151 DCHECK_EQ(interpreter::OperandSize::kByte,
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 387
373 Node* code_target = HeapConstant(callable.code()); 388 Node* code_target = HeapConstant(callable.code());
374 389
375 Node** args = zone()->NewArray<Node*>(5); 390 Node** args = zone()->NewArray<Node*>(5);
376 args[0] = arg_count; 391 args[0] = arg_count;
377 args[1] = new_target; 392 args[1] = new_target;
378 args[2] = constructor; 393 args[2] = constructor;
379 args[3] = first_arg; 394 args[3] = first_arg;
380 args[4] = GetContext(); 395 args[4] = GetContext();
381 396
382 return CallN(descriptor, code_target, args); 397 return CallN(descriptor, code_target, args,
398 SaveAccumulatorMode::kClobberAccumulator);
399 }
400
401
402 void InterpreterAssembler::CallPrologue(
403 SaveAccumulatorMode save_accumulator_mode) {
404 if (save_accumulator_mode == SaveAccumulatorMode::kSaveAccumulator) {
405 StoreRegister(
406 accumulator_,
407 InterpreterFrameConstants::kSavedAccumulatorFromRegisterPointer);
408 } else {
409 DCHECK(save_accumulator_mode == SaveAccumulatorMode::kClobberAccumulator);
410 }
411
412 StoreRegister(SmiTag(bytecode_offset_),
413 InterpreterFrameConstants::kBytecodeOffsetFromRegisterPointer);
414 }
415
416
417 void InterpreterAssembler::CallEpilogue(
418 SaveAccumulatorMode save_accumulator_mode) {
419 // Restore the bytecode offset from the stack frame.
420 bytecode_offset_ = SmiUntag(LoadRegister(
421 InterpreterFrameConstants::kBytecodeOffsetFromRegisterPointer));
422
423 if (save_accumulator_mode == SaveAccumulatorMode::kSaveAccumulator) {
424 // Restore accumulator from stack frame.
425 accumulator_ = LoadRegister(
426 InterpreterFrameConstants::kSavedAccumulatorFromRegisterPointer);
427 } else {
428 // Clobber the accumulator.
429 DCHECK(save_accumulator_mode == SaveAccumulatorMode::kClobberAccumulator);
430 accumulator_ = nullptr;
431 }
383 } 432 }
384 433
385 434
386 Node* InterpreterAssembler::CallN(CallDescriptor* descriptor, Node* code_target, 435 Node* InterpreterAssembler::CallN(CallDescriptor* descriptor, Node* code_target,
387 Node** args) { 436 Node** args,
437 SaveAccumulatorMode save_accumulator_mode) {
438 CallPrologue(save_accumulator_mode);
439
388 Node* stack_pointer_before_call = nullptr; 440 Node* stack_pointer_before_call = nullptr;
389 if (FLAG_debug_code) { 441 if (FLAG_debug_code) {
390 stack_pointer_before_call = raw_assembler_->LoadStackPointer(); 442 stack_pointer_before_call = raw_assembler_->LoadStackPointer();
391 } 443 }
392 Node* return_val = raw_assembler_->CallN(descriptor, code_target, args); 444 Node* return_val = raw_assembler_->CallN(descriptor, code_target, args);
393 if (FLAG_debug_code) { 445 if (FLAG_debug_code) {
394 Node* stack_pointer_after_call = raw_assembler_->LoadStackPointer(); 446 Node* stack_pointer_after_call = raw_assembler_->LoadStackPointer();
395 AbortIfWordNotEqual(stack_pointer_before_call, stack_pointer_after_call, 447 AbortIfWordNotEqual(stack_pointer_before_call, stack_pointer_after_call,
396 kUnexpectedStackPointer); 448 kUnexpectedStackPointer);
397 } 449 }
450
451 CallEpilogue(save_accumulator_mode);
398 return return_val; 452 return return_val;
399 } 453 }
400 454
401 455
402 Node* InterpreterAssembler::CallJS(Node* function, Node* first_arg, 456 Node* InterpreterAssembler::CallJS(Node* function, Node* first_arg,
403 Node* arg_count) { 457 Node* arg_count) {
404 Callable callable = CodeFactory::InterpreterPushArgsAndCall(isolate()); 458 Callable callable = CodeFactory::InterpreterPushArgsAndCall(isolate());
405 CallDescriptor* descriptor = Linkage::GetStubCallDescriptor( 459 CallDescriptor* descriptor = Linkage::GetStubCallDescriptor(
406 isolate(), zone(), callable.descriptor(), 0, CallDescriptor::kNoFlags); 460 isolate(), zone(), callable.descriptor(), 0, CallDescriptor::kNoFlags);
407 461
408 Node* code_target = HeapConstant(callable.code()); 462 Node* code_target = HeapConstant(callable.code());
409 463
410 Node** args = zone()->NewArray<Node*>(4); 464 Node** args = zone()->NewArray<Node*>(4);
411 args[0] = arg_count; 465 args[0] = arg_count;
412 args[1] = first_arg; 466 args[1] = first_arg;
413 args[2] = function; 467 args[2] = function;
414 args[3] = GetContext(); 468 args[3] = GetContext();
415 469
416 return CallN(descriptor, code_target, args); 470 return CallN(descriptor, code_target, args,
471 SaveAccumulatorMode::kClobberAccumulator);
417 } 472 }
418 473
419 474
420 Node* InterpreterAssembler::CallIC(CallInterfaceDescriptor descriptor, 475 Node* InterpreterAssembler::CallIC(CallInterfaceDescriptor descriptor,
421 Node* target, Node** args) { 476 Node* target, Node** args,
477 SaveAccumulatorMode save_accumulator_mode) {
422 CallDescriptor* call_descriptor = Linkage::GetStubCallDescriptor( 478 CallDescriptor* call_descriptor = Linkage::GetStubCallDescriptor(
423 isolate(), zone(), descriptor, 0, CallDescriptor::kNoFlags); 479 isolate(), zone(), descriptor, 0, CallDescriptor::kNoFlags);
424 return CallN(call_descriptor, target, args); 480 return CallN(call_descriptor, target, args, save_accumulator_mode);
425 } 481 }
426 482
427 483
428 Node* InterpreterAssembler::CallIC(CallInterfaceDescriptor descriptor, 484 Node* InterpreterAssembler::CallIC(CallInterfaceDescriptor descriptor,
429 Node* target, Node* arg1, Node* arg2, 485 Node* target, Node* arg1, Node* arg2,
430 Node* arg3) { 486 Node* arg3,
487 SaveAccumulatorMode save_accumulator_mode) {
431 Node** args = zone()->NewArray<Node*>(4); 488 Node** args = zone()->NewArray<Node*>(4);
432 args[0] = arg1; 489 args[0] = arg1;
433 args[1] = arg2; 490 args[1] = arg2;
434 args[2] = arg3; 491 args[2] = arg3;
435 args[3] = GetContext(); 492 args[3] = GetContext();
436 return CallIC(descriptor, target, args); 493 return CallIC(descriptor, target, args, save_accumulator_mode);
437 } 494 }
438 495
439 496
440 Node* InterpreterAssembler::CallIC(CallInterfaceDescriptor descriptor, 497 Node* InterpreterAssembler::CallIC(CallInterfaceDescriptor descriptor,
441 Node* target, Node* arg1, Node* arg2, 498 Node* target, Node* arg1, Node* arg2,
442 Node* arg3, Node* arg4) { 499 Node* arg3, Node* arg4,
500 SaveAccumulatorMode save_accumulator_mode) {
443 Node** args = zone()->NewArray<Node*>(5); 501 Node** args = zone()->NewArray<Node*>(5);
444 args[0] = arg1; 502 args[0] = arg1;
445 args[1] = arg2; 503 args[1] = arg2;
446 args[2] = arg3; 504 args[2] = arg3;
447 args[3] = arg4; 505 args[3] = arg4;
448 args[4] = GetContext(); 506 args[4] = GetContext();
449 return CallIC(descriptor, target, args); 507 return CallIC(descriptor, target, args, save_accumulator_mode);
450 } 508 }
451 509
452 510
453 Node* InterpreterAssembler::CallIC(CallInterfaceDescriptor descriptor, 511 Node* InterpreterAssembler::CallIC(CallInterfaceDescriptor descriptor,
454 Node* target, Node* arg1, Node* arg2, 512 Node* target, Node* arg1, Node* arg2,
455 Node* arg3, Node* arg4, Node* arg5) { 513 Node* arg3, Node* arg4, Node* arg5,
514 SaveAccumulatorMode save_accumulator_mode) {
456 Node** args = zone()->NewArray<Node*>(6); 515 Node** args = zone()->NewArray<Node*>(6);
457 args[0] = arg1; 516 args[0] = arg1;
458 args[1] = arg2; 517 args[1] = arg2;
459 args[2] = arg3; 518 args[2] = arg3;
460 args[3] = arg4; 519 args[3] = arg4;
461 args[4] = arg5; 520 args[4] = arg5;
462 args[5] = GetContext(); 521 args[5] = GetContext();
463 return CallIC(descriptor, target, args); 522 return CallIC(descriptor, target, args, save_accumulator_mode);
464 } 523 }
465 524
466 525
467 Node* InterpreterAssembler::CallRuntime(Node* function_id, Node* first_arg, 526 Node* InterpreterAssembler::CallRuntime(
468 Node* arg_count) { 527 Node* function_id, Node* first_arg, Node* arg_count,
528 SaveAccumulatorMode save_accumulator_mode) {
469 Callable callable = CodeFactory::InterpreterCEntry(isolate()); 529 Callable callable = CodeFactory::InterpreterCEntry(isolate());
470 CallDescriptor* descriptor = Linkage::GetStubCallDescriptor( 530 CallDescriptor* descriptor = Linkage::GetStubCallDescriptor(
471 isolate(), zone(), callable.descriptor(), 0, CallDescriptor::kNoFlags); 531 isolate(), zone(), callable.descriptor(), 0, CallDescriptor::kNoFlags);
472 532
473 Node* code_target = HeapConstant(callable.code()); 533 Node* code_target = HeapConstant(callable.code());
474 534
475 // Get the function entry from the function id. 535 // Get the function entry from the function id.
476 Node* function_table = raw_assembler_->ExternalConstant( 536 Node* function_table = raw_assembler_->ExternalConstant(
477 ExternalReference::runtime_function_table_address(isolate())); 537 ExternalReference::runtime_function_table_address(isolate()));
478 Node* function_offset = raw_assembler_->Int32Mul( 538 Node* function_offset = raw_assembler_->Int32Mul(
479 function_id, Int32Constant(sizeof(Runtime::Function))); 539 function_id, Int32Constant(sizeof(Runtime::Function)));
480 Node* function = IntPtrAdd(function_table, function_offset); 540 Node* function = IntPtrAdd(function_table, function_offset);
481 Node* function_entry = raw_assembler_->Load( 541 Node* function_entry = raw_assembler_->Load(
482 kMachPtr, function, Int32Constant(offsetof(Runtime::Function, entry))); 542 kMachPtr, function, Int32Constant(offsetof(Runtime::Function, entry)));
483 543
484 Node** args = zone()->NewArray<Node*>(4); 544 Node** args = zone()->NewArray<Node*>(4);
485 args[0] = arg_count; 545 args[0] = arg_count;
486 args[1] = first_arg; 546 args[1] = first_arg;
487 args[2] = function_entry; 547 args[2] = function_entry;
488 args[3] = GetContext(); 548 args[3] = GetContext();
489 549
490 return CallN(descriptor, code_target, args); 550 return CallN(descriptor, code_target, args, save_accumulator_mode);
491 } 551 }
492 552
493 553
494 Node* InterpreterAssembler::CallRuntime(Runtime::FunctionId function_id, 554 Node* InterpreterAssembler::CallRuntime(
495 Node* arg1) { 555 Runtime::FunctionId function_id, Node* arg1,
496 return raw_assembler_->CallRuntime1(function_id, arg1, GetContext()); 556 SaveAccumulatorMode save_accumulator_mode) {
557 CallPrologue(save_accumulator_mode);
558 Node* return_val =
559 raw_assembler_->CallRuntime1(function_id, arg1, GetContext());
560 CallEpilogue(save_accumulator_mode);
561 return return_val;
497 } 562 }
498 563
499 564
500 Node* InterpreterAssembler::CallRuntime(Runtime::FunctionId function_id, 565 Node* InterpreterAssembler::CallRuntime(
501 Node* arg1, Node* arg2) { 566 Runtime::FunctionId function_id, Node* arg1, Node* arg2,
502 return raw_assembler_->CallRuntime2(function_id, arg1, arg2, GetContext()); 567 SaveAccumulatorMode save_accumulator_mode) {
568 CallPrologue(save_accumulator_mode);
569 Node* return_val =
570 raw_assembler_->CallRuntime2(function_id, arg1, arg2, GetContext());
571 CallEpilogue(save_accumulator_mode);
572 return return_val;
503 } 573 }
504 574
505 575
506 Node* InterpreterAssembler::CallRuntime(Runtime::FunctionId function_id, 576 Node* InterpreterAssembler::CallRuntime(
507 Node* arg1, Node* arg2, Node* arg3, 577 Runtime::FunctionId function_id, Node* arg1, Node* arg2, Node* arg3,
508 Node* arg4) { 578 Node* arg4, SaveAccumulatorMode save_accumulator_mode) {
509 return raw_assembler_->CallRuntime4(function_id, arg1, arg2, arg3, arg4, 579 CallPrologue(save_accumulator_mode);
510 GetContext()); 580 Node* return_val = raw_assembler_->CallRuntime4(function_id, arg1, arg2, arg3,
581 arg4, GetContext());
582 CallEpilogue(save_accumulator_mode);
583 return return_val;
511 } 584 }
512 585
513 586
514 void InterpreterAssembler::Return() { 587 void InterpreterAssembler::Return() {
515 Node* exit_trampoline_code_object = 588 Node* exit_trampoline_code_object =
516 HeapConstant(isolate()->builtins()->InterpreterExitTrampoline()); 589 HeapConstant(isolate()->builtins()->InterpreterExitTrampoline());
517 // If the order of the parameters you need to change the call signature below. 590 // If the order of the parameters you need to change the call signature below.
518 STATIC_ASSERT(0 == Linkage::kInterpreterAccumulatorParameter); 591 STATIC_ASSERT(0 == Linkage::kInterpreterAccumulatorParameter);
519 STATIC_ASSERT(1 == Linkage::kInterpreterRegisterFileParameter); 592 STATIC_ASSERT(1 == Linkage::kInterpreterRegisterFileParameter);
520 STATIC_ASSERT(2 == Linkage::kInterpreterBytecodeOffsetParameter); 593 STATIC_ASSERT(2 == Linkage::kInterpreterBytecodeOffsetParameter);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 new_bytecode_offset, 657 new_bytecode_offset,
585 BytecodeArrayTaggedPointer(), 658 BytecodeArrayTaggedPointer(),
586 DispatchTableRawPointer(), 659 DispatchTableRawPointer(),
587 GetContext() }; 660 GetContext() };
588 raw_assembler_->TailCallN(call_descriptor(), target_code_object, args); 661 raw_assembler_->TailCallN(call_descriptor(), target_code_object, args);
589 } 662 }
590 663
591 664
592 void InterpreterAssembler::Abort(BailoutReason bailout_reason) { 665 void InterpreterAssembler::Abort(BailoutReason bailout_reason) {
593 Node* abort_id = SmiTag(Int32Constant(bailout_reason)); 666 Node* abort_id = SmiTag(Int32Constant(bailout_reason));
594 CallRuntime(Runtime::kAbort, abort_id); 667 Node* ret_value = CallRuntime(Runtime::kAbort, abort_id);
595 Return(); 668 // Unreached, but keeps turbofan happy.
669 raw_assembler_->Return(ret_value);
596 } 670 }
597 671
598 672
599 void InterpreterAssembler::AbortIfWordNotEqual(Node* lhs, Node* rhs, 673 void InterpreterAssembler::AbortIfWordNotEqual(Node* lhs, Node* rhs,
600 BailoutReason bailout_reason) { 674 BailoutReason bailout_reason) {
601 RawMachineLabel match, no_match; 675 RawMachineLabel match, no_match;
602 Node* condition = raw_assembler_->WordEqual(lhs, rhs); 676 Node* condition = raw_assembler_->WordEqual(lhs, rhs);
603 raw_assembler_->Branch(condition, &match, &no_match); 677 raw_assembler_->Branch(condition, &match, &no_match);
604 raw_assembler_->Bind(&no_match); 678 raw_assembler_->Bind(&no_match);
605 Abort(bailout_reason); 679 Abort(bailout_reason);
(...skipping 26 matching lines...) Expand all
632 return raw_assembler_->call_descriptor(); 706 return raw_assembler_->call_descriptor();
633 } 707 }
634 708
635 709
636 Zone* InterpreterAssembler::zone() { return raw_assembler_->zone(); } 710 Zone* InterpreterAssembler::zone() { return raw_assembler_->zone(); }
637 711
638 712
639 } // namespace compiler 713 } // namespace compiler
640 } // namespace internal 714 } // namespace internal
641 } // namespace v8 715 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698