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 3 // found in the LICENSE file. 4 5 #ifndef V8_INTERPRETER_BYTECODE_DECODER_H_ 6 #define V8_INTERPRETER_BYTECODE_DECODER_H_ 7 8 #include <iosfwd> 9 10 #include "src/common/globals.h" 11 #include "src/interpreter/bytecode-register.h" 12 #include "src/interpreter/bytecodes.h" 13 14 namespace v8 { 15 namespace internal { 16 namespace interpreter { 17 18 class V8_EXPORT_PRIVATE BytecodeDecoder final { 19 public: 20 // Decodes a register operand in a byte array. 21 static Register DecodeRegisterOperand(Address operand_start, 22 OperandType operand_type, 23 OperandScale operand_scale); 24 25 // Decodes a register list operand in a byte array. 26 static RegisterList DecodeRegisterListOperand(Address operand_start, 27 uint32_t count, 28 OperandType operand_type, 29 OperandScale operand_scale); 30 31 // Decodes a signed operand in a byte array. 32 static int32_t DecodeSignedOperand(Address operand_start, 33 OperandType operand_type, 34 OperandScale operand_scale); 35 36 // Decodes an unsigned operand in a byte array. 37 static uint32_t DecodeUnsignedOperand(Address operand_start, 38 OperandType operand_type, 39 OperandScale operand_scale); 40 41 // Decode a single bytecode and operands to |os|. 42 static std::ostream& Decode(std::ostream& os, const uint8_t* bytecode_start, 43 int number_of_parameters); 44 }; 45 46 } // namespace interpreter 47 } // namespace internal 48 } // namespace v8 49 50 #endif // V8_INTERPRETER_BYTECODE_DECODER_H_ 51