| Index: src/compiler/wasm-compiler.cc
|
| diff --git a/src/compiler/wasm-compiler.cc b/src/compiler/wasm-compiler.cc
|
| index 1bc86ed8f976af4208179ce38fde62f0c3cff74d..96aa342f05621021f13688ce18733f5a8c6cb0d4 100644
|
| --- a/src/compiler/wasm-compiler.cc
|
| +++ b/src/compiler/wasm-compiler.cc
|
| @@ -3384,21 +3384,166 @@ Node* WasmGraphBuilder::SimdOp(wasm::WasmOpcode opcode,
|
| case wasm::kExprI32x4UConvertF32x4:
|
| return graph()->NewNode(jsgraph()->machine()->Uint32x4FromFloat32x4(),
|
| inputs[0]);
|
| + case wasm::kExprI32x4Neg:
|
| + return graph()->NewNode(jsgraph()->machine()->Int32x4Neg(), inputs[0]);
|
| case wasm::kExprI32x4Add:
|
| return graph()->NewNode(jsgraph()->machine()->Int32x4Add(), inputs[0],
|
| inputs[1]);
|
| case wasm::kExprI32x4Sub:
|
| return graph()->NewNode(jsgraph()->machine()->Int32x4Sub(), inputs[0],
|
| inputs[1]);
|
| + case wasm::kExprI32x4Mul:
|
| + return graph()->NewNode(jsgraph()->machine()->Int32x4Mul(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI32x4MinS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int32x4Min(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI32x4MaxS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int32x4Max(), inputs[0],
|
| + inputs[1]);
|
| case wasm::kExprI32x4Eq:
|
| return graph()->NewNode(jsgraph()->machine()->Int32x4Equal(), inputs[0],
|
| inputs[1]);
|
| case wasm::kExprI32x4Ne:
|
| return graph()->NewNode(jsgraph()->machine()->Int32x4NotEqual(),
|
| inputs[0], inputs[1]);
|
| + case wasm::kExprI32x4LtS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int32x4GreaterThan(),
|
| + inputs[1], inputs[0]);
|
| + case wasm::kExprI32x4LeS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int32x4GreaterThanOrEqual(),
|
| + inputs[1], inputs[0]);
|
| + case wasm::kExprI32x4GtS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int32x4GreaterThan(),
|
| + inputs[0], inputs[1]);
|
| + case wasm::kExprI32x4GeS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int32x4GreaterThanOrEqual(),
|
| + inputs[0], inputs[1]);
|
| + case wasm::kExprI32x4LtU:
|
| + return graph()->NewNode(jsgraph()->machine()->Uint32x4GreaterThan(),
|
| + inputs[1], inputs[0]);
|
| + case wasm::kExprI32x4LeU:
|
| + return graph()->NewNode(
|
| + jsgraph()->machine()->Uint32x4GreaterThanOrEqual(), inputs[1],
|
| + inputs[0]);
|
| + case wasm::kExprI32x4GtU:
|
| + return graph()->NewNode(jsgraph()->machine()->Uint32x4GreaterThan(),
|
| + inputs[0], inputs[1]);
|
| + case wasm::kExprI32x4GeU:
|
| + return graph()->NewNode(
|
| + jsgraph()->machine()->Uint32x4GreaterThanOrEqual(), inputs[0],
|
| + inputs[1]);
|
| case wasm::kExprS32x4Select:
|
| return graph()->NewNode(jsgraph()->machine()->Simd32x4Select(), inputs[0],
|
| inputs[1], inputs[2]);
|
| + case wasm::kExprI16x8Splat:
|
| + return graph()->NewNode(jsgraph()->machine()->CreateInt16x8(), inputs[0],
|
| + inputs[0], inputs[0], inputs[0], inputs[0],
|
| + inputs[0], inputs[0], inputs[0]);
|
| + case wasm::kExprI16x8Neg:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8Neg(), inputs[0]);
|
| + case wasm::kExprI16x8Add:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8Add(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI16x8Sub:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8Sub(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI16x8Mul:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8Mul(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI16x8MinS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8Min(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI16x8MaxS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8Max(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI16x8Eq:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8Equal(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI16x8Ne:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8NotEqual(),
|
| + inputs[0], inputs[1]);
|
| + case wasm::kExprI16x8LtS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8GreaterThan(),
|
| + inputs[1], inputs[0]);
|
| + case wasm::kExprI16x8LeS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8GreaterThanOrEqual(),
|
| + inputs[1], inputs[0]);
|
| + case wasm::kExprI16x8GtS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8GreaterThan(),
|
| + inputs[0], inputs[1]);
|
| + case wasm::kExprI16x8GeS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8GreaterThanOrEqual(),
|
| + inputs[0], inputs[1]);
|
| + case wasm::kExprI16x8LtU:
|
| + return graph()->NewNode(jsgraph()->machine()->Uint16x8GreaterThan(),
|
| + inputs[1], inputs[0]);
|
| + case wasm::kExprI16x8LeU:
|
| + return graph()->NewNode(
|
| + jsgraph()->machine()->Uint16x8GreaterThanOrEqual(), inputs[1],
|
| + inputs[0]);
|
| + case wasm::kExprI16x8GtU:
|
| + return graph()->NewNode(jsgraph()->machine()->Uint16x8GreaterThan(),
|
| + inputs[0], inputs[1]);
|
| + case wasm::kExprI16x8GeU:
|
| + return graph()->NewNode(
|
| + jsgraph()->machine()->Uint16x8GreaterThanOrEqual(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI8x16Splat:
|
| + return graph()->NewNode(jsgraph()->machine()->CreateInt8x16(), inputs[0],
|
| + inputs[0], inputs[0], inputs[0], inputs[0],
|
| + inputs[0], inputs[0], inputs[0], inputs[0],
|
| + inputs[0], inputs[0], inputs[0], inputs[0],
|
| + inputs[0], inputs[0], inputs[0]);
|
| + case wasm::kExprI8x16Neg:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16Neg(), inputs[0]);
|
| + case wasm::kExprI8x16Add:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16Add(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI8x16Sub:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16Sub(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI8x16Mul:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16Mul(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI8x16MinS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16Min(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI8x16MaxS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16Max(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI8x16Eq:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16Equal(), inputs[0],
|
| + inputs[1]);
|
| + case wasm::kExprI8x16Ne:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16NotEqual(),
|
| + inputs[0], inputs[1]);
|
| + case wasm::kExprI8x16LtS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16GreaterThan(),
|
| + inputs[1], inputs[0]);
|
| + case wasm::kExprI8x16LeS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16GreaterThanOrEqual(),
|
| + inputs[1], inputs[0]);
|
| + case wasm::kExprI8x16GtS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16GreaterThan(),
|
| + inputs[0], inputs[1]);
|
| + case wasm::kExprI8x16GeS:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16GreaterThanOrEqual(),
|
| + inputs[0], inputs[1]);
|
| + case wasm::kExprI8x16LtU:
|
| + return graph()->NewNode(jsgraph()->machine()->Uint8x16GreaterThan(),
|
| + inputs[1], inputs[0]);
|
| + case wasm::kExprI8x16LeU:
|
| + return graph()->NewNode(
|
| + jsgraph()->machine()->Uint8x16GreaterThanOrEqual(), inputs[1],
|
| + inputs[0]);
|
| + case wasm::kExprI8x16GtU:
|
| + return graph()->NewNode(jsgraph()->machine()->Uint8x16GreaterThan(),
|
| + inputs[0], inputs[1]);
|
| + case wasm::kExprI8x16GeU:
|
| + return graph()->NewNode(
|
| + jsgraph()->machine()->Uint8x16GreaterThanOrEqual(), inputs[0],
|
| + inputs[1]);
|
| default:
|
| return graph()->NewNode(UnsupportedOpcode(opcode), nullptr);
|
| }
|
| @@ -3408,17 +3553,29 @@ Node* WasmGraphBuilder::SimdLaneOp(wasm::WasmOpcode opcode, uint8_t lane,
|
| const NodeVector& inputs) {
|
| has_simd_ = true;
|
| switch (opcode) {
|
| + case wasm::kExprF32x4ExtractLane:
|
| + return graph()->NewNode(jsgraph()->machine()->Float32x4ExtractLane(lane),
|
| + inputs[0]);
|
| + case wasm::kExprF32x4ReplaceLane:
|
| + return graph()->NewNode(jsgraph()->machine()->Float32x4ReplaceLane(lane),
|
| + inputs[0], inputs[1]);
|
| case wasm::kExprI32x4ExtractLane:
|
| - return graph()->NewNode(jsgraph()->common()->Int32x4ExtractLane(lane),
|
| + return graph()->NewNode(jsgraph()->machine()->Int32x4ExtractLane(lane),
|
| inputs[0]);
|
| case wasm::kExprI32x4ReplaceLane:
|
| - return graph()->NewNode(jsgraph()->common()->Int32x4ReplaceLane(lane),
|
| + return graph()->NewNode(jsgraph()->machine()->Int32x4ReplaceLane(lane),
|
| inputs[0], inputs[1]);
|
| - case wasm::kExprF32x4ExtractLane:
|
| - return graph()->NewNode(jsgraph()->common()->Float32x4ExtractLane(lane),
|
| + case wasm::kExprI16x8ExtractLane:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8ExtractLane(lane),
|
| inputs[0]);
|
| - case wasm::kExprF32x4ReplaceLane:
|
| - return graph()->NewNode(jsgraph()->common()->Float32x4ReplaceLane(lane),
|
| + case wasm::kExprI16x8ReplaceLane:
|
| + return graph()->NewNode(jsgraph()->machine()->Int16x8ReplaceLane(lane),
|
| + inputs[0], inputs[1]);
|
| + case wasm::kExprI8x16ExtractLane:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16ExtractLane(lane),
|
| + inputs[0]);
|
| + case wasm::kExprI8x16ReplaceLane:
|
| + return graph()->NewNode(jsgraph()->machine()->Int8x16ReplaceLane(lane),
|
| inputs[0], inputs[1]);
|
| default:
|
| return graph()->NewNode(UnsupportedOpcode(opcode), nullptr);
|
|
|