Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(407)

Side by Side Diff: src/interpreter/bytecode-decoder.cc

Issue 2712943002: [interpreter] Teach --print-bytecode the names of runtime functions and intrinsics. (Closed)
Patch Set: Make test robust again. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | test/unittests/interpreter/bytecode-decoder-unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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-decoder.h" 5 #include "src/interpreter/bytecode-decoder.h"
6 6
7 #include <iomanip> 7 #include <iomanip>
8 8
9 #include "src/utils.h" 9 #include "src/interpreter/interpreter-intrinsics.h"
10 10
11 namespace v8 { 11 namespace v8 {
12 namespace internal { 12 namespace internal {
13 namespace interpreter { 13 namespace interpreter {
14 14
15 // static 15 // static
16 Register BytecodeDecoder::DecodeRegisterOperand(const uint8_t* operand_start, 16 Register BytecodeDecoder::DecodeRegisterOperand(const uint8_t* operand_start,
17 OperandType operand_type, 17 OperandType operand_type,
18 OperandScale operand_scale) { 18 OperandScale operand_scale) {
19 DCHECK(Bytecodes::IsRegisterOperandType(operand_type)); 19 DCHECK(Bytecodes::IsRegisterOperandType(operand_type));
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 case OperandSize::kShort: 60 case OperandSize::kShort:
61 return ReadUnalignedUInt16(operand_start); 61 return ReadUnalignedUInt16(operand_start);
62 case OperandSize::kQuad: 62 case OperandSize::kQuad:
63 return ReadUnalignedUInt32(operand_start); 63 return ReadUnalignedUInt32(operand_start);
64 case OperandSize::kNone: 64 case OperandSize::kNone:
65 UNREACHABLE(); 65 UNREACHABLE();
66 } 66 }
67 return 0; 67 return 0;
68 } 68 }
69 69
70 namespace {
71 const char* NameForIntrinsicId(uint32_t idx) {
72 switch (static_cast<IntrinsicsHelper::IntrinsicId>(idx)) {
73 #define CASE(name, nargs, ressize) \
74 case IntrinsicsHelper::IntrinsicId::k##name: \
75 return #name;
76 INTRINSICS_LIST(CASE)
77 #undef CASE
78 default:
79 UNREACHABLE();
80 return nullptr;
81 }
82 }
83
84 const char* NameForRuntimeId(uint32_t idx) {
85 switch (idx) {
86 #define CASE(name, nargs, ressize) \
87 case Runtime::k##name: \
88 return #name; \
89 case Runtime::kInline##name: \
90 return #name;
91 FOR_EACH_INTRINSIC(CASE)
92 #undef CASE
93 default:
94 UNREACHABLE();
95 return nullptr;
96 }
97 }
98 } // anonymous namespace
99
70 // static 100 // static
71 std::ostream& BytecodeDecoder::Decode(std::ostream& os, 101 std::ostream& BytecodeDecoder::Decode(std::ostream& os,
72 const uint8_t* bytecode_start, 102 const uint8_t* bytecode_start,
73 int parameter_count) { 103 int parameter_count) {
74 Bytecode bytecode = Bytecodes::FromByte(bytecode_start[0]); 104 Bytecode bytecode = Bytecodes::FromByte(bytecode_start[0]);
75 int prefix_offset = 0; 105 int prefix_offset = 0;
76 OperandScale operand_scale = OperandScale::kSingle; 106 OperandScale operand_scale = OperandScale::kSingle;
77 if (Bytecodes::IsPrefixScalingBytecode(bytecode)) { 107 if (Bytecodes::IsPrefixScalingBytecode(bytecode)) {
78 prefix_offset = 1; 108 prefix_offset = 1;
79 operand_scale = Bytecodes::PrefixBytecodeToOperandScale(bytecode); 109 operand_scale = Bytecodes::PrefixBytecodeToOperandScale(bytecode);
(...skipping 25 matching lines...) Expand all
105 int number_of_operands = Bytecodes::NumberOfOperands(bytecode); 135 int number_of_operands = Bytecodes::NumberOfOperands(bytecode);
106 for (int i = 0; i < number_of_operands; i++) { 136 for (int i = 0; i < number_of_operands; i++) {
107 OperandType op_type = Bytecodes::GetOperandType(bytecode, i); 137 OperandType op_type = Bytecodes::GetOperandType(bytecode, i);
108 int operand_offset = 138 int operand_offset =
109 Bytecodes::GetOperandOffset(bytecode, i, operand_scale); 139 Bytecodes::GetOperandOffset(bytecode, i, operand_scale);
110 const uint8_t* operand_start = 140 const uint8_t* operand_start =
111 &bytecode_start[prefix_offset + operand_offset]; 141 &bytecode_start[prefix_offset + operand_offset];
112 switch (op_type) { 142 switch (op_type) {
113 case interpreter::OperandType::kIdx: 143 case interpreter::OperandType::kIdx:
114 case interpreter::OperandType::kUImm: 144 case interpreter::OperandType::kUImm:
115 case interpreter::OperandType::kRuntimeId:
116 case interpreter::OperandType::kIntrinsicId:
117 os << "[" 145 os << "["
118 << DecodeUnsignedOperand(operand_start, op_type, operand_scale) 146 << DecodeUnsignedOperand(operand_start, op_type, operand_scale)
119 << "]"; 147 << "]";
120 break; 148 break;
149 case interpreter::OperandType::kIntrinsicId:
150 os << "[" << NameForIntrinsicId(DecodeUnsignedOperand(
rmcilroy 2017/02/23 13:47:13 nit - could you just do NameForRuntimeId(Intrinsic
neis 2017/02/23 14:02:55 Done.
151 operand_start, op_type, operand_scale))
152 << "]";
153 break;
154 case interpreter::OperandType::kRuntimeId:
155 os << "[" << NameForRuntimeId(DecodeUnsignedOperand(
156 operand_start, op_type, operand_scale))
157 << "]";
158 break;
121 case interpreter::OperandType::kImm: 159 case interpreter::OperandType::kImm:
122 os << "[" << DecodeSignedOperand(operand_start, op_type, operand_scale) 160 os << "[" << DecodeSignedOperand(operand_start, op_type, operand_scale)
123 << "]"; 161 << "]";
124 break; 162 break;
125 case interpreter::OperandType::kFlag8: 163 case interpreter::OperandType::kFlag8:
126 os << "#" 164 os << "#"
127 << DecodeUnsignedOperand(operand_start, op_type, operand_scale); 165 << DecodeUnsignedOperand(operand_start, op_type, operand_scale);
128 break; 166 break;
129 case interpreter::OperandType::kReg: 167 case interpreter::OperandType::kReg:
130 case interpreter::OperandType::kRegOut: { 168 case interpreter::OperandType::kRegOut: {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 if (i != number_of_operands - 1) { 211 if (i != number_of_operands - 1) {
174 os << ", "; 212 os << ", ";
175 } 213 }
176 } 214 }
177 return os; 215 return os;
178 } 216 }
179 217
180 } // namespace interpreter 218 } // namespace interpreter
181 } // namespace internal 219 } // namespace internal
182 } // namespace v8 220 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/unittests/interpreter/bytecode-decoder-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698