| Index: src/wasm/ast-decoder.cc
 | 
| diff --git a/src/wasm/ast-decoder.cc b/src/wasm/ast-decoder.cc
 | 
| index a869206e5be5f49aa7e95b6cb50bafa0ba67d15c..594ad7af48d44477de7aace1af2100d9bc2efa02 100644
 | 
| --- a/src/wasm/ast-decoder.cc
 | 
| +++ b/src/wasm/ast-decoder.cc
 | 
| @@ -1331,16 +1331,35 @@ class WasmFullDecoder : public WasmDecoder {
 | 
|    unsigned ExtractLane(WasmOpcode opcode, LocalType type) {
 | 
|      LaneOperand operand(this, pc_);
 | 
|      if (Validate(pc_, operand)) {
 | 
| -      TFNode* input = Pop(0, LocalType::kSimd128).node;
 | 
| -      TFNode* node = BUILD(SimdExtractLane, opcode, operand.lane, input);
 | 
| +      compiler::NodeVector inputs(2, zone_);
 | 
| +      inputs[1] = builder_->Int32Constant(operand.lane);
 | 
| +      inputs[0] = Pop(0, LocalType::kSimd128).node;
 | 
| +      TFNode* node = BUILD(SimdOp, opcode, inputs);
 | 
|        Push(type, node);
 | 
|      }
 | 
|      return operand.length;
 | 
|    }
 | 
|  
 | 
| +  unsigned ReplaceLane(WasmOpcode opcode, LocalType type) {
 | 
| +    LaneOperand operand(this, pc_);
 | 
| +    if (Validate(pc_, operand)) {
 | 
| +      compiler::NodeVector inputs(3, zone_);
 | 
| +      inputs[2] = Pop(1, type).node;
 | 
| +      inputs[1] = builder_->Int32Constant(operand.lane);
 | 
| +      inputs[0] = Pop(0, LocalType::kSimd128).node;
 | 
| +      TFNode* node = BUILD(SimdOp, opcode, inputs);
 | 
| +      Push(LocalType::kSimd128, node);
 | 
| +    }
 | 
| +    return operand.length;
 | 
| +  }
 | 
| +
 | 
|    unsigned DecodeSimdOpcode(WasmOpcode opcode) {
 | 
|      unsigned len = 0;
 | 
|      switch (opcode) {
 | 
| +      case kExprI32x4ReplaceLane: {
 | 
| +        len = ReplaceLane(opcode, LocalType::kWord32);
 | 
| +        break;
 | 
| +      }
 | 
|        case kExprI32x4ExtractLane: {
 | 
|          len = ExtractLane(opcode, LocalType::kWord32);
 | 
|          break;
 | 
| 
 |