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 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 | 382 |
383 | 383 |
384 BytecodeArrayBuilder& BytecodeArrayBuilder::CreateClosure( | 384 BytecodeArrayBuilder& BytecodeArrayBuilder::CreateClosure( |
385 PretenureFlag tenured) { | 385 PretenureFlag tenured) { |
386 DCHECK(FitsInImm8Operand(tenured)); | 386 DCHECK(FitsInImm8Operand(tenured)); |
387 Output(Bytecode::kCreateClosure, static_cast<uint8_t>(tenured)); | 387 Output(Bytecode::kCreateClosure, static_cast<uint8_t>(tenured)); |
388 return *this; | 388 return *this; |
389 } | 389 } |
390 | 390 |
391 | 391 |
| 392 BytecodeArrayBuilder& BytecodeArrayBuilder::CreateArguments( |
| 393 CreateArgumentsType type) { |
| 394 // TODO(rmcilroy): Consider passing the type as a bytecode operand rather |
| 395 // than having two different bytecodes once we have better support for |
| 396 // branches in the InterpreterAssembler. |
| 397 Bytecode bytecode = BytecodeForCreateArguments(type); |
| 398 Output(bytecode); |
| 399 return *this; |
| 400 } |
| 401 |
| 402 |
392 BytecodeArrayBuilder& BytecodeArrayBuilder::CreateRegExpLiteral( | 403 BytecodeArrayBuilder& BytecodeArrayBuilder::CreateRegExpLiteral( |
393 int literal_index, Register flags) { | 404 int literal_index, Register flags) { |
394 if (FitsInIdx8Operand(literal_index)) { | 405 if (FitsInIdx8Operand(literal_index)) { |
395 Output(Bytecode::kCreateRegExpLiteral, static_cast<uint8_t>(literal_index), | 406 Output(Bytecode::kCreateRegExpLiteral, static_cast<uint8_t>(literal_index), |
396 flags.ToOperand()); | 407 flags.ToOperand()); |
397 } else { | 408 } else { |
398 UNIMPLEMENTED(); | 409 UNIMPLEMENTED(); |
399 } | 410 } |
400 return *this; | 411 return *this; |
401 } | 412 } |
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
983 case STRONG: | 994 case STRONG: |
984 UNIMPLEMENTED(); | 995 UNIMPLEMENTED(); |
985 default: | 996 default: |
986 UNREACHABLE(); | 997 UNREACHABLE(); |
987 } | 998 } |
988 return static_cast<Bytecode>(-1); | 999 return static_cast<Bytecode>(-1); |
989 } | 1000 } |
990 | 1001 |
991 | 1002 |
992 // static | 1003 // static |
| 1004 Bytecode BytecodeArrayBuilder::BytecodeForCreateArguments( |
| 1005 CreateArgumentsType type) { |
| 1006 switch (type) { |
| 1007 case CreateArgumentsType::kMappedArguments: |
| 1008 return Bytecode::kCreateMappedArguments; |
| 1009 case CreateArgumentsType::kUnmappedArguments: |
| 1010 return Bytecode::kCreateUnmappedArguments; |
| 1011 default: |
| 1012 UNREACHABLE(); |
| 1013 } |
| 1014 return static_cast<Bytecode>(-1); |
| 1015 } |
| 1016 |
| 1017 |
| 1018 // static |
993 bool BytecodeArrayBuilder::FitsInIdx8Operand(int value) { | 1019 bool BytecodeArrayBuilder::FitsInIdx8Operand(int value) { |
994 return kMinUInt8 <= value && value <= kMaxUInt8; | 1020 return kMinUInt8 <= value && value <= kMaxUInt8; |
995 } | 1021 } |
996 | 1022 |
997 | 1023 |
998 // static | 1024 // static |
999 bool BytecodeArrayBuilder::FitsInIdx8Operand(size_t value) { | 1025 bool BytecodeArrayBuilder::FitsInIdx8Operand(size_t value) { |
1000 return value <= static_cast<size_t>(kMaxUInt8); | 1026 return value <= static_cast<size_t>(kMaxUInt8); |
1001 } | 1027 } |
1002 | 1028 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1049 DCHECK_GT(next_consecutive_count_, 0); | 1075 DCHECK_GT(next_consecutive_count_, 0); |
1050 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); | 1076 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); |
1051 allocated_.push_back(next_consecutive_register_); | 1077 allocated_.push_back(next_consecutive_register_); |
1052 next_consecutive_count_--; | 1078 next_consecutive_count_--; |
1053 return Register(next_consecutive_register_++); | 1079 return Register(next_consecutive_register_++); |
1054 } | 1080 } |
1055 | 1081 |
1056 } // namespace interpreter | 1082 } // namespace interpreter |
1057 } // namespace internal | 1083 } // namespace internal |
1058 } // namespace v8 | 1084 } // namespace v8 |
OLD | NEW |