OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/base/adapters.h" | 5 #include "src/base/adapters.h" |
6 #include "src/compiler/instruction-selector-impl.h" | 6 #include "src/compiler/instruction-selector-impl.h" |
7 #include "src/compiler/node-matchers.h" | 7 #include "src/compiler/node-matchers.h" |
8 #include "src/compiler/node-properties.h" | 8 #include "src/compiler/node-properties.h" |
9 | 9 |
10 namespace v8 { | 10 namespace v8 { |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 opcode = load_rep.IsSigned() ? kIA32Movsxwl : kIA32Movzxwl; | 240 opcode = load_rep.IsSigned() ? kIA32Movsxwl : kIA32Movzxwl; |
241 break; | 241 break; |
242 case MachineRepresentation::kTaggedSigned: // Fall through. | 242 case MachineRepresentation::kTaggedSigned: // Fall through. |
243 case MachineRepresentation::kTaggedPointer: // Fall through. | 243 case MachineRepresentation::kTaggedPointer: // Fall through. |
244 case MachineRepresentation::kTagged: // Fall through. | 244 case MachineRepresentation::kTagged: // Fall through. |
245 case MachineRepresentation::kWord32: | 245 case MachineRepresentation::kWord32: |
246 opcode = kIA32Movl; | 246 opcode = kIA32Movl; |
247 break; | 247 break; |
248 case MachineRepresentation::kWord64: // Fall through. | 248 case MachineRepresentation::kWord64: // Fall through. |
249 case MachineRepresentation::kSimd128: // Fall through. | 249 case MachineRepresentation::kSimd128: // Fall through. |
250 case MachineRepresentation::kSimd1x4: // Fall through. | |
251 case MachineRepresentation::kSimd1x8: // Fall through. | |
252 case MachineRepresentation::kSimd1x16: // Fall through. | |
253 case MachineRepresentation::kNone: | 250 case MachineRepresentation::kNone: |
254 UNREACHABLE(); | 251 UNREACHABLE(); |
255 return; | 252 return; |
256 } | 253 } |
257 | 254 |
258 IA32OperandGenerator g(this); | 255 IA32OperandGenerator g(this); |
259 InstructionOperand outputs[1]; | 256 InstructionOperand outputs[1]; |
260 outputs[0] = g.DefineAsRegister(node); | 257 outputs[0] = g.DefineAsRegister(node); |
261 InstructionOperand inputs[3]; | 258 InstructionOperand inputs[3]; |
262 size_t input_count = 0; | 259 size_t input_count = 0; |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 opcode = kIA32Movw; | 330 opcode = kIA32Movw; |
334 break; | 331 break; |
335 case MachineRepresentation::kTaggedSigned: // Fall through. | 332 case MachineRepresentation::kTaggedSigned: // Fall through. |
336 case MachineRepresentation::kTaggedPointer: // Fall through. | 333 case MachineRepresentation::kTaggedPointer: // Fall through. |
337 case MachineRepresentation::kTagged: // Fall through. | 334 case MachineRepresentation::kTagged: // Fall through. |
338 case MachineRepresentation::kWord32: | 335 case MachineRepresentation::kWord32: |
339 opcode = kIA32Movl; | 336 opcode = kIA32Movl; |
340 break; | 337 break; |
341 case MachineRepresentation::kWord64: // Fall through. | 338 case MachineRepresentation::kWord64: // Fall through. |
342 case MachineRepresentation::kSimd128: // Fall through. | 339 case MachineRepresentation::kSimd128: // Fall through. |
343 case MachineRepresentation::kSimd1x4: // Fall through. | |
344 case MachineRepresentation::kSimd1x8: // Fall through. | |
345 case MachineRepresentation::kSimd1x16: // Fall through. | |
346 case MachineRepresentation::kNone: | 340 case MachineRepresentation::kNone: |
347 UNREACHABLE(); | 341 UNREACHABLE(); |
348 return; | 342 return; |
349 } | 343 } |
350 | 344 |
351 InstructionOperand val; | 345 InstructionOperand val; |
352 if (g.CanBeImmediate(value)) { | 346 if (g.CanBeImmediate(value)) { |
353 val = g.UseImmediate(value); | 347 val = g.UseImmediate(value); |
354 } else if (rep == MachineRepresentation::kWord8 || | 348 } else if (rep == MachineRepresentation::kWord8 || |
355 rep == MachineRepresentation::kBit) { | 349 rep == MachineRepresentation::kBit) { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 break; | 397 break; |
404 case MachineRepresentation::kFloat64: | 398 case MachineRepresentation::kFloat64: |
405 opcode = kCheckedLoadFloat64; | 399 opcode = kCheckedLoadFloat64; |
406 break; | 400 break; |
407 case MachineRepresentation::kBit: // Fall through. | 401 case MachineRepresentation::kBit: // Fall through. |
408 case MachineRepresentation::kTaggedSigned: // Fall through. | 402 case MachineRepresentation::kTaggedSigned: // Fall through. |
409 case MachineRepresentation::kTaggedPointer: // Fall through. | 403 case MachineRepresentation::kTaggedPointer: // Fall through. |
410 case MachineRepresentation::kTagged: // Fall through. | 404 case MachineRepresentation::kTagged: // Fall through. |
411 case MachineRepresentation::kWord64: // Fall through. | 405 case MachineRepresentation::kWord64: // Fall through. |
412 case MachineRepresentation::kSimd128: // Fall through. | 406 case MachineRepresentation::kSimd128: // Fall through. |
413 case MachineRepresentation::kSimd1x4: // Fall through. | |
414 case MachineRepresentation::kSimd1x8: // Fall through. | |
415 case MachineRepresentation::kSimd1x16: // Fall through. | |
416 case MachineRepresentation::kNone: | 407 case MachineRepresentation::kNone: |
417 UNREACHABLE(); | 408 UNREACHABLE(); |
418 return; | 409 return; |
419 } | 410 } |
420 if (offset->opcode() == IrOpcode::kInt32Add && CanCover(node, offset)) { | 411 if (offset->opcode() == IrOpcode::kInt32Add && CanCover(node, offset)) { |
421 Int32BinopMatcher moffset(offset); | 412 Int32BinopMatcher moffset(offset); |
422 InstructionOperand buffer_operand = g.CanBeImmediate(buffer) | 413 InstructionOperand buffer_operand = g.CanBeImmediate(buffer) |
423 ? g.UseImmediate(buffer) | 414 ? g.UseImmediate(buffer) |
424 : g.UseRegister(buffer); | 415 : g.UseRegister(buffer); |
425 Int32Matcher mlength(length); | 416 Int32Matcher mlength(length); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 break; | 470 break; |
480 case MachineRepresentation::kFloat64: | 471 case MachineRepresentation::kFloat64: |
481 opcode = kCheckedStoreFloat64; | 472 opcode = kCheckedStoreFloat64; |
482 break; | 473 break; |
483 case MachineRepresentation::kBit: // Fall through. | 474 case MachineRepresentation::kBit: // Fall through. |
484 case MachineRepresentation::kTaggedSigned: // Fall through. | 475 case MachineRepresentation::kTaggedSigned: // Fall through. |
485 case MachineRepresentation::kTaggedPointer: // Fall through. | 476 case MachineRepresentation::kTaggedPointer: // Fall through. |
486 case MachineRepresentation::kTagged: // Fall through. | 477 case MachineRepresentation::kTagged: // Fall through. |
487 case MachineRepresentation::kWord64: // Fall through. | 478 case MachineRepresentation::kWord64: // Fall through. |
488 case MachineRepresentation::kSimd128: // Fall through. | 479 case MachineRepresentation::kSimd128: // Fall through. |
489 case MachineRepresentation::kSimd1x4: // Fall through. | |
490 case MachineRepresentation::kSimd1x8: // Fall through. | |
491 case MachineRepresentation::kSimd1x16: // Fall through. | |
492 case MachineRepresentation::kNone: | 480 case MachineRepresentation::kNone: |
493 UNREACHABLE(); | 481 UNREACHABLE(); |
494 return; | 482 return; |
495 } | 483 } |
496 InstructionOperand value_operand = | 484 InstructionOperand value_operand = |
497 g.CanBeImmediate(value) ? g.UseImmediate(value) | 485 g.CanBeImmediate(value) ? g.UseImmediate(value) |
498 : ((rep == MachineRepresentation::kWord8 || | 486 : ((rep == MachineRepresentation::kWord8 || |
499 rep == MachineRepresentation::kBit) | 487 rep == MachineRepresentation::kBit) |
500 ? g.UseByteRegister(value) | 488 ? g.UseByteRegister(value) |
501 : g.UseRegister(value)); | 489 : g.UseRegister(value)); |
(...skipping 1455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1957 // static | 1945 // static |
1958 MachineOperatorBuilder::AlignmentRequirements | 1946 MachineOperatorBuilder::AlignmentRequirements |
1959 InstructionSelector::AlignmentRequirements() { | 1947 InstructionSelector::AlignmentRequirements() { |
1960 return MachineOperatorBuilder::AlignmentRequirements:: | 1948 return MachineOperatorBuilder::AlignmentRequirements:: |
1961 FullUnalignedAccessSupport(); | 1949 FullUnalignedAccessSupport(); |
1962 } | 1950 } |
1963 | 1951 |
1964 } // namespace compiler | 1952 } // namespace compiler |
1965 } // namespace internal | 1953 } // namespace internal |
1966 } // namespace v8 | 1954 } // namespace v8 |
OLD | NEW |