Index: src/compiler/wasm-compiler.cc |
diff --git a/src/compiler/wasm-compiler.cc b/src/compiler/wasm-compiler.cc |
index 158c70fc5c03d9e1489ace784e16d2aac5e48dc8..6150e731242dac9c7cf6a7d6a09f8df110fbe88a 100644 |
--- a/src/compiler/wasm-compiler.cc |
+++ b/src/compiler/wasm-compiler.cc |
@@ -1069,6 +1069,8 @@ static bool ReverseBytesSupported(MachineOperatorBuilder* m, |
return m->Word32ReverseBytes().IsSupported(); |
case 8: |
return m->Word64ReverseBytes().IsSupported(); |
+ case 16: |
Clemens Hammacher
2017/04/26 18:40:05
You can merge this with the case for 4.
|
+ return m->Word32ReverseBytes().IsSupported(); |
default: |
break; |
} |
@@ -1102,6 +1104,9 @@ Node* WasmGraphBuilder::BuildChangeEndianness(Node* node, MachineType memtype, |
// No need to change endianness for byte size, return original node |
return node; |
break; |
+ case MachineRepresentation::kSimd128: |
+ DCHECK(ReverseBytesSupported(m, 4)); |
Clemens Hammacher
2017/04/26 18:40:05
You meant 16, not 4. You can also use valueSizeInB
|
+ break; |
default: |
UNREACHABLE(); |
break; |
@@ -1124,6 +1129,21 @@ Node* WasmGraphBuilder::BuildChangeEndianness(Node* node, MachineType memtype, |
case 8: |
result = graph()->NewNode(m->Word64ReverseBytes().op(), value); |
break; |
+ case 16: { |
+ Node* byte_reversed_lanes[4]; |
+ result = value; |
+ for (int lane = 0; lane < 4; lane++) |
bbudge
2017/04/26 20:14:12
use braces for this loop body
and below
|
+ byte_reversed_lanes[lane] = graph()->NewNode( |
+ m->Word32ReverseBytes().op(), |
+ graph()->NewNode(jsgraph()->machine()->I32x4ExtractLane(lane), |
+ value)); |
+ for (int lane = 0; lane < 4; lane++) |
+ result = |
+ graph()->NewNode(jsgraph()->machine()->I32x4ReplaceLane(lane), |
+ result, byte_reversed_lanes[3 - lane]); |
+ |
+ break; |
+ } |
default: |
UNREACHABLE(); |
} |