| 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 #ifndef V8_INTERPRETER_BYTECODES_H_ | 5 #ifndef V8_INTERPRETER_BYTECODES_H_ |
| 6 #define V8_INTERPRETER_BYTECODES_H_ | 6 #define V8_INTERPRETER_BYTECODES_H_ |
| 7 | 7 |
| 8 #include <iosfwd> | 8 #include <iosfwd> |
| 9 | 9 |
| 10 // Clients of this interface shouldn't depend on lots of interpreter internals. | 10 // Clients of this interface shouldn't depend on lots of interpreter internals. |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 V(CreateClosure, OperandType::kIdx8, OperandType::kImm8) \ | 178 V(CreateClosure, OperandType::kIdx8, OperandType::kImm8) \ |
| 179 V(CreateClosureWide, OperandType::kIdx16, OperandType::kImm8) \ | 179 V(CreateClosureWide, OperandType::kIdx16, OperandType::kImm8) \ |
| 180 \ | 180 \ |
| 181 /* Arguments allocation */ \ | 181 /* Arguments allocation */ \ |
| 182 V(CreateMappedArguments, OperandType::kNone) \ | 182 V(CreateMappedArguments, OperandType::kNone) \ |
| 183 V(CreateUnmappedArguments, OperandType::kNone) \ | 183 V(CreateUnmappedArguments, OperandType::kNone) \ |
| 184 \ | 184 \ |
| 185 /* Control Flow */ \ | 185 /* Control Flow */ \ |
| 186 V(Jump, OperandType::kImm8) \ | 186 V(Jump, OperandType::kImm8) \ |
| 187 V(JumpConstant, OperandType::kIdx8) \ | 187 V(JumpConstant, OperandType::kIdx8) \ |
| 188 V(JumpConstantWide, OperandType::kIdx16) \ |
| 188 V(JumpIfTrue, OperandType::kImm8) \ | 189 V(JumpIfTrue, OperandType::kImm8) \ |
| 189 V(JumpIfTrueConstant, OperandType::kIdx8) \ | 190 V(JumpIfTrueConstant, OperandType::kIdx8) \ |
| 191 V(JumpIfTrueConstantWide, OperandType::kIdx16) \ |
| 190 V(JumpIfFalse, OperandType::kImm8) \ | 192 V(JumpIfFalse, OperandType::kImm8) \ |
| 191 V(JumpIfFalseConstant, OperandType::kIdx8) \ | 193 V(JumpIfFalseConstant, OperandType::kIdx8) \ |
| 194 V(JumpIfFalseConstantWide, OperandType::kIdx16) \ |
| 192 V(JumpIfToBooleanTrue, OperandType::kImm8) \ | 195 V(JumpIfToBooleanTrue, OperandType::kImm8) \ |
| 193 V(JumpIfToBooleanTrueConstant, OperandType::kIdx8) \ | 196 V(JumpIfToBooleanTrueConstant, OperandType::kIdx8) \ |
| 197 V(JumpIfToBooleanTrueConstantWide, OperandType::kIdx16) \ |
| 194 V(JumpIfToBooleanFalse, OperandType::kImm8) \ | 198 V(JumpIfToBooleanFalse, OperandType::kImm8) \ |
| 195 V(JumpIfToBooleanFalseConstant, OperandType::kIdx8) \ | 199 V(JumpIfToBooleanFalseConstant, OperandType::kIdx8) \ |
| 200 V(JumpIfToBooleanFalseConstantWide, OperandType::kIdx16) \ |
| 196 V(JumpIfNull, OperandType::kImm8) \ | 201 V(JumpIfNull, OperandType::kImm8) \ |
| 197 V(JumpIfNullConstant, OperandType::kIdx8) \ | 202 V(JumpIfNullConstant, OperandType::kIdx8) \ |
| 203 V(JumpIfNullConstantWide, OperandType::kIdx16) \ |
| 198 V(JumpIfUndefined, OperandType::kImm8) \ | 204 V(JumpIfUndefined, OperandType::kImm8) \ |
| 199 V(JumpIfUndefinedConstant, OperandType::kIdx8) \ | 205 V(JumpIfUndefinedConstant, OperandType::kIdx8) \ |
| 206 V(JumpIfUndefinedConstantWide, OperandType::kIdx16) \ |
| 200 \ | 207 \ |
| 201 /* Complex flow control For..in */ \ | 208 /* Complex flow control For..in */ \ |
| 202 V(ForInPrepare, OperandType::kReg8, OperandType::kReg8, OperandType::kReg8) \ | 209 V(ForInPrepare, OperandType::kReg8, OperandType::kReg8, OperandType::kReg8) \ |
| 203 V(ForInDone, OperandType::kReg8, OperandType::kReg8) \ | 210 V(ForInDone, OperandType::kReg8, OperandType::kReg8) \ |
| 204 V(ForInNext, OperandType::kReg8, OperandType::kReg8, OperandType::kReg8, \ | 211 V(ForInNext, OperandType::kReg8, OperandType::kReg8, OperandType::kReg8, \ |
| 205 OperandType::kReg8) \ | 212 OperandType::kReg8) \ |
| 206 V(ForInStep, OperandType::kReg8) \ | 213 V(ForInStep, OperandType::kReg8) \ |
| 207 \ | 214 \ |
| 208 /* Non-local flow control */ \ | 215 /* Non-local flow control */ \ |
| 209 V(Throw, OperandType::kNone) \ | 216 V(Throw, OperandType::kNone) \ |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 static int Size(Bytecode bytecode); | 353 static int Size(Bytecode bytecode); |
| 347 | 354 |
| 348 // Returns the size of |operand|. | 355 // Returns the size of |operand|. |
| 349 static OperandSize SizeOfOperand(OperandType operand); | 356 static OperandSize SizeOfOperand(OperandType operand); |
| 350 | 357 |
| 351 // Return true if the bytecode is a conditional jump taking | 358 // Return true if the bytecode is a conditional jump taking |
| 352 // an immediate byte operand (OperandType::kImm8). | 359 // an immediate byte operand (OperandType::kImm8). |
| 353 static bool IsConditionalJumpImmediate(Bytecode bytecode); | 360 static bool IsConditionalJumpImmediate(Bytecode bytecode); |
| 354 | 361 |
| 355 // Return true if the bytecode is a conditional jump taking | 362 // Return true if the bytecode is a conditional jump taking |
| 356 // a constant pool entry (OperandType::kIdx). | 363 // a constant pool entry (OperandType::kIdx8). |
| 357 static bool IsConditionalJumpConstant(Bytecode bytecode); | 364 static bool IsConditionalJumpConstant(Bytecode bytecode); |
| 358 | 365 |
| 359 // Return true if the bytecode is a conditional jump taking | 366 // Return true if the bytecode is a conditional jump taking |
| 367 // a constant pool entry (OperandType::kIdx16). |
| 368 static bool IsConditionalJumpConstantWide(Bytecode bytecode); |
| 369 |
| 370 // Return true if the bytecode is a conditional jump taking |
| 360 // any kind of operand. | 371 // any kind of operand. |
| 361 static bool IsConditionalJump(Bytecode bytecode); | 372 static bool IsConditionalJump(Bytecode bytecode); |
| 362 | 373 |
| 363 // Return true if the bytecode is a jump or a conditional jump taking | 374 // Return true if the bytecode is a jump or a conditional jump taking |
| 364 // an immediate byte operand (OperandType::kImm8). | 375 // an immediate byte operand (OperandType::kImm8). |
| 365 static bool IsJumpImmediate(Bytecode bytecode); | 376 static bool IsJumpImmediate(Bytecode bytecode); |
| 366 | 377 |
| 367 // Return true if the bytecode is a jump or conditional jump taking a | 378 // Return true if the bytecode is a jump or conditional jump taking a |
| 368 // constant pool entry (OperandType::kIdx). | 379 // constant pool entry (OperandType::kIdx8). |
| 369 static bool IsJumpConstant(Bytecode bytecode); | 380 static bool IsJumpConstant(Bytecode bytecode); |
| 370 | 381 |
| 382 // Return true if the bytecode is a jump or conditional jump taking a |
| 383 // constant pool entry (OperandType::kIdx16). |
| 384 static bool IsJumpConstantWide(Bytecode bytecode); |
| 385 |
| 371 // Return true if the bytecode is a jump or conditional jump taking | 386 // Return true if the bytecode is a jump or conditional jump taking |
| 372 // any kind of operand. | 387 // any kind of operand. |
| 373 static bool IsJump(Bytecode bytecode); | 388 static bool IsJump(Bytecode bytecode); |
| 374 | 389 |
| 375 // Return true if the bytecode is a conditional jump, a jump, or a return. | 390 // Return true if the bytecode is a conditional jump, a jump, or a return. |
| 376 static bool IsJumpOrReturn(Bytecode bytecode); | 391 static bool IsJumpOrReturn(Bytecode bytecode); |
| 377 | 392 |
| 378 // Decode a single bytecode and operands to |os|. | 393 // Decode a single bytecode and operands to |os|. |
| 379 static std::ostream& Decode(std::ostream& os, const uint8_t* bytecode_start, | 394 static std::ostream& Decode(std::ostream& os, const uint8_t* bytecode_start, |
| 380 int number_of_parameters); | 395 int number_of_parameters); |
| 381 | 396 |
| 382 private: | 397 private: |
| 383 DISALLOW_IMPLICIT_CONSTRUCTORS(Bytecodes); | 398 DISALLOW_IMPLICIT_CONSTRUCTORS(Bytecodes); |
| 384 }; | 399 }; |
| 385 | 400 |
| 386 std::ostream& operator<<(std::ostream& os, const Bytecode& bytecode); | 401 std::ostream& operator<<(std::ostream& os, const Bytecode& bytecode); |
| 387 std::ostream& operator<<(std::ostream& os, const OperandType& operand_type); | 402 std::ostream& operator<<(std::ostream& os, const OperandType& operand_type); |
| 388 std::ostream& operator<<(std::ostream& os, const OperandSize& operand_type); | 403 std::ostream& operator<<(std::ostream& os, const OperandSize& operand_type); |
| 389 | 404 |
| 390 } // namespace interpreter | 405 } // namespace interpreter |
| 391 } // namespace internal | 406 } // namespace internal |
| 392 } // namespace v8 | 407 } // namespace v8 |
| 393 | 408 |
| 394 #endif // V8_INTERPRETER_BYTECODES_H_ | 409 #endif // V8_INTERPRETER_BYTECODES_H_ |
| OLD | NEW |