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 "src/compiler/wasm-compiler.h" | 5 #include "src/compiler/wasm-compiler.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "src/assembler-inl.h" | 9 #include "src/assembler-inl.h" |
10 #include "src/base/platform/elapsed-timer.h" | 10 #include "src/base/platform/elapsed-timer.h" |
(...skipping 3460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3471 return graph()->NewNode(jsgraph()->machine()->S128And(), inputs[0], | 3471 return graph()->NewNode(jsgraph()->machine()->S128And(), inputs[0], |
3472 inputs[1]); | 3472 inputs[1]); |
3473 case wasm::kExprS128Or: | 3473 case wasm::kExprS128Or: |
3474 return graph()->NewNode(jsgraph()->machine()->S128Or(), inputs[0], | 3474 return graph()->NewNode(jsgraph()->machine()->S128Or(), inputs[0], |
3475 inputs[1]); | 3475 inputs[1]); |
3476 case wasm::kExprS128Xor: | 3476 case wasm::kExprS128Xor: |
3477 return graph()->NewNode(jsgraph()->machine()->S128Xor(), inputs[0], | 3477 return graph()->NewNode(jsgraph()->machine()->S128Xor(), inputs[0], |
3478 inputs[1]); | 3478 inputs[1]); |
3479 case wasm::kExprS128Not: | 3479 case wasm::kExprS128Not: |
3480 return graph()->NewNode(jsgraph()->machine()->S128Not(), inputs[0]); | 3480 return graph()->NewNode(jsgraph()->machine()->S128Not(), inputs[0]); |
3481 case wasm::kExprS32x4ZipLeft: | |
3482 return graph()->NewNode(jsgraph()->machine()->S32x4ZipLeft(), inputs[0], | |
3483 inputs[1]); | |
3484 case wasm::kExprS32x4ZipRight: | |
3485 return graph()->NewNode(jsgraph()->machine()->S32x4ZipRight(), inputs[0], | |
3486 inputs[1]); | |
3487 case wasm::kExprS32x4UnzipLeft: | |
3488 return graph()->NewNode(jsgraph()->machine()->S32x4UnzipLeft(), inputs[0], | |
3489 inputs[1]); | |
3490 case wasm::kExprS32x4UnzipRight: | |
3491 return graph()->NewNode(jsgraph()->machine()->S32x4UnzipRight(), | |
3492 inputs[0], inputs[1]); | |
3493 case wasm::kExprS32x4TransposeLeft: | |
3494 return graph()->NewNode(jsgraph()->machine()->S32x4TransposeLeft(), | |
3495 inputs[0], inputs[1]); | |
3496 case wasm::kExprS32x4TransposeRight: | |
3497 return graph()->NewNode(jsgraph()->machine()->S32x4TransposeRight(), | |
3498 inputs[0], inputs[1]); | |
3499 case wasm::kExprS32x4Select: | 3481 case wasm::kExprS32x4Select: |
3500 return graph()->NewNode(jsgraph()->machine()->S32x4Select(), inputs[0], | 3482 return graph()->NewNode(jsgraph()->machine()->S32x4Select(), inputs[0], |
3501 inputs[1], inputs[2]); | 3483 inputs[1], inputs[2]); |
3502 case wasm::kExprS16x8ZipLeft: | |
3503 return graph()->NewNode(jsgraph()->machine()->S16x8ZipLeft(), inputs[0], | |
3504 inputs[1]); | |
3505 case wasm::kExprS16x8ZipRight: | |
3506 return graph()->NewNode(jsgraph()->machine()->S16x8ZipRight(), inputs[0], | |
3507 inputs[1]); | |
3508 case wasm::kExprS16x8UnzipLeft: | |
3509 return graph()->NewNode(jsgraph()->machine()->S16x8UnzipLeft(), inputs[0], | |
3510 inputs[1]); | |
3511 case wasm::kExprS16x8UnzipRight: | |
3512 return graph()->NewNode(jsgraph()->machine()->S16x8UnzipRight(), | |
3513 inputs[0], inputs[1]); | |
3514 case wasm::kExprS16x8TransposeLeft: | |
3515 return graph()->NewNode(jsgraph()->machine()->S16x8TransposeLeft(), | |
3516 inputs[0], inputs[1]); | |
3517 case wasm::kExprS16x8TransposeRight: | |
3518 return graph()->NewNode(jsgraph()->machine()->S16x8TransposeRight(), | |
3519 inputs[0], inputs[1]); | |
3520 case wasm::kExprS16x8Select: | 3484 case wasm::kExprS16x8Select: |
3521 return graph()->NewNode(jsgraph()->machine()->S16x8Select(), inputs[0], | 3485 return graph()->NewNode(jsgraph()->machine()->S16x8Select(), inputs[0], |
3522 inputs[1], inputs[2]); | 3486 inputs[1], inputs[2]); |
3523 case wasm::kExprS8x16ZipLeft: | |
3524 return graph()->NewNode(jsgraph()->machine()->S8x16ZipLeft(), inputs[0], | |
3525 inputs[1]); | |
3526 case wasm::kExprS8x16ZipRight: | |
3527 return graph()->NewNode(jsgraph()->machine()->S8x16ZipRight(), inputs[0], | |
3528 inputs[1]); | |
3529 case wasm::kExprS8x16UnzipLeft: | |
3530 return graph()->NewNode(jsgraph()->machine()->S8x16UnzipLeft(), inputs[0], | |
3531 inputs[1]); | |
3532 case wasm::kExprS8x16UnzipRight: | |
3533 return graph()->NewNode(jsgraph()->machine()->S8x16UnzipRight(), | |
3534 inputs[0], inputs[1]); | |
3535 case wasm::kExprS8x16TransposeLeft: | |
3536 return graph()->NewNode(jsgraph()->machine()->S8x16TransposeLeft(), | |
3537 inputs[0], inputs[1]); | |
3538 case wasm::kExprS8x16TransposeRight: | |
3539 return graph()->NewNode(jsgraph()->machine()->S8x16TransposeRight(), | |
3540 inputs[0], inputs[1]); | |
3541 case wasm::kExprS8x16Select: | 3487 case wasm::kExprS8x16Select: |
3542 return graph()->NewNode(jsgraph()->machine()->S8x16Select(), inputs[0], | 3488 return graph()->NewNode(jsgraph()->machine()->S8x16Select(), inputs[0], |
3543 inputs[1], inputs[2]); | 3489 inputs[1], inputs[2]); |
3544 case wasm::kExprS32x2Reverse: | |
3545 return graph()->NewNode(jsgraph()->machine()->S32x2Reverse(), inputs[0]); | |
3546 case wasm::kExprS16x4Reverse: | |
3547 return graph()->NewNode(jsgraph()->machine()->S16x4Reverse(), inputs[0]); | |
3548 case wasm::kExprS16x2Reverse: | |
3549 return graph()->NewNode(jsgraph()->machine()->S16x2Reverse(), inputs[0]); | |
3550 case wasm::kExprS8x8Reverse: | |
3551 return graph()->NewNode(jsgraph()->machine()->S8x8Reverse(), inputs[0]); | |
3552 case wasm::kExprS8x4Reverse: | |
3553 return graph()->NewNode(jsgraph()->machine()->S8x4Reverse(), inputs[0]); | |
3554 case wasm::kExprS8x2Reverse: | |
3555 return graph()->NewNode(jsgraph()->machine()->S8x2Reverse(), inputs[0]); | |
3556 case wasm::kExprS1x4And: | 3490 case wasm::kExprS1x4And: |
3557 return graph()->NewNode(jsgraph()->machine()->S1x4And(), inputs[0], | 3491 return graph()->NewNode(jsgraph()->machine()->S1x4And(), inputs[0], |
3558 inputs[1]); | 3492 inputs[1]); |
3559 case wasm::kExprS1x4Or: | 3493 case wasm::kExprS1x4Or: |
3560 return graph()->NewNode(jsgraph()->machine()->S1x4Or(), inputs[0], | 3494 return graph()->NewNode(jsgraph()->machine()->S1x4Or(), inputs[0], |
3561 inputs[1]); | 3495 inputs[1]); |
3562 case wasm::kExprS1x4Xor: | 3496 case wasm::kExprS1x4Xor: |
3563 return graph()->NewNode(jsgraph()->machine()->S1x4Xor(), inputs[0], | 3497 return graph()->NewNode(jsgraph()->machine()->S1x4Xor(), inputs[0], |
3564 inputs[1]); | 3498 inputs[1]); |
3565 case wasm::kExprS1x4Not: | 3499 case wasm::kExprS1x4Not: |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3662 return graph()->NewNode(jsgraph()->machine()->I8x16ShrS(shift), | 3596 return graph()->NewNode(jsgraph()->machine()->I8x16ShrS(shift), |
3663 inputs[0]); | 3597 inputs[0]); |
3664 case wasm::kExprI8x16ShrU: | 3598 case wasm::kExprI8x16ShrU: |
3665 return graph()->NewNode(jsgraph()->machine()->I8x16ShrU(shift), | 3599 return graph()->NewNode(jsgraph()->machine()->I8x16ShrU(shift), |
3666 inputs[0]); | 3600 inputs[0]); |
3667 default: | 3601 default: |
3668 return graph()->NewNode(UnsupportedOpcode(opcode), nullptr); | 3602 return graph()->NewNode(UnsupportedOpcode(opcode), nullptr); |
3669 } | 3603 } |
3670 } | 3604 } |
3671 | 3605 |
3672 Node* WasmGraphBuilder::SimdConcatOp(uint8_t bytes, const NodeVector& inputs) { | 3606 Node* WasmGraphBuilder::SimdShuffleOp(uint8_t shuffle[16], unsigned lanes, |
| 3607 const NodeVector& inputs) { |
3673 has_simd_ = true; | 3608 has_simd_ = true; |
3674 return graph()->NewNode(jsgraph()->machine()->S8x16Concat(bytes), inputs[0], | 3609 switch (lanes) { |
3675 inputs[1]); | 3610 case 4: |
| 3611 return graph()->NewNode(jsgraph()->machine()->S32x4Shuffle(shuffle), |
| 3612 inputs[0], inputs[1]); |
| 3613 case 8: |
| 3614 return graph()->NewNode(jsgraph()->machine()->S16x8Shuffle(shuffle), |
| 3615 inputs[0], inputs[1]); |
| 3616 case 16: |
| 3617 return graph()->NewNode(jsgraph()->machine()->S8x16Shuffle(shuffle), |
| 3618 inputs[0], inputs[1]); |
| 3619 default: |
| 3620 UNREACHABLE(); |
| 3621 return nullptr; |
| 3622 } |
3676 } | 3623 } |
3677 | 3624 |
3678 static void RecordFunctionCompilation(CodeEventListener::LogEventsAndTags tag, | 3625 static void RecordFunctionCompilation(CodeEventListener::LogEventsAndTags tag, |
3679 Isolate* isolate, Handle<Code> code, | 3626 Isolate* isolate, Handle<Code> code, |
3680 const char* message, uint32_t index, | 3627 const char* message, uint32_t index, |
3681 const wasm::WasmName& module_name, | 3628 const wasm::WasmName& module_name, |
3682 const wasm::WasmName& func_name) { | 3629 const wasm::WasmName& func_name) { |
3683 DCHECK(isolate->logger()->is_logging_code_events() || | 3630 DCHECK(isolate->logger()->is_logging_code_events() || |
3684 isolate->is_profiling()); | 3631 isolate->is_profiling()); |
3685 | 3632 |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4142 wasm::ModuleBytesEnv* module_env, const wasm::WasmFunction* function) { | 4089 wasm::ModuleBytesEnv* module_env, const wasm::WasmFunction* function) { |
4143 WasmCompilationUnit unit(isolate, module_env, function); | 4090 WasmCompilationUnit unit(isolate, module_env, function); |
4144 unit.InitializeHandles(); | 4091 unit.InitializeHandles(); |
4145 unit.ExecuteCompilation(); | 4092 unit.ExecuteCompilation(); |
4146 return unit.FinishCompilation(thrower); | 4093 return unit.FinishCompilation(thrower); |
4147 } | 4094 } |
4148 | 4095 |
4149 } // namespace compiler | 4096 } // namespace compiler |
4150 } // namespace internal | 4097 } // namespace internal |
4151 } // namespace v8 | 4098 } // namespace v8 |
OLD | NEW |