| 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 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 Register reg) { | 281 Register reg) { |
| 282 if (!IsRegisterInAccumulator(reg)) { | 282 if (!IsRegisterInAccumulator(reg)) { |
| 283 Output(Bytecode::kLdar, reg.ToOperand()); | 283 Output(Bytecode::kLdar, reg.ToOperand()); |
| 284 } | 284 } |
| 285 return *this; | 285 return *this; |
| 286 } | 286 } |
| 287 | 287 |
| 288 | 288 |
| 289 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreAccumulatorInRegister( | 289 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreAccumulatorInRegister( |
| 290 Register reg) { | 290 Register reg) { |
| 291 // TODO(oth): Avoid storing the accumulator in the register if the |
| 292 // previous bytecode loaded the accumulator with the same register. |
| 293 // |
| 294 // TODO(oth): If the previous bytecode is a MOV into this register, |
| 295 // the previous instruction can be removed. The logic for determining |
| 296 // these redundant MOVs appears complex. |
| 297 Output(Bytecode::kStar, reg.ToOperand()); |
| 291 if (!IsRegisterInAccumulator(reg)) { | 298 if (!IsRegisterInAccumulator(reg)) { |
| 292 Output(Bytecode::kStar, reg.ToOperand()); | 299 Output(Bytecode::kStar, reg.ToOperand()); |
| 293 } | 300 } |
| 294 return *this; | 301 return *this; |
| 295 } | 302 } |
| 296 | 303 |
| 297 | 304 |
| 305 BytecodeArrayBuilder& BytecodeArrayBuilder::MoveRegister(Register from, |
| 306 Register to) { |
| 307 DCHECK(from != to); |
| 308 Output(Bytecode::kMov, from.ToOperand(), to.ToOperand()); |
| 309 return *this; |
| 310 } |
| 311 |
| 312 |
| 298 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadGlobal( | 313 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadGlobal( |
| 299 size_t name_index, int feedback_slot, LanguageMode language_mode, | 314 size_t name_index, int feedback_slot, LanguageMode language_mode, |
| 300 TypeofMode typeof_mode) { | 315 TypeofMode typeof_mode) { |
| 301 // TODO(rmcilroy): Potentially store language and typeof information in an | 316 // TODO(rmcilroy): Potentially store language and typeof information in an |
| 302 // operand rather than having extra bytecodes. | 317 // operand rather than having extra bytecodes. |
| 303 Bytecode bytecode = BytecodeForLoadGlobal(language_mode, typeof_mode); | 318 Bytecode bytecode = BytecodeForLoadGlobal(language_mode, typeof_mode); |
| 304 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) { | 319 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) { |
| 305 Output(bytecode, static_cast<uint8_t>(name_index), | 320 Output(bytecode, static_cast<uint8_t>(name_index), |
| 306 static_cast<uint8_t>(feedback_slot)); | 321 static_cast<uint8_t>(feedback_slot)); |
| 307 } else if (FitsInIdx16Operand(name_index) && | 322 } else if (FitsInIdx16Operand(name_index) && |
| (...skipping 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1315 DCHECK_GT(next_consecutive_count_, 0); | 1330 DCHECK_GT(next_consecutive_count_, 0); |
| 1316 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); | 1331 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); |
| 1317 allocated_.push_back(next_consecutive_register_); | 1332 allocated_.push_back(next_consecutive_register_); |
| 1318 next_consecutive_count_--; | 1333 next_consecutive_count_--; |
| 1319 return Register(next_consecutive_register_++); | 1334 return Register(next_consecutive_register_++); |
| 1320 } | 1335 } |
| 1321 | 1336 |
| 1322 } // namespace interpreter | 1337 } // namespace interpreter |
| 1323 } // namespace internal | 1338 } // namespace internal |
| 1324 } // namespace v8 | 1339 } // namespace v8 |
| OLD | NEW |