Index: src/compiler/wasm-compiler.cc |
diff --git a/src/compiler/wasm-compiler.cc b/src/compiler/wasm-compiler.cc |
index f1f0d6e190967c1751a736ce8e6a6f03af81d3b4..d0ed5406853f35f7c1aec41e09f18d17833ec5f5 100644 |
--- a/src/compiler/wasm-compiler.cc |
+++ b/src/compiler/wasm-compiler.cc |
@@ -3423,6 +3423,12 @@ Node* WasmGraphBuilder::SimdOp(wasm::WasmOpcode opcode, |
case wasm::kExprI32x4GeS: |
return graph()->NewNode(jsgraph()->machine()->Int32x4GreaterThanOrEqual(), |
inputs[0], inputs[1]); |
+ case wasm::kExprI32x4MinU: |
+ return graph()->NewNode(jsgraph()->machine()->Uint32x4Min(), inputs[0], |
+ inputs[1]); |
+ case wasm::kExprI32x4MaxU: |
+ return graph()->NewNode(jsgraph()->machine()->Uint32x4Max(), inputs[0], |
+ inputs[1]); |
case wasm::kExprI32x4LtU: |
return graph()->NewNode(jsgraph()->machine()->Uint32x4GreaterThan(), |
inputs[1], inputs[0]); |
@@ -3449,9 +3455,15 @@ Node* WasmGraphBuilder::SimdOp(wasm::WasmOpcode opcode, |
case wasm::kExprI16x8Add: |
return graph()->NewNode(jsgraph()->machine()->Int16x8Add(), inputs[0], |
inputs[1]); |
+ case wasm::kExprI16x8AddSaturateS: |
+ return graph()->NewNode(jsgraph()->machine()->Int16x8AddSaturate(), |
+ inputs[0], inputs[1]); |
case wasm::kExprI16x8Sub: |
return graph()->NewNode(jsgraph()->machine()->Int16x8Sub(), inputs[0], |
inputs[1]); |
+ case wasm::kExprI16x8SubSaturateS: |
+ return graph()->NewNode(jsgraph()->machine()->Int16x8SubSaturate(), |
+ inputs[0], inputs[1]); |
case wasm::kExprI16x8Mul: |
return graph()->NewNode(jsgraph()->machine()->Int16x8Mul(), inputs[0], |
inputs[1]); |
@@ -3479,6 +3491,18 @@ Node* WasmGraphBuilder::SimdOp(wasm::WasmOpcode opcode, |
case wasm::kExprI16x8GeS: |
return graph()->NewNode(jsgraph()->machine()->Int16x8GreaterThanOrEqual(), |
inputs[0], inputs[1]); |
+ case wasm::kExprI16x8AddSaturateU: |
+ return graph()->NewNode(jsgraph()->machine()->Uint16x8AddSaturate(), |
+ inputs[0], inputs[1]); |
+ case wasm::kExprI16x8SubSaturateU: |
+ return graph()->NewNode(jsgraph()->machine()->Uint16x8SubSaturate(), |
+ inputs[0], inputs[1]); |
+ case wasm::kExprI16x8MinU: |
+ return graph()->NewNode(jsgraph()->machine()->Uint16x8Min(), inputs[0], |
+ inputs[1]); |
+ case wasm::kExprI16x8MaxU: |
+ return graph()->NewNode(jsgraph()->machine()->Uint16x8Max(), inputs[0], |
+ inputs[1]); |
case wasm::kExprI16x8LtU: |
return graph()->NewNode(jsgraph()->machine()->Uint16x8GreaterThan(), |
inputs[1], inputs[0]); |
@@ -3504,9 +3528,15 @@ Node* WasmGraphBuilder::SimdOp(wasm::WasmOpcode opcode, |
case wasm::kExprI8x16Add: |
return graph()->NewNode(jsgraph()->machine()->Int8x16Add(), inputs[0], |
inputs[1]); |
+ case wasm::kExprI8x16AddSaturateS: |
+ return graph()->NewNode(jsgraph()->machine()->Int8x16AddSaturate(), |
+ inputs[0], inputs[1]); |
case wasm::kExprI8x16Sub: |
return graph()->NewNode(jsgraph()->machine()->Int8x16Sub(), inputs[0], |
inputs[1]); |
+ case wasm::kExprI8x16SubSaturateS: |
+ return graph()->NewNode(jsgraph()->machine()->Int8x16SubSaturate(), |
+ inputs[0], inputs[1]); |
case wasm::kExprI8x16Mul: |
return graph()->NewNode(jsgraph()->machine()->Int8x16Mul(), inputs[0], |
inputs[1]); |
@@ -3534,6 +3564,18 @@ Node* WasmGraphBuilder::SimdOp(wasm::WasmOpcode opcode, |
case wasm::kExprI8x16GeS: |
return graph()->NewNode(jsgraph()->machine()->Int8x16GreaterThanOrEqual(), |
inputs[0], inputs[1]); |
+ case wasm::kExprI8x16AddSaturateU: |
+ return graph()->NewNode(jsgraph()->machine()->Uint8x16AddSaturate(), |
+ inputs[0], inputs[1]); |
+ case wasm::kExprI8x16SubSaturateU: |
+ return graph()->NewNode(jsgraph()->machine()->Uint8x16SubSaturate(), |
+ inputs[0], inputs[1]); |
+ case wasm::kExprI8x16MinU: |
+ return graph()->NewNode(jsgraph()->machine()->Uint8x16Min(), inputs[0], |
+ inputs[1]); |
+ case wasm::kExprI8x16MaxU: |
+ return graph()->NewNode(jsgraph()->machine()->Uint8x16Max(), inputs[0], |
+ inputs[1]); |
case wasm::kExprI8x16LtU: |
return graph()->NewNode(jsgraph()->machine()->Uint8x16GreaterThan(), |
inputs[1], inputs[0]); |
@@ -3586,6 +3628,42 @@ Node* WasmGraphBuilder::SimdLaneOp(wasm::WasmOpcode opcode, uint8_t lane, |
} |
} |
+Node* WasmGraphBuilder::SimdShiftOp(wasm::WasmOpcode opcode, uint8_t shift, |
+ const NodeVector& inputs) { |
+ has_simd_ = true; |
+ switch (opcode) { |
+ case wasm::kExprI32x4Shl: |
+ return graph()->NewNode( |
+ jsgraph()->machine()->Int32x4ShiftLeftByScalar(shift), inputs[0]); |
+ case wasm::kExprI32x4ShrS: |
+ return graph()->NewNode( |
+ jsgraph()->machine()->Int32x4ShiftRightByScalar(shift), inputs[0]); |
+ case wasm::kExprI32x4ShrU: |
+ return graph()->NewNode( |
+ jsgraph()->machine()->Uint32x4ShiftRightByScalar(shift), inputs[0]); |
+ case wasm::kExprI16x8Shl: |
+ return graph()->NewNode( |
+ jsgraph()->machine()->Int16x8ShiftLeftByScalar(shift), inputs[0]); |
+ case wasm::kExprI16x8ShrS: |
+ return graph()->NewNode( |
+ jsgraph()->machine()->Int16x8ShiftRightByScalar(shift), inputs[0]); |
+ case wasm::kExprI16x8ShrU: |
+ return graph()->NewNode( |
+ jsgraph()->machine()->Uint16x8ShiftRightByScalar(shift), inputs[0]); |
+ case wasm::kExprI8x16Shl: |
+ return graph()->NewNode( |
+ jsgraph()->machine()->Int8x16ShiftLeftByScalar(shift), inputs[0]); |
+ case wasm::kExprI8x16ShrS: |
+ return graph()->NewNode( |
+ jsgraph()->machine()->Int8x16ShiftRightByScalar(shift), inputs[0]); |
+ case wasm::kExprI8x16ShrU: |
+ return graph()->NewNode( |
+ jsgraph()->machine()->Uint8x16ShiftRightByScalar(shift), inputs[0]); |
+ default: |
+ return graph()->NewNode(UnsupportedOpcode(opcode), nullptr); |
+ } |
+} |
+ |
static void RecordFunctionCompilation(CodeEventListener::LogEventsAndTags tag, |
Isolate* isolate, Handle<Code> code, |
const char* message, uint32_t index, |