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-assembler.h" | 5 #include "src/interpreter/interpreter-assembler.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <ostream> | 8 #include <ostream> |
9 | 9 |
10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
(...skipping 702 matching lines...) Loading... |
713 Bind(&loop); | 713 Bind(&loop); |
714 { | 714 { |
715 Node* index = var_index.value(); | 715 Node* index = var_index.value(); |
716 Node* condition = Int32LessThan(index, RegisterCount()); | 716 Node* condition = Int32LessThan(index, RegisterCount()); |
717 GotoUnless(condition, &done_loop); | 717 GotoUnless(condition, &done_loop); |
718 | 718 |
719 Node* reg_index = | 719 Node* reg_index = |
720 Int32Sub(Int32Constant(Register(0).ToOperand()), index); | 720 Int32Sub(Int32Constant(Register(0).ToOperand()), index); |
721 Node* value = LoadRegister(ChangeInt32ToIntPtr(reg_index)); | 721 Node* value = LoadRegister(ChangeInt32ToIntPtr(reg_index)); |
722 | 722 |
723 StoreFixedArrayElementInt32Index(array, index, value); | 723 StoreFixedArrayElement(array, index, value); |
724 | 724 |
725 var_index.Bind(Int32Add(index, Int32Constant(1))); | 725 var_index.Bind(Int32Add(index, Int32Constant(1))); |
726 Goto(&loop); | 726 Goto(&loop); |
727 } | 727 } |
728 Bind(&done_loop); | 728 Bind(&done_loop); |
729 | 729 |
730 return array; | 730 return array; |
731 } | 731 } |
732 | 732 |
733 Node* InterpreterAssembler::ImportRegisterFile(Node* array) { | 733 Node* InterpreterAssembler::ImportRegisterFile(Node* array) { |
734 if (FLAG_debug_code) { | 734 if (FLAG_debug_code) { |
735 Node* array_size = SmiUntag(LoadFixedArrayBaseLength(array)); | 735 Node* array_size = SmiUntag(LoadFixedArrayBaseLength(array)); |
736 AbortIfWordNotEqual( | 736 AbortIfWordNotEqual( |
737 array_size, RegisterCount(), kInvalidRegisterFileInGenerator); | 737 array_size, RegisterCount(), kInvalidRegisterFileInGenerator); |
738 } | 738 } |
739 | 739 |
740 Variable var_index(this, MachineRepresentation::kWord32); | 740 Variable var_index(this, MachineRepresentation::kWord32); |
741 var_index.Bind(Int32Constant(0)); | 741 var_index.Bind(Int32Constant(0)); |
742 | 742 |
743 // Iterate over array and write values into register file. Also erase the | 743 // Iterate over array and write values into register file. Also erase the |
744 // array contents to not keep them alive artificially. | 744 // array contents to not keep them alive artificially. |
745 Label loop(this, &var_index), done_loop(this); | 745 Label loop(this, &var_index), done_loop(this); |
746 Goto(&loop); | 746 Goto(&loop); |
747 Bind(&loop); | 747 Bind(&loop); |
748 { | 748 { |
749 Node* index = var_index.value(); | 749 Node* index = var_index.value(); |
750 Node* condition = Int32LessThan(index, RegisterCount()); | 750 Node* condition = Int32LessThan(index, RegisterCount()); |
751 GotoUnless(condition, &done_loop); | 751 GotoUnless(condition, &done_loop); |
752 | 752 |
753 Node* value = LoadFixedArrayElementInt32Index(array, index); | 753 Node* value = LoadFixedArrayElement(array, index); |
754 | 754 |
755 Node* reg_index = | 755 Node* reg_index = |
756 Int32Sub(Int32Constant(Register(0).ToOperand()), index); | 756 Int32Sub(Int32Constant(Register(0).ToOperand()), index); |
757 StoreRegister(value, ChangeInt32ToIntPtr(reg_index)); | 757 StoreRegister(value, ChangeInt32ToIntPtr(reg_index)); |
758 | 758 |
759 StoreFixedArrayElementInt32Index(array, index, StaleRegisterConstant()); | 759 StoreFixedArrayElement(array, index, StaleRegisterConstant()); |
760 | 760 |
761 var_index.Bind(Int32Add(index, Int32Constant(1))); | 761 var_index.Bind(Int32Add(index, Int32Constant(1))); |
762 Goto(&loop); | 762 Goto(&loop); |
763 } | 763 } |
764 Bind(&done_loop); | 764 Bind(&done_loop); |
765 | 765 |
766 return array; | 766 return array; |
767 } | 767 } |
768 | 768 |
769 } // namespace interpreter | 769 } // namespace interpreter |
770 } // namespace internal | 770 } // namespace internal |
771 } // namespace v8 | 771 } // namespace v8 |
OLD | NEW |