| 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/bytecode-array-builder.h" | 5 #include "src/interpreter/bytecode-array-builder.h" |
| 6 | 6 |
| 7 namespace v8 { | 7 namespace v8 { |
| 8 namespace internal { | 8 namespace internal { |
| 9 namespace interpreter { | 9 namespace interpreter { |
| 10 | 10 |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 bytecodes()->insert(bytecodes()->end(), operand_bytes, | 130 bytecodes()->insert(bytecodes()->end(), operand_bytes, |
| 131 operand_bytes + 2); | 131 operand_bytes + 2); |
| 132 break; | 132 break; |
| 133 } | 133 } |
| 134 } | 134 } |
| 135 } | 135 } |
| 136 } | 136 } |
| 137 | 137 |
| 138 | 138 |
| 139 void BytecodeArrayBuilder::Output(Bytecode bytecode, uint32_t operand0, | 139 void BytecodeArrayBuilder::Output(Bytecode bytecode, uint32_t operand0, |
| 140 uint32_t operand1, uint32_t operand2, |
| 141 uint32_t operand3) { |
| 142 uint32_t operands[] = {operand0, operand1, operand2, operand3}; |
| 143 Output(bytecode, operands); |
| 144 } |
| 145 |
| 146 |
| 147 void BytecodeArrayBuilder::Output(Bytecode bytecode, uint32_t operand0, |
| 140 uint32_t operand1, uint32_t operand2) { | 148 uint32_t operand1, uint32_t operand2) { |
| 141 uint32_t operands[] = {operand0, operand1, operand2}; | 149 uint32_t operands[] = {operand0, operand1, operand2}; |
| 142 Output(bytecode, operands); | 150 Output(bytecode, operands); |
| 143 } | 151 } |
| 144 | 152 |
| 145 | 153 |
| 146 void BytecodeArrayBuilder::Output(Bytecode bytecode, uint32_t operand0, | 154 void BytecodeArrayBuilder::Output(Bytecode bytecode, uint32_t operand0, |
| 147 uint32_t operand1) { | 155 uint32_t operand1) { |
| 148 uint32_t operands[] = {operand0, operand1}; | 156 uint32_t operands[] = {operand0, operand1}; |
| 149 Output(bytecode, operands); | 157 Output(bytecode, operands); |
| (...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 761 void BytecodeArrayBuilder::EnsureReturn() { | 769 void BytecodeArrayBuilder::EnsureReturn() { |
| 762 if (!exit_seen_in_block_) { | 770 if (!exit_seen_in_block_) { |
| 763 LoadUndefined(); | 771 LoadUndefined(); |
| 764 Return(); | 772 Return(); |
| 765 } | 773 } |
| 766 } | 774 } |
| 767 | 775 |
| 768 | 776 |
| 769 BytecodeArrayBuilder& BytecodeArrayBuilder::Call(Register callable, | 777 BytecodeArrayBuilder& BytecodeArrayBuilder::Call(Register callable, |
| 770 Register receiver, | 778 Register receiver, |
| 771 size_t arg_count) { | 779 size_t arg_count, |
| 772 if (FitsInIdx8Operand(arg_count)) { | 780 int feedback_slot) { |
| 781 if (FitsInIdx8Operand(arg_count) && FitsInIdx8Operand(feedback_slot)) { |
| 773 Output(Bytecode::kCall, callable.ToOperand(), receiver.ToOperand(), | 782 Output(Bytecode::kCall, callable.ToOperand(), receiver.ToOperand(), |
| 774 static_cast<uint8_t>(arg_count)); | 783 static_cast<uint8_t>(arg_count), |
| 784 static_cast<uint8_t>(feedback_slot)); |
| 785 } else if (FitsInIdx16Operand(arg_count) && |
| 786 FitsInIdx16Operand(feedback_slot)) { |
| 787 Output(Bytecode::kCallWide, callable.ToOperand(), receiver.ToOperand(), |
| 788 static_cast<uint16_t>(arg_count), |
| 789 static_cast<uint16_t>(feedback_slot)); |
| 775 } else { | 790 } else { |
| 776 UNIMPLEMENTED(); | 791 UNIMPLEMENTED(); |
| 777 } | 792 } |
| 778 return *this; | 793 return *this; |
| 779 } | 794 } |
| 780 | 795 |
| 781 | 796 |
| 782 BytecodeArrayBuilder& BytecodeArrayBuilder::New(Register constructor, | 797 BytecodeArrayBuilder& BytecodeArrayBuilder::New(Register constructor, |
| 783 Register first_arg, | 798 Register first_arg, |
| 784 size_t arg_count) { | 799 size_t arg_count) { |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 916 } | 931 } |
| 917 } | 932 } |
| 918 | 933 |
| 919 | 934 |
| 920 bool BytecodeArrayBuilder::OperandIsValid(Bytecode bytecode, int operand_index, | 935 bool BytecodeArrayBuilder::OperandIsValid(Bytecode bytecode, int operand_index, |
| 921 uint32_t operand_value) const { | 936 uint32_t operand_value) const { |
| 922 OperandType operand_type = Bytecodes::GetOperandType(bytecode, operand_index); | 937 OperandType operand_type = Bytecodes::GetOperandType(bytecode, operand_index); |
| 923 switch (operand_type) { | 938 switch (operand_type) { |
| 924 case OperandType::kNone: | 939 case OperandType::kNone: |
| 925 return false; | 940 return false; |
| 941 case OperandType::kCount16: |
| 926 case OperandType::kIdx16: | 942 case OperandType::kIdx16: |
| 927 return static_cast<uint16_t>(operand_value) == operand_value; | 943 return static_cast<uint16_t>(operand_value) == operand_value; |
| 928 case OperandType::kCount8: | 944 case OperandType::kCount8: |
| 929 case OperandType::kImm8: | 945 case OperandType::kImm8: |
| 930 case OperandType::kIdx8: | 946 case OperandType::kIdx8: |
| 931 return static_cast<uint8_t>(operand_value) == operand_value; | 947 return static_cast<uint8_t>(operand_value) == operand_value; |
| 932 case OperandType::kMaybeReg8: | 948 case OperandType::kMaybeReg8: |
| 933 if (operand_value == 0) { | 949 if (operand_value == 0) { |
| 934 return true; | 950 return true; |
| 935 } | 951 } |
| (...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1299 DCHECK_GT(next_consecutive_count_, 0); | 1315 DCHECK_GT(next_consecutive_count_, 0); |
| 1300 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); | 1316 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); |
| 1301 allocated_.push_back(next_consecutive_register_); | 1317 allocated_.push_back(next_consecutive_register_); |
| 1302 next_consecutive_count_--; | 1318 next_consecutive_count_--; |
| 1303 return Register(next_consecutive_register_++); | 1319 return Register(next_consecutive_register_++); |
| 1304 } | 1320 } |
| 1305 | 1321 |
| 1306 } // namespace interpreter | 1322 } // namespace interpreter |
| 1307 } // namespace internal | 1323 } // namespace internal |
| 1308 } // namespace v8 | 1324 } // namespace v8 |
| OLD | NEW |