| 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 |