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 "test/unittests/interpreter/interpreter-assembler-unittest.h" | 5 #include "test/unittests/interpreter/interpreter-assembler-unittest.h" |
6 | 6 |
7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
8 #include "src/compiler/graph.h" | 8 #include "src/compiler/graph.h" |
9 #include "src/compiler/node.h" | 9 #include "src/compiler/node.h" |
10 #include "src/interface-descriptors.h" | 10 #include "src/interface-descriptors.h" |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 | 70 |
71 Matcher<Node*> InterpreterAssemblerTest::InterpreterAssemblerForTest::IsStore( | 71 Matcher<Node*> InterpreterAssemblerTest::InterpreterAssemblerForTest::IsStore( |
72 const Matcher<StoreRepresentation>& rep_matcher, | 72 const Matcher<StoreRepresentation>& rep_matcher, |
73 const Matcher<Node*>& base_matcher, const Matcher<Node*>& index_matcher, | 73 const Matcher<Node*>& base_matcher, const Matcher<Node*>& index_matcher, |
74 const Matcher<Node*>& value_matcher) { | 74 const Matcher<Node*>& value_matcher) { |
75 return ::i::compiler::IsStore(rep_matcher, base_matcher, index_matcher, | 75 return ::i::compiler::IsStore(rep_matcher, base_matcher, index_matcher, |
76 value_matcher, _, _); | 76 value_matcher, _, _); |
77 } | 77 } |
78 | 78 |
79 Matcher<Node*> | 79 Matcher<Node*> |
80 InterpreterAssemblerTest::InterpreterAssemblerForTest::IsBytecodeOperand( | 80 InterpreterAssemblerTest::InterpreterAssemblerForTest::IsUnsignedByteOperand( |
81 int offset) { | 81 int offset) { |
82 return IsLoad( | 82 return IsLoad( |
83 MachineType::Uint8(), | 83 MachineType::Uint8(), |
84 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), | 84 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), |
85 IsIntPtrAdd( | 85 IsIntPtrAdd( |
86 IsParameter(InterpreterDispatchDescriptor::kBytecodeOffsetParameter), | 86 IsParameter(InterpreterDispatchDescriptor::kBytecodeOffsetParameter), |
87 IsIntPtrConstant(offset))); | 87 IsIntPtrConstant(offset))); |
88 } | 88 } |
89 | 89 |
90 Matcher<Node*> InterpreterAssemblerTest::InterpreterAssemblerForTest:: | 90 Matcher<Node*> |
91 IsBytecodeOperandSignExtended(int offset) { | 91 InterpreterAssemblerTest::InterpreterAssemblerForTest::IsSignedByteOperand( |
| 92 int offset) { |
92 Matcher<Node*> load_matcher = IsLoad( | 93 Matcher<Node*> load_matcher = IsLoad( |
93 MachineType::Int8(), | 94 MachineType::Int8(), |
94 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), | 95 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), |
95 IsIntPtrAdd( | 96 IsIntPtrAdd( |
96 IsParameter(InterpreterDispatchDescriptor::kBytecodeOffsetParameter), | 97 IsParameter(InterpreterDispatchDescriptor::kBytecodeOffsetParameter), |
97 IsIntPtrConstant(offset))); | 98 IsIntPtrConstant(offset))); |
98 if (kPointerSize == 8) { | 99 if (kPointerSize == 8) { |
99 load_matcher = IsChangeInt32ToInt64(load_matcher); | 100 load_matcher = IsChangeInt32ToInt64(load_matcher); |
100 } | 101 } |
101 return load_matcher; | 102 return load_matcher; |
102 } | 103 } |
103 | 104 |
104 Matcher<Node*> | 105 Matcher<Node*> |
105 InterpreterAssemblerTest::InterpreterAssemblerForTest::IsBytecodeOperandShort( | 106 InterpreterAssemblerTest::InterpreterAssemblerForTest::IsUnsignedShortOperand( |
106 int offset) { | 107 int offset) { |
107 if (TargetSupportsUnalignedAccess()) { | 108 if (TargetSupportsUnalignedAccess()) { |
108 return IsLoad( | 109 return IsLoad( |
109 MachineType::Uint16(), | 110 MachineType::Uint16(), |
110 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), | 111 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), |
111 IsIntPtrAdd( | 112 IsIntPtrAdd( |
112 IsParameter( | 113 IsParameter( |
113 InterpreterDispatchDescriptor::kBytecodeOffsetParameter), | 114 InterpreterDispatchDescriptor::kBytecodeOffsetParameter), |
114 IsIntPtrConstant(offset))); | 115 IsIntPtrConstant(offset))); |
115 } else { | 116 } else { |
(...skipping 16 matching lines...) Expand all Loading... |
132 first_byte); | 133 first_byte); |
133 #elif V8_TARGET_BIG_ENDIAN | 134 #elif V8_TARGET_BIG_ENDIAN |
134 return IsWordOr(IsWordShl(first_byte, IsIntPtrConstant(kBitsPerByte)), | 135 return IsWordOr(IsWordShl(first_byte, IsIntPtrConstant(kBitsPerByte)), |
135 second_byte); | 136 second_byte); |
136 #else | 137 #else |
137 #error "Unknown Architecture" | 138 #error "Unknown Architecture" |
138 #endif | 139 #endif |
139 } | 140 } |
140 } | 141 } |
141 | 142 |
142 Matcher<Node*> InterpreterAssemblerTest::InterpreterAssemblerForTest:: | 143 Matcher<Node*> |
143 IsBytecodeOperandShortSignExtended(int offset) { | 144 InterpreterAssemblerTest::InterpreterAssemblerForTest::IsSignedShortOperand( |
| 145 int offset) { |
144 Matcher<Node*> load_matcher; | 146 Matcher<Node*> load_matcher; |
145 if (TargetSupportsUnalignedAccess()) { | 147 if (TargetSupportsUnalignedAccess()) { |
146 load_matcher = IsLoad( | 148 load_matcher = IsLoad( |
147 MachineType::Int16(), | 149 MachineType::Int16(), |
148 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), | 150 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), |
149 IsIntPtrAdd( | 151 IsIntPtrAdd( |
150 IsParameter( | 152 IsParameter( |
151 InterpreterDispatchDescriptor::kBytecodeOffsetParameter), | 153 InterpreterDispatchDescriptor::kBytecodeOffsetParameter), |
152 IsIntPtrConstant(offset))); | 154 IsIntPtrConstant(offset))); |
153 } else { | 155 } else { |
(...skipping 24 matching lines...) Expand all Loading... |
178 IsIntPtrConstant(lo_byte_offset))); | 180 IsIntPtrConstant(lo_byte_offset))); |
179 load_matcher = IsWord32Or(hi_byte, lo_byte); | 181 load_matcher = IsWord32Or(hi_byte, lo_byte); |
180 } | 182 } |
181 | 183 |
182 if (kPointerSize == 8) { | 184 if (kPointerSize == 8) { |
183 load_matcher = IsChangeInt32ToInt64(load_matcher); | 185 load_matcher = IsChangeInt32ToInt64(load_matcher); |
184 } | 186 } |
185 return load_matcher; | 187 return load_matcher; |
186 } | 188 } |
187 | 189 |
| 190 Matcher<Node*> |
| 191 InterpreterAssemblerTest::InterpreterAssemblerForTest::IsUnsignedQuadOperand( |
| 192 int offset) { |
| 193 if (TargetSupportsUnalignedAccess()) { |
| 194 return IsLoad( |
| 195 MachineType::Uint32(), |
| 196 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), |
| 197 IsIntPtrAdd( |
| 198 IsParameter( |
| 199 InterpreterDispatchDescriptor::kBytecodeOffsetParameter), |
| 200 IsIntPtrConstant(offset))); |
| 201 } else { |
| 202 Matcher<Node*> bytes[4]; |
| 203 for (int i = 0; i < static_cast<int>(arraysize(bytes)); i++) { |
| 204 bytes[i] = IsLoad( |
| 205 MachineType::Uint8(), |
| 206 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), |
| 207 IsIntPtrAdd( |
| 208 IsParameter( |
| 209 InterpreterDispatchDescriptor::kBytecodeOffsetParameter), |
| 210 IsIntPtrConstant(offset + i))); |
| 211 } |
| 212 |
| 213 #if V8_TARGET_LITTLE_ENDIAN |
| 214 Matcher<Node*> upper = |
| 215 IsWordOr(IsWordShl(bytes[3], IsIntPtrConstant(kBitsPerByte)), bytes[2]); |
| 216 Matcher<Node*> lower = |
| 217 IsWordOr(IsWordShl(bytes[1], IsIntPtrConstant(kBitsPerByte)), bytes[0]); |
| 218 return IsWordOr(IsWordShl(upper, IsIntPtrConstant(2 * kBitsPerByte)), |
| 219 lower); |
| 220 #elif V8_TARGET_BIG_ENDIAN |
| 221 Matcher<Node*> upper = |
| 222 IsWordOr(IsWordShl(bytes[0], IsIntPtrConstant(kBitsPerByte)), bytes[1]); |
| 223 Matcher<Node*> lower = |
| 224 IsWordOr(IsWordShl(bytes[2], IsIntPtrConstant(kBitsPerByte)), bytes[3]); |
| 225 return IsWordOr(IsWordShl(upper, IsIntPtrConstant(2 * kBitsPerByte)), |
| 226 lower); |
| 227 #else |
| 228 #error "Unknown Architecture" |
| 229 #endif |
| 230 } |
| 231 } |
| 232 |
| 233 Matcher<Node*> |
| 234 InterpreterAssemblerTest::InterpreterAssemblerForTest::IsSignedQuadOperand( |
| 235 int offset) { |
| 236 Matcher<Node*> load_matcher; |
| 237 if (TargetSupportsUnalignedAccess()) { |
| 238 load_matcher = IsLoad( |
| 239 MachineType::Int32(), |
| 240 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), |
| 241 IsIntPtrAdd( |
| 242 IsParameter( |
| 243 InterpreterDispatchDescriptor::kBytecodeOffsetParameter), |
| 244 IsIntPtrConstant(offset))); |
| 245 } else { |
| 246 Matcher<Node*> bytes[4]; |
| 247 for (int i = 0; i < static_cast<int>(arraysize(bytes)); i++) { |
| 248 bytes[i] = IsLoad( |
| 249 MachineType::Uint8(), |
| 250 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), |
| 251 IsIntPtrAdd( |
| 252 IsParameter( |
| 253 InterpreterDispatchDescriptor::kBytecodeOffsetParameter), |
| 254 IsIntPtrConstant(offset + i))); |
| 255 } |
| 256 |
| 257 #if V8_TARGET_LITTLE_ENDIAN |
| 258 Matcher<Node*> upper = |
| 259 IsWordOr(IsWordShl(bytes[3], IsIntPtrConstant(kBitsPerByte)), bytes[2]); |
| 260 Matcher<Node*> lower = |
| 261 IsWordOr(IsWordShl(bytes[1], IsIntPtrConstant(kBitsPerByte)), bytes[0]); |
| 262 load_matcher = |
| 263 IsWordOr(IsWordShl(upper, IsIntPtrConstant(2 * kBitsPerByte)), lower); |
| 264 #elif V8_TARGET_BIG_ENDIAN |
| 265 Matcher<Node*> upper = |
| 266 IsWordOr(IsWordShl(bytes[0], IsIntPtrConstant(kBitsPerByte)), bytes[1]); |
| 267 Matcher<Node*> lower = |
| 268 IsWordOr(IsWordShl(bytes[2], IsIntPtrConstant(kBitsPerByte)), bytes[3]); |
| 269 load_matcher = |
| 270 IsWordOr(IsWordShl(upper, IsIntPtrConstant(2 * kBitsPerByte)), lower); |
| 271 #else |
| 272 #error "Unknown Architecture" |
| 273 #endif |
| 274 } |
| 275 |
| 276 if (kPointerSize == 8) { |
| 277 load_matcher = IsChangeInt32ToInt64(load_matcher); |
| 278 } |
| 279 return load_matcher; |
| 280 } |
| 281 |
| 282 Matcher<Node*> |
| 283 InterpreterAssemblerTest::InterpreterAssemblerForTest::IsSignedOperand( |
| 284 int offset, OperandSize operand_size) { |
| 285 switch (operand_size) { |
| 286 case OperandSize::kByte: |
| 287 return IsSignedByteOperand(offset); |
| 288 case OperandSize::kShort: |
| 289 return IsSignedShortOperand(offset); |
| 290 case OperandSize::kQuad: |
| 291 return IsSignedQuadOperand(offset); |
| 292 case OperandSize::kNone: |
| 293 UNREACHABLE(); |
| 294 } |
| 295 return nullptr; |
| 296 } |
| 297 |
| 298 Matcher<Node*> |
| 299 InterpreterAssemblerTest::InterpreterAssemblerForTest::IsUnsignedOperand( |
| 300 int offset, OperandSize operand_size) { |
| 301 switch (operand_size) { |
| 302 case OperandSize::kByte: |
| 303 return IsUnsignedByteOperand(offset); |
| 304 case OperandSize::kShort: |
| 305 return IsUnsignedShortOperand(offset); |
| 306 case OperandSize::kQuad: |
| 307 return IsUnsignedQuadOperand(offset); |
| 308 case OperandSize::kNone: |
| 309 UNREACHABLE(); |
| 310 } |
| 311 return nullptr; |
| 312 } |
| 313 |
188 TARGET_TEST_F(InterpreterAssemblerTest, Dispatch) { | 314 TARGET_TEST_F(InterpreterAssemblerTest, Dispatch) { |
189 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { | 315 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { |
190 InterpreterAssemblerForTest m(this, bytecode); | 316 InterpreterAssemblerForTest m(this, bytecode); |
191 m.Dispatch(); | 317 m.Dispatch(); |
192 Graph* graph = m.graph(); | 318 Graph* graph = m.graph(); |
193 | 319 |
194 Node* end = graph->end(); | 320 Node* end = graph->end(); |
195 EXPECT_EQ(1, end->InputCount()); | 321 EXPECT_EQ(1, end->InputCount()); |
196 Node* tail_call_node = end->InputAt(0); | 322 Node* tail_call_node = end->InputAt(0); |
197 | 323 |
| 324 OperandScale operand_scale = OperandScale::k1X; |
198 Matcher<Node*> next_bytecode_offset_matcher = IsIntPtrAdd( | 325 Matcher<Node*> next_bytecode_offset_matcher = IsIntPtrAdd( |
199 IsParameter(InterpreterDispatchDescriptor::kBytecodeOffsetParameter), | 326 IsParameter(InterpreterDispatchDescriptor::kBytecodeOffsetParameter), |
200 IsIntPtrConstant(interpreter::Bytecodes::Size(bytecode))); | 327 IsIntPtrConstant( |
| 328 interpreter::Bytecodes::Size(bytecode, operand_scale))); |
201 Matcher<Node*> target_bytecode_matcher = m.IsLoad( | 329 Matcher<Node*> target_bytecode_matcher = m.IsLoad( |
202 MachineType::Uint8(), | 330 MachineType::Uint8(), |
203 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), | 331 IsParameter(InterpreterDispatchDescriptor::kBytecodeArrayParameter), |
204 next_bytecode_offset_matcher); | 332 next_bytecode_offset_matcher); |
205 if (kPointerSize == 8) { | 333 if (kPointerSize == 8) { |
206 target_bytecode_matcher = IsChangeUint32ToUint64(target_bytecode_matcher); | 334 target_bytecode_matcher = IsChangeUint32ToUint64(target_bytecode_matcher); |
207 } | 335 } |
208 Matcher<Node*> code_target_matcher = m.IsLoad( | 336 Matcher<Node*> code_target_matcher = m.IsLoad( |
209 MachineType::Pointer(), | 337 MachineType::Pointer(), |
210 IsParameter(InterpreterDispatchDescriptor::kDispatchTableParameter), | 338 IsParameter(InterpreterDispatchDescriptor::kDispatchTableParameter), |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 | 407 |
280 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { | 408 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { |
281 InterpreterAssemblerForTest m(this, bytecode); | 409 InterpreterAssemblerForTest m(this, bytecode); |
282 Node* lhs = m.IntPtrConstant(0); | 410 Node* lhs = m.IntPtrConstant(0); |
283 Node* rhs = m.IntPtrConstant(1); | 411 Node* rhs = m.IntPtrConstant(1); |
284 m.JumpIfWordEqual(lhs, rhs, m.IntPtrConstant(kJumpIfTrueOffset)); | 412 m.JumpIfWordEqual(lhs, rhs, m.IntPtrConstant(kJumpIfTrueOffset)); |
285 Graph* graph = m.graph(); | 413 Graph* graph = m.graph(); |
286 Node* end = graph->end(); | 414 Node* end = graph->end(); |
287 EXPECT_EQ(2, end->InputCount()); | 415 EXPECT_EQ(2, end->InputCount()); |
288 | 416 |
289 int jump_offsets[] = {kJumpIfTrueOffset, | 417 OperandScale operand_scale = OperandScale::k1X; |
290 interpreter::Bytecodes::Size(bytecode)}; | 418 int jump_offsets[] = {kJumpIfTrueOffset, interpreter::Bytecodes::Size( |
| 419 bytecode, operand_scale)}; |
291 for (int i = 0; i < static_cast<int>(arraysize(jump_offsets)); i++) { | 420 for (int i = 0; i < static_cast<int>(arraysize(jump_offsets)); i++) { |
292 Matcher<Node*> next_bytecode_offset_matcher = IsIntPtrAdd( | 421 Matcher<Node*> next_bytecode_offset_matcher = IsIntPtrAdd( |
293 IsParameter(InterpreterDispatchDescriptor::kBytecodeOffsetParameter), | 422 IsParameter(InterpreterDispatchDescriptor::kBytecodeOffsetParameter), |
294 IsIntPtrConstant(jump_offsets[i])); | 423 IsIntPtrConstant(jump_offsets[i])); |
295 Matcher<Node*> target_bytecode_matcher = | 424 Matcher<Node*> target_bytecode_matcher = |
296 m.IsLoad(MachineType::Uint8(), _, next_bytecode_offset_matcher); | 425 m.IsLoad(MachineType::Uint8(), _, next_bytecode_offset_matcher); |
297 if (kPointerSize == 8) { | 426 if (kPointerSize == 8) { |
298 target_bytecode_matcher = | 427 target_bytecode_matcher = |
299 IsChangeUint32ToUint64(target_bytecode_matcher); | 428 IsChangeUint32ToUint64(target_bytecode_matcher); |
300 } | 429 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 IsParameter( | 474 IsParameter( |
346 InterpreterDispatchDescriptor::kBytecodeOffsetParameter), | 475 InterpreterDispatchDescriptor::kBytecodeOffsetParameter), |
347 _, | 476 _, |
348 IsParameter(InterpreterDispatchDescriptor::kDispatchTableParameter), | 477 IsParameter(InterpreterDispatchDescriptor::kDispatchTableParameter), |
349 IsParameter(InterpreterDispatchDescriptor::kContextParameter), _, | 478 IsParameter(InterpreterDispatchDescriptor::kContextParameter), _, |
350 _)); | 479 _)); |
351 } | 480 } |
352 } | 481 } |
353 | 482 |
354 TARGET_TEST_F(InterpreterAssemblerTest, BytecodeOperand) { | 483 TARGET_TEST_F(InterpreterAssemblerTest, BytecodeOperand) { |
| 484 static const OperandScale kOperandScales[] = { |
| 485 OperandScale::k1X, OperandScale::k2X, OperandScale::k4X}; |
355 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { | 486 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { |
356 InterpreterAssemblerForTest m(this, bytecode); | 487 TRACED_FOREACH(interpreter::OperandScale, operand_scale, kOperandScales) { |
357 int number_of_operands = interpreter::Bytecodes::NumberOfOperands(bytecode); | 488 InterpreterAssemblerForTest m(this, bytecode, operand_scale); |
358 for (int i = 0; i < number_of_operands; i++) { | 489 int number_of_operands = |
359 int offset = interpreter::Bytecodes::GetOperandOffset(bytecode, i); | 490 interpreter::Bytecodes::NumberOfOperands(bytecode); |
360 switch (interpreter::Bytecodes::GetOperandType(bytecode, i)) { | 491 for (int i = 0; i < number_of_operands; i++) { |
361 case interpreter::OperandType::kRegCount8: | 492 int offset = interpreter::Bytecodes::GetOperandOffset(bytecode, i, |
362 EXPECT_THAT(m.BytecodeOperandCount(i), m.IsBytecodeOperand(offset)); | 493 operand_scale); |
363 break; | 494 OperandType operand_type = |
364 case interpreter::OperandType::kIdx8: | 495 interpreter::Bytecodes::GetOperandType(bytecode, i); |
365 EXPECT_THAT(m.BytecodeOperandIdx(i), m.IsBytecodeOperand(offset)); | 496 OperandSize operand_size = |
366 break; | 497 Bytecodes::SizeOfOperand(operand_type, operand_scale); |
367 case interpreter::OperandType::kImm8: | 498 switch (interpreter::Bytecodes::GetOperandType(bytecode, i)) { |
368 EXPECT_THAT(m.BytecodeOperandImm(i), | 499 case interpreter::OperandType::kRegCount: |
369 m.IsBytecodeOperandSignExtended(offset)); | 500 EXPECT_THAT(m.BytecodeOperandCount(i), |
370 break; | 501 m.IsUnsignedOperand(offset, operand_size)); |
371 case interpreter::OperandType::kMaybeReg8: | 502 break; |
372 case interpreter::OperandType::kReg8: | 503 case interpreter::OperandType::kFlag8: |
373 case interpreter::OperandType::kRegOut8: | 504 EXPECT_THAT(m.BytecodeOperandFlag(i), |
374 case interpreter::OperandType::kRegOutPair8: | 505 m.IsUnsignedOperand(offset, operand_size)); |
375 case interpreter::OperandType::kRegOutTriple8: | 506 break; |
376 case interpreter::OperandType::kRegPair8: | 507 case interpreter::OperandType::kIdx: |
377 EXPECT_THAT(m.BytecodeOperandReg(i), | 508 EXPECT_THAT(m.BytecodeOperandIdx(i), |
378 m.IsBytecodeOperandSignExtended(offset)); | 509 m.IsUnsignedOperand(offset, operand_size)); |
379 break; | 510 break; |
380 case interpreter::OperandType::kRegCount16: | 511 case interpreter::OperandType::kImm: { |
381 EXPECT_THAT(m.BytecodeOperandCount(i), | 512 EXPECT_THAT(m.BytecodeOperandImm(i), |
382 m.IsBytecodeOperandShort(offset)); | 513 m.IsSignedOperand(offset, operand_size)); |
383 break; | 514 break; |
384 case interpreter::OperandType::kIdx16: | 515 } |
385 EXPECT_THAT(m.BytecodeOperandIdx(i), | 516 case interpreter::OperandType::kMaybeReg: |
386 m.IsBytecodeOperandShort(offset)); | 517 case interpreter::OperandType::kReg: |
387 break; | 518 case interpreter::OperandType::kRegOut: |
388 case interpreter::OperandType::kMaybeReg16: | 519 case interpreter::OperandType::kRegOutPair: |
389 case interpreter::OperandType::kReg16: | 520 case interpreter::OperandType::kRegOutTriple: |
390 case interpreter::OperandType::kRegOut16: | 521 case interpreter::OperandType::kRegPair: |
391 case interpreter::OperandType::kRegOutPair16: | 522 EXPECT_THAT(m.BytecodeOperandReg(i), |
392 case interpreter::OperandType::kRegOutTriple16: | 523 m.IsSignedOperand(offset, operand_size)); |
393 case interpreter::OperandType::kRegPair16: | 524 break; |
394 EXPECT_THAT(m.BytecodeOperandReg(i), | 525 case interpreter::OperandType::kRuntimeId: |
395 m.IsBytecodeOperandShortSignExtended(offset)); | 526 EXPECT_THAT(m.BytecodeOperandRuntimeId(i), |
396 break; | 527 m.IsUnsignedOperand(offset, operand_size)); |
397 case interpreter::OperandType::kNone: | 528 break; |
398 UNREACHABLE(); | 529 case interpreter::OperandType::kNone: |
399 break; | 530 UNREACHABLE(); |
| 531 break; |
| 532 } |
400 } | 533 } |
401 } | 534 } |
402 } | 535 } |
403 } | 536 } |
404 | 537 |
405 TARGET_TEST_F(InterpreterAssemblerTest, GetSetAccumulator) { | 538 TARGET_TEST_F(InterpreterAssemblerTest, GetSetAccumulator) { |
406 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { | 539 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { |
407 InterpreterAssemblerForTest m(this, bytecode); | 540 InterpreterAssemblerForTest m(this, bytecode); |
408 // Should be incoming accumulator if not set. | 541 // Should be incoming accumulator if not set. |
409 EXPECT_THAT( | 542 EXPECT_THAT( |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
683 feedback_vector, | 816 feedback_vector, |
684 m.IsLoad(MachineType::AnyTagged(), load_shared_function_info_matcher, | 817 m.IsLoad(MachineType::AnyTagged(), load_shared_function_info_matcher, |
685 IsIntPtrConstant(SharedFunctionInfo::kFeedbackVectorOffset - | 818 IsIntPtrConstant(SharedFunctionInfo::kFeedbackVectorOffset - |
686 kHeapObjectTag))); | 819 kHeapObjectTag))); |
687 } | 820 } |
688 } | 821 } |
689 | 822 |
690 } // namespace interpreter | 823 } // namespace interpreter |
691 } // namespace internal | 824 } // namespace internal |
692 } // namespace v8 | 825 } // namespace v8 |
OLD | NEW |