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

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

Issue 2172223002: [stubs] Call interface descriptors cleanup. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@store-ic-tf
Patch Set: Addressing comments Created 4 years, 4 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/interface-descriptors.cc ('k') | src/interpreter/interpreter-assembler.cc » ('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"
11 #include "src/code-factory.h" 11 #include "src/code-factory.h"
12 #include "src/compiler.h" 12 #include "src/compiler.h"
13 #include "src/factory.h" 13 #include "src/factory.h"
14 #include "src/interpreter/bytecode-flags.h" 14 #include "src/interpreter/bytecode-flags.h"
15 #include "src/interpreter/bytecode-generator.h" 15 #include "src/interpreter/bytecode-generator.h"
16 #include "src/interpreter/bytecodes.h" 16 #include "src/interpreter/bytecodes.h"
17 #include "src/interpreter/interpreter-assembler.h" 17 #include "src/interpreter/interpreter-assembler.h"
18 #include "src/interpreter/interpreter-intrinsics.h" 18 #include "src/interpreter/interpreter-intrinsics.h"
19 #include "src/log.h" 19 #include "src/log.h"
20 #include "src/zone.h" 20 #include "src/zone.h"
21 21
22 namespace v8 { 22 namespace v8 {
23 namespace internal { 23 namespace internal {
24 namespace interpreter { 24 namespace interpreter {
25 25
26 using compiler::Node; 26 using compiler::Node;
27 typedef CodeStubAssembler::Label Label; 27 typedef CodeStubAssembler::Label Label;
28 typedef CodeStubAssembler::Variable Variable; 28 typedef CodeStubAssembler::Variable Variable;
29 typedef InterpreterAssembler::Arg Arg;
29 30
30 #define __ assembler-> 31 #define __ assembler->
31 32
32 Interpreter::Interpreter(Isolate* isolate) : isolate_(isolate) { 33 Interpreter::Interpreter(Isolate* isolate) : isolate_(isolate) {
33 memset(dispatch_table_, 0, sizeof(dispatch_table_)); 34 memset(dispatch_table_, 0, sizeof(dispatch_table_));
34 } 35 }
35 36
36 void Interpreter::Initialize() { 37 void Interpreter::Initialize() {
37 if (IsDispatchTableInitialized()) return; 38 if (IsDispatchTableInitialized()) return;
38 Zone zone(isolate_->allocator()); 39 Zone zone(isolate_->allocator());
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 void Interpreter::DoMov(InterpreterAssembler* assembler) { 377 void Interpreter::DoMov(InterpreterAssembler* assembler) {
377 Node* src_index = __ BytecodeOperandReg(0); 378 Node* src_index = __ BytecodeOperandReg(0);
378 Node* src_value = __ LoadRegister(src_index); 379 Node* src_value = __ LoadRegister(src_index);
379 Node* dst_index = __ BytecodeOperandReg(1); 380 Node* dst_index = __ BytecodeOperandReg(1);
380 __ StoreRegister(src_value, dst_index); 381 __ StoreRegister(src_value, dst_index);
381 __ Dispatch(); 382 __ Dispatch();
382 } 383 }
383 384
384 Node* Interpreter::BuildLoadGlobal(Callable ic, 385 Node* Interpreter::BuildLoadGlobal(Callable ic,
385 InterpreterAssembler* assembler) { 386 InterpreterAssembler* assembler) {
387 typedef LoadGlobalWithVectorDescriptor Descriptor;
386 // Get the global object. 388 // Get the global object.
387 Node* context = __ GetContext(); 389 Node* context = __ GetContext();
388 390
389 // Load the global via the LoadGlobalIC. 391 // Load the global via the LoadGlobalIC.
390 Node* code_target = __ HeapConstant(ic.code()); 392 Node* code_target = __ HeapConstant(ic.code());
391 Node* raw_slot = __ BytecodeOperandIdx(0); 393 Node* raw_slot = __ BytecodeOperandIdx(0);
392 Node* smi_slot = __ SmiTag(raw_slot); 394 Node* smi_slot = __ SmiTag(raw_slot);
393 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 395 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
394 return __ CallStub(ic.descriptor(), code_target, context, smi_slot, 396 return __ CallStub(ic.descriptor(), code_target, context,
395 type_feedback_vector); 397 Arg(Descriptor::kSlot, smi_slot),
398 Arg(Descriptor::kVector, type_feedback_vector));
396 } 399 }
397 400
398 // LdaGlobal <slot> 401 // LdaGlobal <slot>
399 // 402 //
400 // Load the global with name in constant pool entry <name_index> into the 403 // Load the global with name in constant pool entry <name_index> into the
401 // accumulator using FeedBackVector slot <slot> outside of a typeof. 404 // accumulator using FeedBackVector slot <slot> outside of a typeof.
402 void Interpreter::DoLdaGlobal(InterpreterAssembler* assembler) { 405 void Interpreter::DoLdaGlobal(InterpreterAssembler* assembler) {
403 Callable ic = 406 Callable ic =
404 CodeFactory::LoadGlobalICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF); 407 CodeFactory::LoadGlobalICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF);
405 Node* result = BuildLoadGlobal(ic, assembler); 408 Node* result = BuildLoadGlobal(ic, assembler);
(...skipping 20 matching lines...) Expand all
426 // accumulator using FeedBackVector slot <slot> inside of a typeof. 429 // accumulator using FeedBackVector slot <slot> inside of a typeof.
427 void Interpreter::DoLdaGlobalInsideTypeof(InterpreterAssembler* assembler) { 430 void Interpreter::DoLdaGlobalInsideTypeof(InterpreterAssembler* assembler) {
428 Callable ic = 431 Callable ic =
429 CodeFactory::LoadGlobalICInOptimizedCode(isolate_, INSIDE_TYPEOF); 432 CodeFactory::LoadGlobalICInOptimizedCode(isolate_, INSIDE_TYPEOF);
430 Node* result = BuildLoadGlobal(ic, assembler); 433 Node* result = BuildLoadGlobal(ic, assembler);
431 __ SetAccumulator(result); 434 __ SetAccumulator(result);
432 __ Dispatch(); 435 __ Dispatch();
433 } 436 }
434 437
435 void Interpreter::DoStaGlobal(Callable ic, InterpreterAssembler* assembler) { 438 void Interpreter::DoStaGlobal(Callable ic, InterpreterAssembler* assembler) {
439 typedef StoreWithVectorDescriptor Descriptor;
436 // Get the global object. 440 // Get the global object.
437 Node* context = __ GetContext(); 441 Node* context = __ GetContext();
438 Node* native_context = 442 Node* native_context =
439 __ LoadContextSlot(context, Context::NATIVE_CONTEXT_INDEX); 443 __ LoadContextSlot(context, Context::NATIVE_CONTEXT_INDEX);
440 Node* global = __ LoadContextSlot(native_context, Context::EXTENSION_INDEX); 444 Node* global = __ LoadContextSlot(native_context, Context::EXTENSION_INDEX);
441 445
442 // Store the global via the StoreIC. 446 // Store the global via the StoreIC.
443 Node* code_target = __ HeapConstant(ic.code()); 447 Node* code_target = __ HeapConstant(ic.code());
444 Node* constant_index = __ BytecodeOperandIdx(0); 448 Node* constant_index = __ BytecodeOperandIdx(0);
445 Node* name = __ LoadConstantPoolEntry(constant_index); 449 Node* name = __ LoadConstantPoolEntry(constant_index);
446 Node* value = __ GetAccumulator(); 450 Node* value = __ GetAccumulator();
447 Node* raw_slot = __ BytecodeOperandIdx(1); 451 Node* raw_slot = __ BytecodeOperandIdx(1);
448 Node* smi_slot = __ SmiTag(raw_slot); 452 Node* smi_slot = __ SmiTag(raw_slot);
449 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 453 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
450 __ CallStub(ic.descriptor(), code_target, context, global, name, value, 454 __ CallStub(ic.descriptor(), code_target, context,
451 smi_slot, type_feedback_vector); 455 Arg(Descriptor::kReceiver, global), Arg(Descriptor::kName, name),
456 Arg(Descriptor::kValue, value), Arg(Descriptor::kSlot, smi_slot),
457 Arg(Descriptor::kVector, type_feedback_vector));
452 __ Dispatch(); 458 __ Dispatch();
453 } 459 }
454 460
455 // StaGlobalSloppy <name_index> <slot> 461 // StaGlobalSloppy <name_index> <slot>
456 // 462 //
457 // Store the value in the accumulator into the global with name in constant pool 463 // Store the value in the accumulator into the global with name in constant pool
458 // entry <name_index> using FeedBackVector slot <slot> in sloppy mode. 464 // entry <name_index> using FeedBackVector slot <slot> in sloppy mode.
459 void Interpreter::DoStaGlobalSloppy(InterpreterAssembler* assembler) { 465 void Interpreter::DoStaGlobalSloppy(InterpreterAssembler* assembler) {
460 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY); 466 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY);
461 DoStaGlobal(ic, assembler); 467 DoStaGlobal(ic, assembler);
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 // StaLookupSlotStrict <name_index> 566 // StaLookupSlotStrict <name_index>
561 // 567 //
562 // Store the object in accumulator to the object with the name in constant 568 // Store the object in accumulator to the object with the name in constant
563 // pool entry |name_index| in strict mode. 569 // pool entry |name_index| in strict mode.
564 void Interpreter::DoStaLookupSlotStrict(InterpreterAssembler* assembler) { 570 void Interpreter::DoStaLookupSlotStrict(InterpreterAssembler* assembler) {
565 DoStaLookupSlot(LanguageMode::STRICT, assembler); 571 DoStaLookupSlot(LanguageMode::STRICT, assembler);
566 } 572 }
567 573
568 Node* Interpreter::BuildLoadNamedProperty(Callable ic, 574 Node* Interpreter::BuildLoadNamedProperty(Callable ic,
569 InterpreterAssembler* assembler) { 575 InterpreterAssembler* assembler) {
576 typedef LoadWithVectorDescriptor Descriptor;
570 Node* code_target = __ HeapConstant(ic.code()); 577 Node* code_target = __ HeapConstant(ic.code());
571 Node* register_index = __ BytecodeOperandReg(0); 578 Node* register_index = __ BytecodeOperandReg(0);
572 Node* object = __ LoadRegister(register_index); 579 Node* object = __ LoadRegister(register_index);
573 Node* constant_index = __ BytecodeOperandIdx(1); 580 Node* constant_index = __ BytecodeOperandIdx(1);
574 Node* name = __ LoadConstantPoolEntry(constant_index); 581 Node* name = __ LoadConstantPoolEntry(constant_index);
575 Node* raw_slot = __ BytecodeOperandIdx(2); 582 Node* raw_slot = __ BytecodeOperandIdx(2);
576 Node* smi_slot = __ SmiTag(raw_slot); 583 Node* smi_slot = __ SmiTag(raw_slot);
577 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 584 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
578 Node* context = __ GetContext(); 585 Node* context = __ GetContext();
579 return __ CallStub(ic.descriptor(), code_target, context, object, name, 586 return __ CallStub(
580 smi_slot, type_feedback_vector); 587 ic.descriptor(), code_target, context, Arg(Descriptor::kReceiver, object),
588 Arg(Descriptor::kName, name), Arg(Descriptor::kSlot, smi_slot),
589 Arg(Descriptor::kVector, type_feedback_vector));
581 } 590 }
582 591
583 // LdaNamedProperty <object> <name_index> <slot> 592 // LdaNamedProperty <object> <name_index> <slot>
584 // 593 //
585 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at 594 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at
586 // constant pool entry <name_index>. 595 // constant pool entry <name_index>.
587 void Interpreter::DoLdaNamedProperty(InterpreterAssembler* assembler) { 596 void Interpreter::DoLdaNamedProperty(InterpreterAssembler* assembler) {
588 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_); 597 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_);
589 Node* result = BuildLoadNamedProperty(ic, assembler); 598 Node* result = BuildLoadNamedProperty(ic, assembler);
590 __ SetAccumulator(result); 599 __ SetAccumulator(result);
591 __ Dispatch(); 600 __ Dispatch();
592 } 601 }
593 602
594 // LdrNamedProperty <object> <name_index> <slot> <reg> 603 // LdrNamedProperty <object> <name_index> <slot> <reg>
595 // 604 //
596 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at 605 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at
597 // constant pool entry <name_index> and puts the result into register <reg>. 606 // constant pool entry <name_index> and puts the result into register <reg>.
598 void Interpreter::DoLdrNamedProperty(InterpreterAssembler* assembler) { 607 void Interpreter::DoLdrNamedProperty(InterpreterAssembler* assembler) {
599 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_); 608 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_);
600 Node* result = BuildLoadNamedProperty(ic, assembler); 609 Node* result = BuildLoadNamedProperty(ic, assembler);
601 Node* destination = __ BytecodeOperandReg(3); 610 Node* destination = __ BytecodeOperandReg(3);
602 __ StoreRegister(result, destination); 611 __ StoreRegister(result, destination);
603 __ Dispatch(); 612 __ Dispatch();
604 } 613 }
605 614
606 Node* Interpreter::BuildLoadKeyedProperty(Callable ic, 615 Node* Interpreter::BuildLoadKeyedProperty(Callable ic,
607 InterpreterAssembler* assembler) { 616 InterpreterAssembler* assembler) {
617 typedef LoadWithVectorDescriptor Descriptor;
608 Node* code_target = __ HeapConstant(ic.code()); 618 Node* code_target = __ HeapConstant(ic.code());
609 Node* reg_index = __ BytecodeOperandReg(0); 619 Node* reg_index = __ BytecodeOperandReg(0);
610 Node* object = __ LoadRegister(reg_index); 620 Node* object = __ LoadRegister(reg_index);
611 Node* name = __ GetAccumulator(); 621 Node* name = __ GetAccumulator();
612 Node* raw_slot = __ BytecodeOperandIdx(1); 622 Node* raw_slot = __ BytecodeOperandIdx(1);
613 Node* smi_slot = __ SmiTag(raw_slot); 623 Node* smi_slot = __ SmiTag(raw_slot);
614 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 624 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
615 Node* context = __ GetContext(); 625 Node* context = __ GetContext();
616 return __ CallStub(ic.descriptor(), code_target, context, object, name, 626 return __ CallStub(
617 smi_slot, type_feedback_vector); 627 ic.descriptor(), code_target, context, Arg(Descriptor::kReceiver, object),
628 Arg(Descriptor::kName, name), Arg(Descriptor::kSlot, smi_slot),
629 Arg(Descriptor::kVector, type_feedback_vector));
618 } 630 }
619 631
620 // KeyedLoadIC <object> <slot> 632 // KeyedLoadIC <object> <slot>
621 // 633 //
622 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key 634 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key
623 // in the accumulator. 635 // in the accumulator.
624 void Interpreter::DoLdaKeyedProperty(InterpreterAssembler* assembler) { 636 void Interpreter::DoLdaKeyedProperty(InterpreterAssembler* assembler) {
625 Callable ic = CodeFactory::KeyedLoadICInOptimizedCode(isolate_); 637 Callable ic = CodeFactory::KeyedLoadICInOptimizedCode(isolate_);
626 Node* result = BuildLoadKeyedProperty(ic, assembler); 638 Node* result = BuildLoadKeyedProperty(ic, assembler);
627 __ SetAccumulator(result); 639 __ SetAccumulator(result);
628 __ Dispatch(); 640 __ Dispatch();
629 } 641 }
630 642
631 // LdrKeyedProperty <object> <slot> <reg> 643 // LdrKeyedProperty <object> <slot> <reg>
632 // 644 //
633 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key 645 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key
634 // in the accumulator and puts the result in register <reg>. 646 // in the accumulator and puts the result in register <reg>.
635 void Interpreter::DoLdrKeyedProperty(InterpreterAssembler* assembler) { 647 void Interpreter::DoLdrKeyedProperty(InterpreterAssembler* assembler) {
636 Callable ic = CodeFactory::KeyedLoadICInOptimizedCode(isolate_); 648 Callable ic = CodeFactory::KeyedLoadICInOptimizedCode(isolate_);
637 Node* result = BuildLoadKeyedProperty(ic, assembler); 649 Node* result = BuildLoadKeyedProperty(ic, assembler);
638 Node* destination = __ BytecodeOperandReg(2); 650 Node* destination = __ BytecodeOperandReg(2);
639 __ StoreRegister(result, destination); 651 __ StoreRegister(result, destination);
640 __ Dispatch(); 652 __ Dispatch();
641 } 653 }
642 654
643 void Interpreter::DoStoreIC(Callable ic, InterpreterAssembler* assembler) { 655 void Interpreter::DoStoreIC(Callable ic, InterpreterAssembler* assembler) {
656 typedef StoreWithVectorDescriptor Descriptor;
644 Node* code_target = __ HeapConstant(ic.code()); 657 Node* code_target = __ HeapConstant(ic.code());
645 Node* object_reg_index = __ BytecodeOperandReg(0); 658 Node* object_reg_index = __ BytecodeOperandReg(0);
646 Node* object = __ LoadRegister(object_reg_index); 659 Node* object = __ LoadRegister(object_reg_index);
647 Node* constant_index = __ BytecodeOperandIdx(1); 660 Node* constant_index = __ BytecodeOperandIdx(1);
648 Node* name = __ LoadConstantPoolEntry(constant_index); 661 Node* name = __ LoadConstantPoolEntry(constant_index);
649 Node* value = __ GetAccumulator(); 662 Node* value = __ GetAccumulator();
650 Node* raw_slot = __ BytecodeOperandIdx(2); 663 Node* raw_slot = __ BytecodeOperandIdx(2);
651 Node* smi_slot = __ SmiTag(raw_slot); 664 Node* smi_slot = __ SmiTag(raw_slot);
652 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 665 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
653 Node* context = __ GetContext(); 666 Node* context = __ GetContext();
654 __ CallStub(ic.descriptor(), code_target, context, object, name, value, 667 __ CallStub(ic.descriptor(), code_target, context,
655 smi_slot, type_feedback_vector); 668 Arg(Descriptor::kReceiver, object), Arg(Descriptor::kName, name),
669 Arg(Descriptor::kValue, value), Arg(Descriptor::kSlot, smi_slot),
670 Arg(Descriptor::kVector, type_feedback_vector));
656 __ Dispatch(); 671 __ Dispatch();
657 } 672 }
658 673
659 // StaNamedPropertySloppy <object> <name_index> <slot> 674 // StaNamedPropertySloppy <object> <name_index> <slot>
660 // 675 //
661 // Calls the sloppy mode StoreIC at FeedBackVector slot <slot> for <object> and 676 // Calls the sloppy mode StoreIC at FeedBackVector slot <slot> for <object> and
662 // the name in constant pool entry <name_index> with the value in the 677 // the name in constant pool entry <name_index> with the value in the
663 // accumulator. 678 // accumulator.
664 void Interpreter::DoStaNamedPropertySloppy(InterpreterAssembler* assembler) { 679 void Interpreter::DoStaNamedPropertySloppy(InterpreterAssembler* assembler) {
665 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY); 680 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY);
666 DoStoreIC(ic, assembler); 681 DoStoreIC(ic, assembler);
667 } 682 }
668 683
669 // StaNamedPropertyStrict <object> <name_index> <slot> 684 // StaNamedPropertyStrict <object> <name_index> <slot>
670 // 685 //
671 // Calls the strict mode StoreIC at FeedBackVector slot <slot> for <object> and 686 // Calls the strict mode StoreIC at FeedBackVector slot <slot> for <object> and
672 // the name in constant pool entry <name_index> with the value in the 687 // the name in constant pool entry <name_index> with the value in the
673 // accumulator. 688 // accumulator.
674 void Interpreter::DoStaNamedPropertyStrict(InterpreterAssembler* assembler) { 689 void Interpreter::DoStaNamedPropertyStrict(InterpreterAssembler* assembler) {
675 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, STRICT); 690 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, STRICT);
676 DoStoreIC(ic, assembler); 691 DoStoreIC(ic, assembler);
677 } 692 }
678 693
679 void Interpreter::DoKeyedStoreIC(Callable ic, InterpreterAssembler* assembler) { 694 void Interpreter::DoKeyedStoreIC(Callable ic, InterpreterAssembler* assembler) {
695 typedef StoreWithVectorDescriptor Descriptor;
680 Node* code_target = __ HeapConstant(ic.code()); 696 Node* code_target = __ HeapConstant(ic.code());
681 Node* object_reg_index = __ BytecodeOperandReg(0); 697 Node* object_reg_index = __ BytecodeOperandReg(0);
682 Node* object = __ LoadRegister(object_reg_index); 698 Node* object = __ LoadRegister(object_reg_index);
683 Node* name_reg_index = __ BytecodeOperandReg(1); 699 Node* name_reg_index = __ BytecodeOperandReg(1);
684 Node* name = __ LoadRegister(name_reg_index); 700 Node* name = __ LoadRegister(name_reg_index);
685 Node* value = __ GetAccumulator(); 701 Node* value = __ GetAccumulator();
686 Node* raw_slot = __ BytecodeOperandIdx(2); 702 Node* raw_slot = __ BytecodeOperandIdx(2);
687 Node* smi_slot = __ SmiTag(raw_slot); 703 Node* smi_slot = __ SmiTag(raw_slot);
688 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 704 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
689 Node* context = __ GetContext(); 705 Node* context = __ GetContext();
690 __ CallStub(ic.descriptor(), code_target, context, object, name, value, 706 __ CallStub(ic.descriptor(), code_target, context,
691 smi_slot, type_feedback_vector); 707 Arg(Descriptor::kReceiver, object), Arg(Descriptor::kName, name),
708 Arg(Descriptor::kValue, value), Arg(Descriptor::kSlot, smi_slot),
709 Arg(Descriptor::kVector, type_feedback_vector));
692 __ Dispatch(); 710 __ Dispatch();
693 } 711 }
694 712
695 // StaKeyedPropertySloppy <object> <key> <slot> 713 // StaKeyedPropertySloppy <object> <key> <slot>
696 // 714 //
697 // Calls the sloppy mode KeyStoreIC at FeedBackVector slot <slot> for <object> 715 // Calls the sloppy mode KeyStoreIC at FeedBackVector slot <slot> for <object>
698 // and the key <key> with the value in the accumulator. 716 // and the key <key> with the value in the accumulator.
699 void Interpreter::DoStaKeyedPropertySloppy(InterpreterAssembler* assembler) { 717 void Interpreter::DoStaKeyedPropertySloppy(InterpreterAssembler* assembler) {
700 Callable ic = CodeFactory::KeyedStoreICInOptimizedCode(isolate_, SLOPPY); 718 Callable ic = CodeFactory::KeyedStoreICInOptimizedCode(isolate_, SLOPPY);
701 DoKeyedStoreIC(ic, assembler); 719 DoKeyedStoreIC(ic, assembler);
(...skipping 1428 matching lines...) Expand 10 before | Expand all | Expand 10 after
2130 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, 2148 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset,
2131 __ SmiTag(new_state)); 2149 __ SmiTag(new_state));
2132 __ SetAccumulator(old_state); 2150 __ SetAccumulator(old_state);
2133 2151
2134 __ Dispatch(); 2152 __ Dispatch();
2135 } 2153 }
2136 2154
2137 } // namespace interpreter 2155 } // namespace interpreter
2138 } // namespace internal 2156 } // namespace internal
2139 } // namespace v8 2157 } // namespace v8
OLDNEW
« no previous file with comments | « src/interface-descriptors.cc ('k') | src/interpreter/interpreter-assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698