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 <algorithm> | 5 #include <algorithm> |
6 | 6 |
7 #include "src/base/adapters.h" | 7 #include "src/base/adapters.h" |
8 #include "src/compiler/instruction-selector-impl.h" | 8 #include "src/compiler/instruction-selector-impl.h" |
9 #include "src/compiler/node-matchers.h" | 9 #include "src/compiler/node-matchers.h" |
10 #include "src/compiler/node-properties.h" | 10 #include "src/compiler/node-properties.h" |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 case MachineRepresentation::kWord32: | 224 case MachineRepresentation::kWord32: |
225 opcode = kX64Movl; | 225 opcode = kX64Movl; |
226 break; | 226 break; |
227 case MachineRepresentation::kTaggedSigned: // Fall through. | 227 case MachineRepresentation::kTaggedSigned: // Fall through. |
228 case MachineRepresentation::kTaggedPointer: // Fall through. | 228 case MachineRepresentation::kTaggedPointer: // Fall through. |
229 case MachineRepresentation::kTagged: // Fall through. | 229 case MachineRepresentation::kTagged: // Fall through. |
230 case MachineRepresentation::kWord64: | 230 case MachineRepresentation::kWord64: |
231 opcode = kX64Movq; | 231 opcode = kX64Movq; |
232 break; | 232 break; |
233 case MachineRepresentation::kSimd128: // Fall through. | 233 case MachineRepresentation::kSimd128: // Fall through. |
| 234 opcode = kX64Movdqu; |
| 235 break; |
234 case MachineRepresentation::kSimd1x4: // Fall through. | 236 case MachineRepresentation::kSimd1x4: // Fall through. |
235 case MachineRepresentation::kSimd1x8: // Fall through. | 237 case MachineRepresentation::kSimd1x8: // Fall through. |
236 case MachineRepresentation::kSimd1x16: // Fall through. | 238 case MachineRepresentation::kSimd1x16: // Fall through. |
237 case MachineRepresentation::kNone: | 239 case MachineRepresentation::kNone: |
238 UNREACHABLE(); | 240 UNREACHABLE(); |
239 break; | 241 break; |
240 } | 242 } |
241 return opcode; | 243 return opcode; |
242 } | 244 } |
243 | 245 |
(...skipping 15 matching lines...) Expand all Loading... |
259 case MachineRepresentation::kWord32: | 261 case MachineRepresentation::kWord32: |
260 return kX64Movl; | 262 return kX64Movl; |
261 break; | 263 break; |
262 case MachineRepresentation::kTaggedSigned: // Fall through. | 264 case MachineRepresentation::kTaggedSigned: // Fall through. |
263 case MachineRepresentation::kTaggedPointer: // Fall through. | 265 case MachineRepresentation::kTaggedPointer: // Fall through. |
264 case MachineRepresentation::kTagged: // Fall through. | 266 case MachineRepresentation::kTagged: // Fall through. |
265 case MachineRepresentation::kWord64: | 267 case MachineRepresentation::kWord64: |
266 return kX64Movq; | 268 return kX64Movq; |
267 break; | 269 break; |
268 case MachineRepresentation::kSimd128: // Fall through. | 270 case MachineRepresentation::kSimd128: // Fall through. |
| 271 return kX64Movdqu; |
| 272 break; |
269 case MachineRepresentation::kSimd1x4: // Fall through. | 273 case MachineRepresentation::kSimd1x4: // Fall through. |
270 case MachineRepresentation::kSimd1x8: // Fall through. | 274 case MachineRepresentation::kSimd1x8: // Fall through. |
271 case MachineRepresentation::kSimd1x16: // Fall through. | 275 case MachineRepresentation::kSimd1x16: // Fall through. |
272 case MachineRepresentation::kNone: | 276 case MachineRepresentation::kNone: |
273 UNREACHABLE(); | 277 UNREACHABLE(); |
274 return kArchNop; | 278 return kArchNop; |
275 } | 279 } |
276 UNREACHABLE(); | 280 UNREACHABLE(); |
277 return kArchNop; | 281 return kArchNop; |
278 } | 282 } |
(...skipping 2171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2450 V(8x16) | 2454 V(8x16) |
2451 | 2455 |
2452 #define SIMD_ZERO_OP_LIST(V) \ | 2456 #define SIMD_ZERO_OP_LIST(V) \ |
2453 V(S128Zero) \ | 2457 V(S128Zero) \ |
2454 V(S1x4Zero) \ | 2458 V(S1x4Zero) \ |
2455 V(S1x8Zero) \ | 2459 V(S1x8Zero) \ |
2456 V(S1x16Zero) | 2460 V(S1x16Zero) |
2457 | 2461 |
2458 #define SIMD_BINOP_LIST(V) \ | 2462 #define SIMD_BINOP_LIST(V) \ |
2459 V(I32x4Add) \ | 2463 V(I32x4Add) \ |
| 2464 V(I32x4AddHoriz) \ |
2460 V(I32x4Sub) \ | 2465 V(I32x4Sub) \ |
2461 V(I32x4Mul) \ | 2466 V(I32x4Mul) \ |
2462 V(I32x4MinS) \ | 2467 V(I32x4MinS) \ |
2463 V(I32x4MaxS) \ | 2468 V(I32x4MaxS) \ |
2464 V(I32x4Eq) \ | 2469 V(I32x4Eq) \ |
2465 V(I32x4Ne) \ | 2470 V(I32x4Ne) \ |
2466 V(I32x4MinU) \ | 2471 V(I32x4MinU) \ |
2467 V(I32x4MaxU) \ | 2472 V(I32x4MaxU) \ |
2468 V(I16x8Add) \ | 2473 V(I16x8Add) \ |
2469 V(I16x8AddSaturateS) \ | 2474 V(I16x8AddSaturateS) \ |
| 2475 V(I16x8AddHoriz) \ |
2470 V(I16x8Sub) \ | 2476 V(I16x8Sub) \ |
2471 V(I16x8SubSaturateS) \ | 2477 V(I16x8SubSaturateS) \ |
2472 V(I16x8Mul) \ | 2478 V(I16x8Mul) \ |
2473 V(I16x8MinS) \ | 2479 V(I16x8MinS) \ |
2474 V(I16x8MaxS) \ | 2480 V(I16x8MaxS) \ |
2475 V(I16x8Eq) \ | 2481 V(I16x8Eq) \ |
2476 V(I16x8Ne) \ | 2482 V(I16x8Ne) \ |
2477 V(I16x8AddSaturateU) \ | 2483 V(I16x8AddSaturateU) \ |
2478 V(I16x8SubSaturateU) \ | 2484 V(I16x8SubSaturateU) \ |
2479 V(I16x8MinU) \ | 2485 V(I16x8MinU) \ |
2480 V(I16x8MaxU) \ | 2486 V(I16x8MaxU) \ |
2481 V(I8x16Add) \ | 2487 V(I8x16Add) \ |
2482 V(I8x16AddSaturateS) \ | 2488 V(I8x16AddSaturateS) \ |
2483 V(I8x16Sub) \ | 2489 V(I8x16Sub) \ |
2484 V(I8x16SubSaturateS) \ | 2490 V(I8x16SubSaturateS) \ |
2485 V(I8x16MinS) \ | 2491 V(I8x16MinS) \ |
2486 V(I8x16MaxS) \ | 2492 V(I8x16MaxS) \ |
2487 V(I8x16Eq) \ | 2493 V(I8x16Eq) \ |
2488 V(I8x16Ne) \ | 2494 V(I8x16Ne) \ |
2489 V(I8x16AddSaturateU) \ | 2495 V(I8x16AddSaturateU) \ |
2490 V(I8x16SubSaturateU) \ | 2496 V(I8x16SubSaturateU) \ |
2491 V(I8x16MinU) \ | 2497 V(I8x16MinU) \ |
2492 V(I8x16MaxU) | 2498 V(I8x16MaxU) \ |
| 2499 V(S128And) \ |
| 2500 V(S128Or) \ |
| 2501 V(S128Xor) |
| 2502 |
| 2503 #define SIMD_UNOP_LIST(V) V(S128Not) |
2493 | 2504 |
2494 #define SIMD_SHIFT_OPCODES(V) \ | 2505 #define SIMD_SHIFT_OPCODES(V) \ |
2495 V(I32x4Shl) \ | 2506 V(I32x4Shl) \ |
2496 V(I32x4ShrS) \ | 2507 V(I32x4ShrS) \ |
2497 V(I32x4ShrU) \ | 2508 V(I32x4ShrU) \ |
2498 V(I16x8Shl) \ | 2509 V(I16x8Shl) \ |
2499 V(I16x8ShrS) \ | 2510 V(I16x8ShrS) \ |
2500 V(I16x8ShrU) | 2511 V(I16x8ShrU) |
2501 | 2512 |
2502 #define VISIT_SIMD_SPLAT(Type) \ | 2513 #define VISIT_SIMD_SPLAT(Type) \ |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2540 #define VISIT_SIMD_SHIFT(Opcode) \ | 2551 #define VISIT_SIMD_SHIFT(Opcode) \ |
2541 void InstructionSelector::Visit##Opcode(Node* node) { \ | 2552 void InstructionSelector::Visit##Opcode(Node* node) { \ |
2542 X64OperandGenerator g(this); \ | 2553 X64OperandGenerator g(this); \ |
2543 int32_t value = OpParameter<int32_t>(node); \ | 2554 int32_t value = OpParameter<int32_t>(node); \ |
2544 Emit(kX64##Opcode, g.DefineSameAsFirst(node), \ | 2555 Emit(kX64##Opcode, g.DefineSameAsFirst(node), \ |
2545 g.UseRegister(node->InputAt(0)), g.UseImmediate(value)); \ | 2556 g.UseRegister(node->InputAt(0)), g.UseImmediate(value)); \ |
2546 } | 2557 } |
2547 SIMD_SHIFT_OPCODES(VISIT_SIMD_SHIFT) | 2558 SIMD_SHIFT_OPCODES(VISIT_SIMD_SHIFT) |
2548 #undef VISIT_SIMD_SHIFT | 2559 #undef VISIT_SIMD_SHIFT |
2549 | 2560 |
| 2561 #define VISIT_SIMD_UNOP(Opcode) \ |
| 2562 void InstructionSelector::Visit##Opcode(Node* node) { \ |
| 2563 X64OperandGenerator g(this); \ |
| 2564 Emit(kX64##Opcode, g.DefineAsRegister(node), \ |
| 2565 g.UseRegister(node->InputAt(0))); \ |
| 2566 } |
| 2567 SIMD_UNOP_LIST(VISIT_SIMD_UNOP) |
| 2568 #undef VISIT_SIMD_UNOP |
| 2569 |
2550 #define VISIT_SIMD_BINOP(Opcode) \ | 2570 #define VISIT_SIMD_BINOP(Opcode) \ |
2551 void InstructionSelector::Visit##Opcode(Node* node) { \ | 2571 void InstructionSelector::Visit##Opcode(Node* node) { \ |
2552 X64OperandGenerator g(this); \ | 2572 X64OperandGenerator g(this); \ |
2553 Emit(kX64##Opcode, g.DefineSameAsFirst(node), \ | 2573 Emit(kX64##Opcode, g.DefineSameAsFirst(node), \ |
2554 g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1))); \ | 2574 g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1))); \ |
2555 } | 2575 } |
2556 SIMD_BINOP_LIST(VISIT_SIMD_BINOP) | 2576 SIMD_BINOP_LIST(VISIT_SIMD_BINOP) |
2557 #undef VISIT_SIMD_BINOP | 2577 #undef VISIT_SIMD_BINOP |
2558 | 2578 |
2559 #define SIMD_VISIT_SELECT_OP(format) \ | 2579 #define SIMD_VISIT_SELECT_OP(format) \ |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2600 // static | 2620 // static |
2601 MachineOperatorBuilder::AlignmentRequirements | 2621 MachineOperatorBuilder::AlignmentRequirements |
2602 InstructionSelector::AlignmentRequirements() { | 2622 InstructionSelector::AlignmentRequirements() { |
2603 return MachineOperatorBuilder::AlignmentRequirements:: | 2623 return MachineOperatorBuilder::AlignmentRequirements:: |
2604 FullUnalignedAccessSupport(); | 2624 FullUnalignedAccessSupport(); |
2605 } | 2625 } |
2606 | 2626 |
2607 } // namespace compiler | 2627 } // namespace compiler |
2608 } // namespace internal | 2628 } // namespace internal |
2609 } // namespace v8 | 2629 } // namespace v8 |
OLD | NEW |