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 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
376 void Interpreter::DoMov(InterpreterAssembler* assembler) { | 376 void Interpreter::DoMov(InterpreterAssembler* assembler) { |
377 Node* src_index = __ BytecodeOperandReg(0); | 377 Node* src_index = __ BytecodeOperandReg(0); |
378 Node* src_value = __ LoadRegister(src_index); | 378 Node* src_value = __ LoadRegister(src_index); |
379 Node* dst_index = __ BytecodeOperandReg(1); | 379 Node* dst_index = __ BytecodeOperandReg(1); |
380 __ StoreRegister(src_value, dst_index); | 380 __ StoreRegister(src_value, dst_index); |
381 __ Dispatch(); | 381 __ Dispatch(); |
382 } | 382 } |
383 | 383 |
384 Node* Interpreter::BuildLoadGlobal(Callable ic, | 384 Node* Interpreter::BuildLoadGlobal(Callable ic, |
385 InterpreterAssembler* assembler) { | 385 InterpreterAssembler* assembler) { |
386 typedef LoadGlobalWithVectorDescriptor Descriptor; | |
387 typedef InterpreterAssembler::Arg Arg; | |
rmcilroy
2016/07/26 13:27:53
Please do this typedef once at the top of the file
Igor Sheludko
2016/07/26 14:30:31
Done.
| |
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 Loading... | |
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; | |
440 typedef InterpreterAssembler::Arg Arg; | |
436 // Get the global object. | 441 // Get the global object. |
437 Node* context = __ GetContext(); | 442 Node* context = __ GetContext(); |
438 Node* native_context = | 443 Node* native_context = |
439 __ LoadContextSlot(context, Context::NATIVE_CONTEXT_INDEX); | 444 __ LoadContextSlot(context, Context::NATIVE_CONTEXT_INDEX); |
440 Node* global = __ LoadContextSlot(native_context, Context::EXTENSION_INDEX); | 445 Node* global = __ LoadContextSlot(native_context, Context::EXTENSION_INDEX); |
441 | 446 |
442 // Store the global via the StoreIC. | 447 // Store the global via the StoreIC. |
443 Node* code_target = __ HeapConstant(ic.code()); | 448 Node* code_target = __ HeapConstant(ic.code()); |
444 Node* constant_index = __ BytecodeOperandIdx(0); | 449 Node* constant_index = __ BytecodeOperandIdx(0); |
445 Node* name = __ LoadConstantPoolEntry(constant_index); | 450 Node* name = __ LoadConstantPoolEntry(constant_index); |
446 Node* value = __ GetAccumulator(); | 451 Node* value = __ GetAccumulator(); |
447 Node* raw_slot = __ BytecodeOperandIdx(1); | 452 Node* raw_slot = __ BytecodeOperandIdx(1); |
448 Node* smi_slot = __ SmiTag(raw_slot); | 453 Node* smi_slot = __ SmiTag(raw_slot); |
449 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); | 454 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
450 __ CallStub(ic.descriptor(), code_target, context, global, name, value, | 455 __ CallStub(ic.descriptor(), code_target, context, |
451 smi_slot, type_feedback_vector); | 456 Arg(Descriptor::kReceiver, global), Arg(Descriptor::kName, name), |
457 Arg(Descriptor::kValue, value), Arg(Descriptor::kSlot, smi_slot), | |
458 Arg(Descriptor::kVector, type_feedback_vector)); | |
452 __ Dispatch(); | 459 __ Dispatch(); |
453 } | 460 } |
454 | 461 |
455 // StaGlobalSloppy <name_index> <slot> | 462 // StaGlobalSloppy <name_index> <slot> |
456 // | 463 // |
457 // Store the value in the accumulator into the global with name in constant pool | 464 // 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. | 465 // entry <name_index> using FeedBackVector slot <slot> in sloppy mode. |
459 void Interpreter::DoStaGlobalSloppy(InterpreterAssembler* assembler) { | 466 void Interpreter::DoStaGlobalSloppy(InterpreterAssembler* assembler) { |
460 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY); | 467 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY); |
461 DoStaGlobal(ic, assembler); | 468 DoStaGlobal(ic, assembler); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
560 // StaLookupSlotStrict <name_index> | 567 // StaLookupSlotStrict <name_index> |
561 // | 568 // |
562 // Store the object in accumulator to the object with the name in constant | 569 // Store the object in accumulator to the object with the name in constant |
563 // pool entry |name_index| in strict mode. | 570 // pool entry |name_index| in strict mode. |
564 void Interpreter::DoStaLookupSlotStrict(InterpreterAssembler* assembler) { | 571 void Interpreter::DoStaLookupSlotStrict(InterpreterAssembler* assembler) { |
565 DoStaLookupSlot(LanguageMode::STRICT, assembler); | 572 DoStaLookupSlot(LanguageMode::STRICT, assembler); |
566 } | 573 } |
567 | 574 |
568 Node* Interpreter::BuildLoadNamedProperty(Callable ic, | 575 Node* Interpreter::BuildLoadNamedProperty(Callable ic, |
569 InterpreterAssembler* assembler) { | 576 InterpreterAssembler* assembler) { |
577 typedef LoadWithVectorDescriptor Descriptor; | |
578 typedef InterpreterAssembler::Arg Arg; | |
570 Node* code_target = __ HeapConstant(ic.code()); | 579 Node* code_target = __ HeapConstant(ic.code()); |
571 Node* register_index = __ BytecodeOperandReg(0); | 580 Node* register_index = __ BytecodeOperandReg(0); |
572 Node* object = __ LoadRegister(register_index); | 581 Node* object = __ LoadRegister(register_index); |
573 Node* constant_index = __ BytecodeOperandIdx(1); | 582 Node* constant_index = __ BytecodeOperandIdx(1); |
574 Node* name = __ LoadConstantPoolEntry(constant_index); | 583 Node* name = __ LoadConstantPoolEntry(constant_index); |
575 Node* raw_slot = __ BytecodeOperandIdx(2); | 584 Node* raw_slot = __ BytecodeOperandIdx(2); |
576 Node* smi_slot = __ SmiTag(raw_slot); | 585 Node* smi_slot = __ SmiTag(raw_slot); |
577 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); | 586 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
578 Node* context = __ GetContext(); | 587 Node* context = __ GetContext(); |
579 return __ CallStub(ic.descriptor(), code_target, context, object, name, | 588 return __ CallStub( |
580 smi_slot, type_feedback_vector); | 589 ic.descriptor(), code_target, context, Arg(Descriptor::kReceiver, object), |
590 Arg(Descriptor::kName, name), Arg(Descriptor::kSlot, smi_slot), | |
591 Arg(Descriptor::kVector, type_feedback_vector)); | |
581 } | 592 } |
582 | 593 |
583 // LdaNamedProperty <object> <name_index> <slot> | 594 // LdaNamedProperty <object> <name_index> <slot> |
584 // | 595 // |
585 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at | 596 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at |
586 // constant pool entry <name_index>. | 597 // constant pool entry <name_index>. |
587 void Interpreter::DoLdaNamedProperty(InterpreterAssembler* assembler) { | 598 void Interpreter::DoLdaNamedProperty(InterpreterAssembler* assembler) { |
588 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_); | 599 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_); |
589 Node* result = BuildLoadNamedProperty(ic, assembler); | 600 Node* result = BuildLoadNamedProperty(ic, assembler); |
590 __ SetAccumulator(result); | 601 __ SetAccumulator(result); |
591 __ Dispatch(); | 602 __ Dispatch(); |
592 } | 603 } |
593 | 604 |
594 // LdrNamedProperty <object> <name_index> <slot> <reg> | 605 // LdrNamedProperty <object> <name_index> <slot> <reg> |
595 // | 606 // |
596 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at | 607 // 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>. | 608 // constant pool entry <name_index> and puts the result into register <reg>. |
598 void Interpreter::DoLdrNamedProperty(InterpreterAssembler* assembler) { | 609 void Interpreter::DoLdrNamedProperty(InterpreterAssembler* assembler) { |
599 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_); | 610 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_); |
600 Node* result = BuildLoadNamedProperty(ic, assembler); | 611 Node* result = BuildLoadNamedProperty(ic, assembler); |
601 Node* destination = __ BytecodeOperandReg(3); | 612 Node* destination = __ BytecodeOperandReg(3); |
602 __ StoreRegister(result, destination); | 613 __ StoreRegister(result, destination); |
603 __ Dispatch(); | 614 __ Dispatch(); |
604 } | 615 } |
605 | 616 |
606 Node* Interpreter::BuildLoadKeyedProperty(Callable ic, | 617 Node* Interpreter::BuildLoadKeyedProperty(Callable ic, |
607 InterpreterAssembler* assembler) { | 618 InterpreterAssembler* assembler) { |
619 typedef LoadWithVectorDescriptor Descriptor; | |
620 typedef InterpreterAssembler::Arg Arg; | |
608 Node* code_target = __ HeapConstant(ic.code()); | 621 Node* code_target = __ HeapConstant(ic.code()); |
609 Node* reg_index = __ BytecodeOperandReg(0); | 622 Node* reg_index = __ BytecodeOperandReg(0); |
610 Node* object = __ LoadRegister(reg_index); | 623 Node* object = __ LoadRegister(reg_index); |
611 Node* name = __ GetAccumulator(); | 624 Node* name = __ GetAccumulator(); |
612 Node* raw_slot = __ BytecodeOperandIdx(1); | 625 Node* raw_slot = __ BytecodeOperandIdx(1); |
613 Node* smi_slot = __ SmiTag(raw_slot); | 626 Node* smi_slot = __ SmiTag(raw_slot); |
614 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); | 627 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
615 Node* context = __ GetContext(); | 628 Node* context = __ GetContext(); |
616 return __ CallStub(ic.descriptor(), code_target, context, object, name, | 629 return __ CallStub( |
617 smi_slot, type_feedback_vector); | 630 ic.descriptor(), code_target, context, Arg(Descriptor::kReceiver, object), |
631 Arg(Descriptor::kName, name), Arg(Descriptor::kSlot, smi_slot), | |
632 Arg(Descriptor::kVector, type_feedback_vector)); | |
618 } | 633 } |
619 | 634 |
620 // KeyedLoadIC <object> <slot> | 635 // KeyedLoadIC <object> <slot> |
621 // | 636 // |
622 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key | 637 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key |
623 // in the accumulator. | 638 // in the accumulator. |
624 void Interpreter::DoLdaKeyedProperty(InterpreterAssembler* assembler) { | 639 void Interpreter::DoLdaKeyedProperty(InterpreterAssembler* assembler) { |
625 Callable ic = CodeFactory::KeyedLoadICInOptimizedCode(isolate_); | 640 Callable ic = CodeFactory::KeyedLoadICInOptimizedCode(isolate_); |
626 Node* result = BuildLoadKeyedProperty(ic, assembler); | 641 Node* result = BuildLoadKeyedProperty(ic, assembler); |
627 __ SetAccumulator(result); | 642 __ SetAccumulator(result); |
628 __ Dispatch(); | 643 __ Dispatch(); |
629 } | 644 } |
630 | 645 |
631 // LdrKeyedProperty <object> <slot> <reg> | 646 // LdrKeyedProperty <object> <slot> <reg> |
632 // | 647 // |
633 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key | 648 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key |
634 // in the accumulator and puts the result in register <reg>. | 649 // in the accumulator and puts the result in register <reg>. |
635 void Interpreter::DoLdrKeyedProperty(InterpreterAssembler* assembler) { | 650 void Interpreter::DoLdrKeyedProperty(InterpreterAssembler* assembler) { |
636 Callable ic = CodeFactory::KeyedLoadICInOptimizedCode(isolate_); | 651 Callable ic = CodeFactory::KeyedLoadICInOptimizedCode(isolate_); |
637 Node* result = BuildLoadKeyedProperty(ic, assembler); | 652 Node* result = BuildLoadKeyedProperty(ic, assembler); |
638 Node* destination = __ BytecodeOperandReg(2); | 653 Node* destination = __ BytecodeOperandReg(2); |
639 __ StoreRegister(result, destination); | 654 __ StoreRegister(result, destination); |
640 __ Dispatch(); | 655 __ Dispatch(); |
641 } | 656 } |
642 | 657 |
643 void Interpreter::DoStoreIC(Callable ic, InterpreterAssembler* assembler) { | 658 void Interpreter::DoStoreIC(Callable ic, InterpreterAssembler* assembler) { |
659 typedef StoreWithVectorDescriptor Descriptor; | |
660 typedef InterpreterAssembler::Arg Arg; | |
644 Node* code_target = __ HeapConstant(ic.code()); | 661 Node* code_target = __ HeapConstant(ic.code()); |
645 Node* object_reg_index = __ BytecodeOperandReg(0); | 662 Node* object_reg_index = __ BytecodeOperandReg(0); |
646 Node* object = __ LoadRegister(object_reg_index); | 663 Node* object = __ LoadRegister(object_reg_index); |
647 Node* constant_index = __ BytecodeOperandIdx(1); | 664 Node* constant_index = __ BytecodeOperandIdx(1); |
648 Node* name = __ LoadConstantPoolEntry(constant_index); | 665 Node* name = __ LoadConstantPoolEntry(constant_index); |
649 Node* value = __ GetAccumulator(); | 666 Node* value = __ GetAccumulator(); |
650 Node* raw_slot = __ BytecodeOperandIdx(2); | 667 Node* raw_slot = __ BytecodeOperandIdx(2); |
651 Node* smi_slot = __ SmiTag(raw_slot); | 668 Node* smi_slot = __ SmiTag(raw_slot); |
652 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); | 669 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
653 Node* context = __ GetContext(); | 670 Node* context = __ GetContext(); |
654 __ CallStub(ic.descriptor(), code_target, context, object, name, value, | 671 __ CallStub(ic.descriptor(), code_target, context, |
655 smi_slot, type_feedback_vector); | 672 Arg(Descriptor::kReceiver, object), Arg(Descriptor::kName, name), |
673 Arg(Descriptor::kValue, value), Arg(Descriptor::kSlot, smi_slot), | |
674 Arg(Descriptor::kVector, type_feedback_vector)); | |
656 __ Dispatch(); | 675 __ Dispatch(); |
657 } | 676 } |
658 | 677 |
659 // StaNamedPropertySloppy <object> <name_index> <slot> | 678 // StaNamedPropertySloppy <object> <name_index> <slot> |
660 // | 679 // |
661 // Calls the sloppy mode StoreIC at FeedBackVector slot <slot> for <object> and | 680 // 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 | 681 // the name in constant pool entry <name_index> with the value in the |
663 // accumulator. | 682 // accumulator. |
664 void Interpreter::DoStaNamedPropertySloppy(InterpreterAssembler* assembler) { | 683 void Interpreter::DoStaNamedPropertySloppy(InterpreterAssembler* assembler) { |
665 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY); | 684 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY); |
666 DoStoreIC(ic, assembler); | 685 DoStoreIC(ic, assembler); |
667 } | 686 } |
668 | 687 |
669 // StaNamedPropertyStrict <object> <name_index> <slot> | 688 // StaNamedPropertyStrict <object> <name_index> <slot> |
670 // | 689 // |
671 // Calls the strict mode StoreIC at FeedBackVector slot <slot> for <object> and | 690 // 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 | 691 // the name in constant pool entry <name_index> with the value in the |
673 // accumulator. | 692 // accumulator. |
674 void Interpreter::DoStaNamedPropertyStrict(InterpreterAssembler* assembler) { | 693 void Interpreter::DoStaNamedPropertyStrict(InterpreterAssembler* assembler) { |
675 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, STRICT); | 694 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, STRICT); |
676 DoStoreIC(ic, assembler); | 695 DoStoreIC(ic, assembler); |
677 } | 696 } |
678 | 697 |
679 void Interpreter::DoKeyedStoreIC(Callable ic, InterpreterAssembler* assembler) { | 698 void Interpreter::DoKeyedStoreIC(Callable ic, InterpreterAssembler* assembler) { |
699 typedef StoreWithVectorDescriptor Descriptor; | |
700 typedef InterpreterAssembler::Arg Arg; | |
680 Node* code_target = __ HeapConstant(ic.code()); | 701 Node* code_target = __ HeapConstant(ic.code()); |
681 Node* object_reg_index = __ BytecodeOperandReg(0); | 702 Node* object_reg_index = __ BytecodeOperandReg(0); |
682 Node* object = __ LoadRegister(object_reg_index); | 703 Node* object = __ LoadRegister(object_reg_index); |
683 Node* name_reg_index = __ BytecodeOperandReg(1); | 704 Node* name_reg_index = __ BytecodeOperandReg(1); |
684 Node* name = __ LoadRegister(name_reg_index); | 705 Node* name = __ LoadRegister(name_reg_index); |
685 Node* value = __ GetAccumulator(); | 706 Node* value = __ GetAccumulator(); |
686 Node* raw_slot = __ BytecodeOperandIdx(2); | 707 Node* raw_slot = __ BytecodeOperandIdx(2); |
687 Node* smi_slot = __ SmiTag(raw_slot); | 708 Node* smi_slot = __ SmiTag(raw_slot); |
688 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); | 709 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
689 Node* context = __ GetContext(); | 710 Node* context = __ GetContext(); |
690 __ CallStub(ic.descriptor(), code_target, context, object, name, value, | 711 __ CallStub(ic.descriptor(), code_target, context, |
691 smi_slot, type_feedback_vector); | 712 Arg(Descriptor::kReceiver, object), Arg(Descriptor::kName, name), |
713 Arg(Descriptor::kValue, value), Arg(Descriptor::kSlot, smi_slot), | |
714 Arg(Descriptor::kVector, type_feedback_vector)); | |
692 __ Dispatch(); | 715 __ Dispatch(); |
693 } | 716 } |
694 | 717 |
695 // StaKeyedPropertySloppy <object> <key> <slot> | 718 // StaKeyedPropertySloppy <object> <key> <slot> |
696 // | 719 // |
697 // Calls the sloppy mode KeyStoreIC at FeedBackVector slot <slot> for <object> | 720 // Calls the sloppy mode KeyStoreIC at FeedBackVector slot <slot> for <object> |
698 // and the key <key> with the value in the accumulator. | 721 // and the key <key> with the value in the accumulator. |
699 void Interpreter::DoStaKeyedPropertySloppy(InterpreterAssembler* assembler) { | 722 void Interpreter::DoStaKeyedPropertySloppy(InterpreterAssembler* assembler) { |
700 Callable ic = CodeFactory::KeyedStoreICInOptimizedCode(isolate_, SLOPPY); | 723 Callable ic = CodeFactory::KeyedStoreICInOptimizedCode(isolate_, SLOPPY); |
701 DoKeyedStoreIC(ic, assembler); | 724 DoKeyedStoreIC(ic, assembler); |
(...skipping 1428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2130 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, | 2153 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, |
2131 __ SmiTag(new_state)); | 2154 __ SmiTag(new_state)); |
2132 __ SetAccumulator(old_state); | 2155 __ SetAccumulator(old_state); |
2133 | 2156 |
2134 __ Dispatch(); | 2157 __ Dispatch(); |
2135 } | 2158 } |
2136 | 2159 |
2137 } // namespace interpreter | 2160 } // namespace interpreter |
2138 } // namespace internal | 2161 } // namespace internal |
2139 } // namespace v8 | 2162 } // namespace v8 |
OLD | NEW |