Skip to content

Commit 3c78269

Browse files
authored
1 parent fc6d2df commit 3c78269

27 files changed

+653
-506
lines changed

build-js.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,7 @@ export_function "_BinaryenWidenLowSVecI16x8ToVecI32x4"
574574
export_function "_BinaryenWidenHighSVecI16x8ToVecI32x4"
575575
export_function "_BinaryenWidenLowUVecI16x8ToVecI32x4"
576576
export_function "_BinaryenWidenHighUVecI16x8ToVecI32x4"
577+
export_function "_BinaryenSwizzleVec8x16"
577578

578579
# Expression creation
579580
export_function "_BinaryenBlock"

scripts/gen-s-parser.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,7 @@
452452
("i32x4.widen_high_i16x8_s", "makeUnary(s, UnaryOp::WidenHighSVecI16x8ToVecI32x4)"),
453453
("i32x4.widen_low_i16x8_u", "makeUnary(s, UnaryOp::WidenLowUVecI16x8ToVecI32x4)"),
454454
("i32x4.widen_high_i16x8_u", "makeUnary(s, UnaryOp::WidenHighUVecI16x8ToVecI32x4)"),
455+
("v8x16.swizzle", "makeBinary(s, BinaryOp::SwizzleVec8x16)"),
455456
# exception handling instructions
456457
("try", "makeTry(s)"),
457458
("throw", "makeThrow(s)"),

src/binaryen-c.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -942,6 +942,7 @@ BinaryenOp BinaryenWidenLowUVecI16x8ToVecI32x4(void) {
942942
BinaryenOp BinaryenWidenHighUVecI16x8ToVecI32x4(void) {
943943
return WidenHighUVecI16x8ToVecI32x4;
944944
}
945+
BinaryenOp BinaryenSwizzleVec8x16(void) { return SwizzleVec8x16; }
945946

946947
BinaryenExpressionRef BinaryenBlock(BinaryenModuleRef module,
947948
const char* name,

src/binaryen-c.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,7 @@ BINARYEN_API BinaryenOp BinaryenWidenLowSVecI16x8ToVecI32x4(void);
546546
BINARYEN_API BinaryenOp BinaryenWidenHighSVecI16x8ToVecI32x4(void);
547547
BINARYEN_API BinaryenOp BinaryenWidenLowUVecI16x8ToVecI32x4(void);
548548
BINARYEN_API BinaryenOp BinaryenWidenHighUVecI16x8ToVecI32x4(void);
549+
BINARYEN_API BinaryenOp BinaryenSwizzleVec8x16(void);
549550

550551
typedef void* BinaryenExpressionRef;
551552

src/gen-s-parser.inc

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2509,9 +2509,17 @@ switch (op[0]) {
25092509
case 'l':
25102510
if (strcmp(op, "v8x16.load_splat") == 0) { return makeSIMDLoad(s, SIMDLoadOp::LoadSplatVec8x16); }
25112511
goto parse_error;
2512-
case 's':
2513-
if (strcmp(op, "v8x16.shuffle") == 0) { return makeSIMDShuffle(s); }
2514-
goto parse_error;
2512+
case 's': {
2513+
switch (op[7]) {
2514+
case 'h':
2515+
if (strcmp(op, "v8x16.shuffle") == 0) { return makeSIMDShuffle(s); }
2516+
goto parse_error;
2517+
case 'w':
2518+
if (strcmp(op, "v8x16.swizzle") == 0) { return makeBinary(s, BinaryOp::SwizzleVec8x16); }
2519+
goto parse_error;
2520+
default: goto parse_error;
2521+
}
2522+
}
25152523
default: goto parse_error;
25162524
}
25172525
}

src/ir/cost.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,9 @@ struct CostAnalyzer : public Visitor<CostAnalyzer, Index> {
666666
case NarrowUVecI32x4ToVecI16x8:
667667
ret = 1;
668668
break;
669+
case SwizzleVec8x16:
670+
ret = 1;
671+
break;
669672
case InvalidBinary:
670673
WASM_UNREACHABLE();
671674
}

src/js/binaryen.js-post.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,7 @@ Module['WidenLowSVecI16x8ToVecI32x4'] = Module['_BinaryenWidenLowSVecI16x8ToVecI
418418
Module['WidenHighSVecI16x8ToVecI32x4'] = Module['_BinaryenWidenHighSVecI16x8ToVecI32x4']();
419419
Module['WidenLowUVecI16x8ToVecI32x4'] = Module['_BinaryenWidenLowUVecI16x8ToVecI32x4']();
420420
Module['WidenHighUVecI16x8ToVecI32x4'] = Module['_BinaryenWidenHighUVecI16x8ToVecI32x4']();
421+
Module['SwizzleVec8x16'] = Module['_BinaryenSwizzleVec8x16']();
421422

422423
// The size of a single literal in memory as used in Const creation,
423424
// which is a little different: we don't want users to need to make
@@ -1845,6 +1846,9 @@ function wrapModule(module, self) {
18451846
return Module['_BinaryenSIMDShuffle'](module, left, right, i8sToStack(mask));
18461847
});
18471848
},
1849+
'swizzle': function(left, right) {
1850+
return Module['_BinaryenBinary'](module, Module['SwizzleVec8x16'], left, right);
1851+
},
18481852
'load_splat': function(offset, align, ptr) {
18491853
return Module['_BinaryenSIMDLoad'](module, Module['LoadSplatVec8x16'], offset, align, ptr);
18501854
},

src/literal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,7 @@ class Literal {
398398
Literal widenHighSToVecI32x4() const;
399399
Literal widenLowUToVecI32x4() const;
400400
Literal widenHighUToVecI32x4() const;
401+
Literal swizzleVec8x16(const Literal& other) const;
401402

402403
private:
403404
Literal addSatSI8(const Literal& other) const;

src/passes/Print.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1243,6 +1243,10 @@ struct PrintExpressionContents
12431243
o << "i16x8.narrow_i32x4_u";
12441244
break;
12451245

1246+
case SwizzleVec8x16:
1247+
o << "v8x16.swizzle";
1248+
break;
1249+
12461250
case InvalidBinary:
12471251
WASM_UNREACHABLE();
12481252
}

src/tools/fuzzing.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2174,7 +2174,8 @@ class TranslateToFuzzReader {
21742174
NarrowSVecI16x8ToVecI8x16,
21752175
NarrowUVecI16x8ToVecI8x16,
21762176
NarrowSVecI32x4ToVecI16x8,
2177-
NarrowUVecI32x4ToVecI16x8),
2177+
NarrowUVecI32x4ToVecI16x8,
2178+
SwizzleVec8x16),
21782179
make(v128),
21792180
make(v128)});
21802181
}

0 commit comments

Comments
 (0)