Index: src/wasm/ast-decoder.cc |
diff --git a/src/wasm/ast-decoder.cc b/src/wasm/ast-decoder.cc |
index 02d1db5bdad3b38998b0fd5b11e75c6202c58eab..9fabff9b578291ae98bc12bf650131854ce1cac0 100644 |
--- a/src/wasm/ast-decoder.cc |
+++ b/src/wasm/ast-decoder.cc |
@@ -1248,13 +1248,29 @@ class WasmFullDecoder : public WasmDecoder { |
unsigned DecodeSimdOpcode(WasmOpcode opcode) { |
unsigned len = 0; |
switch (opcode) { |
+ case kExprI32x4ReplaceLane: { |
+ compiler::NodeVector inputs(3, zone_); |
+ inputs[2] = Pop(1, LocalType::kWord32).node; |
+ uint8_t lane = this->checked_read_u8(pc_, 2, "lane number"); |
+ if (lane < 0 || lane > 3) { |
+ error(pc_, pc_ + 2, "invalid extract lane value"); |
bbudge
2016/10/04 20:34:26
s/extract/replace
I think there are enough SIMD i
gdeepti
2016/11/22 01:15:20
Using LaneOperand as introduced in the ScalarLower
|
+ } |
+ inputs[1] = builder_->Int32Constant(lane); |
+ inputs[0] = Pop(0, LocalType::kSimd128).node; |
+ TFNode* node = BUILD(SimdOp, opcode, inputs); |
+ Push(LocalType::kSimd128, node); |
+ len++; |
+ break; |
+ } |
case kExprI32x4ExtractLane: { |
+ compiler::NodeVector inputs(2, zone_); |
+ inputs[0] = Pop(0, LocalType::kSimd128).node; |
uint8_t lane = this->checked_read_u8(pc_, 2, "lane number"); |
if (lane < 0 || lane > 3) { |
error(pc_, pc_ + 2, "invalid extract lane value"); |
} |
- TFNode* input = Pop(0, LocalType::kSimd128).node; |
- TFNode* node = BUILD(SimdExtractLane, opcode, lane, input); |
+ inputs[1] = builder_->Int32Constant(lane); |
+ TFNode* node = BUILD(SimdOp, opcode, inputs); |
Push(LocalType::kWord32, node); |
len++; |
break; |