Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build-js.sh
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,7 @@ export_function "_BinaryenNotVec128"
export_function "_BinaryenAndVec128"
export_function "_BinaryenOrVec128"
export_function "_BinaryenXorVec128"
export_function "_BinaryenAndNotVec128"
export_function "_BinaryenBitselectVec128"
export_function "_BinaryenNegVecI8x16"
export_function "_BinaryenAnyTrueVecI8x16"
Expand Down
1 change: 1 addition & 0 deletions scripts/gen-s-parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,7 @@
("v128.and", "makeBinary(s, BinaryOp::AndVec128)"),
("v128.or", "makeBinary(s, BinaryOp::OrVec128)"),
("v128.xor", "makeBinary(s, BinaryOp::XorVec128)"),
("v128.andnot", "makeBinary(s, BinaryOp::AndNotVec128)"),
("v128.bitselect", "makeSIMDTernary(s, SIMDTernaryOp::Bitselect)"),
("i8x16.neg", "makeUnary(s, UnaryOp::NegVecI8x16)"),
("i8x16.any_true", "makeUnary(s, UnaryOp::AnyTrueVecI8x16)"),
Expand Down
1 change: 1 addition & 0 deletions src/binaryen-c.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -793,6 +793,7 @@ BinaryenOp BinaryenNotVec128(void) { return NotVec128; }
BinaryenOp BinaryenAndVec128(void) { return AndVec128; }
BinaryenOp BinaryenOrVec128(void) { return OrVec128; }
BinaryenOp BinaryenXorVec128(void) { return XorVec128; }
BinaryenOp BinaryenAndNotVec128(void) { return AndNotVec128; }
BinaryenOp BinaryenBitselectVec128(void) { return Bitselect; }
BinaryenOp BinaryenNegVecI8x16(void) { return NegVecI8x16; }
BinaryenOp BinaryenAnyTrueVecI8x16(void) { return AnyTrueVecI8x16; }
Expand Down
1 change: 1 addition & 0 deletions src/binaryen-c.h
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,7 @@ BINARYEN_API BinaryenOp BinaryenNotVec128(void);
BINARYEN_API BinaryenOp BinaryenAndVec128(void);
BINARYEN_API BinaryenOp BinaryenOrVec128(void);
BINARYEN_API BinaryenOp BinaryenXorVec128(void);
BINARYEN_API BinaryenOp BinaryenAndNotVec128(void);
BINARYEN_API BinaryenOp BinaryenBitselectVec128(void);
BINARYEN_API BinaryenOp BinaryenNegVecI8x16(void);
BINARYEN_API BinaryenOp BinaryenAnyTrueVecI8x16(void);
Expand Down
14 changes: 11 additions & 3 deletions src/gen-s-parser.inc
Original file line number Diff line number Diff line change
Expand Up @@ -2421,9 +2421,17 @@ switch (op[0]) {
switch (op[2]) {
case '2': {
switch (op[5]) {
case 'a':
if (strcmp(op, "v128.and") == 0) { return makeBinary(s, BinaryOp::AndVec128); }
goto parse_error;
case 'a': {
switch (op[8]) {
case '\0':
if (strcmp(op, "v128.and") == 0) { return makeBinary(s, BinaryOp::AndVec128); }
goto parse_error;
case 'n':
if (strcmp(op, "v128.andnot") == 0) { return makeBinary(s, BinaryOp::AndNotVec128); }
goto parse_error;
default: goto parse_error;
}
}
case 'b':
if (strcmp(op, "v128.bitselect") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::Bitselect); }
goto parse_error;
Expand Down
3 changes: 3 additions & 0 deletions src/ir/cost.h
Original file line number Diff line number Diff line change
Expand Up @@ -558,6 +558,9 @@ struct CostAnalyzer : public Visitor<CostAnalyzer, Index> {
case XorVec128:
ret = 1;
break;
case AndNotVec128:
ret = 1;
break;
case AddVecI8x16:
ret = 1;
break;
Expand Down
16 changes: 10 additions & 6 deletions src/js/binaryen.js-post.js
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,7 @@ Module['NotVec128'] = Module['_BinaryenNotVec128']();
Module['AndVec128'] = Module['_BinaryenAndVec128']();
Module['OrVec128'] = Module['_BinaryenOrVec128']();
Module['XorVec128'] = Module['_BinaryenXorVec128']();
Module['AndNotVec128'] = Module['_BinaryenAndNotVec128']();
Module['BitselectVec128'] = Module['_BinaryenBitselectVec128']();
Module['NegVecI8x16'] = Module['_BinaryenNegVecI8x16']();
Module['AnyTrueVecI8x16'] = Module['_BinaryenAnyTrueVecI8x16']();
Expand Down Expand Up @@ -1335,14 +1336,17 @@ function wrapModule(module, self) {
'not': function(value) {
return Module['_BinaryenUnary'](module, Module['NotVec128'], value);
},
'and': function(value) {
return Module['_BinaryenUnary'](module, Module['AndVec128'], value);
'and': function(left, right) {
return Module['_BinaryenBinary'](module, Module['AndVec128'], left, right);
},
'or': function(left, right) {
return Module['_BinaryenBinary'](module, Module['OrVec128'], left, right);
},
'or': function(value) {
return Module['_BinaryenUnary'](module, Module['OrVec128'], value);
'xor': function(left, right) {
return Module['_BinaryenBinary'](module, Module['XorVec128'], left, right);
},
'xor': function(value) {
return Module['_BinaryenUnary'](module, Module['XorVec128'], value);
'andnot': function(left, right) {
return Module['_BinaryenBinary'](module, Module['AndNotVec128'], left, right);
},
'bitselect': function(left, right, cond) {
return Module['_BinaryenSIMDTernary'](module, Module['BitselectVec128'], left, right, cond);
Expand Down
3 changes: 3 additions & 0 deletions src/passes/Print.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1113,6 +1113,9 @@ struct PrintExpressionContents
case XorVec128:
o << "v128.xor";
break;
case AndNotVec128:
o << "v128.andnot";
break;

case AddVecI8x16:
o << "i8x16.add";
Expand Down
1 change: 1 addition & 0 deletions src/tools/fuzzing.h
Original file line number Diff line number Diff line change
Expand Up @@ -2139,6 +2139,7 @@ class TranslateToFuzzReader {
AndVec128,
OrVec128,
XorVec128,
AndNotVec128,
AddVecI8x16,
AddSatSVecI8x16,
AddSatUVecI8x16,
Expand Down
1 change: 1 addition & 0 deletions src/wasm-binary.h
Original file line number Diff line number Diff line change
Expand Up @@ -782,6 +782,7 @@ enum ASTNodes {
V128And = 0x4d,
V128Or = 0x4e,
V128Xor = 0x4f,
V128AndNot = 0xd8,
V128Bitselect = 0x50,
I8x16Neg = 0x51,
I8x16AnyTrue = 0x52,
Expand Down
2 changes: 2 additions & 0 deletions src/wasm-interpreter.h
Original file line number Diff line number Diff line change
Expand Up @@ -740,6 +740,8 @@ class ExpressionRunner : public OverriddenVisitor<SubType, Flow> {
return left.orV128(right);
case XorVec128:
return left.xorV128(right);
case AndNotVec128:
return left.andV128(right.notV128());

case AddVecI8x16:
return left.addI8x16(right);
Expand Down
1 change: 1 addition & 0 deletions src/wasm.h
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,7 @@ enum BinaryOp {
AndVec128,
OrVec128,
XorVec128,
AndNotVec128,
AddVecI8x16,
AddSatSVecI8x16,
AddSatUVecI8x16,
Expand Down
4 changes: 4 additions & 0 deletions src/wasm/wasm-binary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3819,6 +3819,10 @@ bool WasmBinaryBuilder::maybeVisitSIMDBinary(Expression*& out, uint32_t code) {
curr = allocator.alloc<Binary>();
curr->op = XorVec128;
break;
case BinaryConsts::V128AndNot:
curr = allocator.alloc<Binary>();
curr->op = AndNotVec128;
break;
case BinaryConsts::I8x16Add:
curr = allocator.alloc<Binary>();
curr->op = AddVecI8x16;
Expand Down
4 changes: 3 additions & 1 deletion src/wasm/wasm-stack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1343,7 +1343,9 @@ void BinaryInstWriter::visitBinary(Binary* curr) {
case XorVec128:
o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Xor);
break;

case AndNotVec128:
o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128AndNot);
break;
case AddVecI8x16:
o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Add);
break;
Expand Down
1 change: 1 addition & 0 deletions src/wasm/wasm-validator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1315,6 +1315,7 @@ void FunctionValidator::visitBinary(Binary* curr) {
case AndVec128:
case OrVec128:
case XorVec128:
case AndNotVec128:
case AddVecI8x16:
case AddSatSVecI8x16:
case AddSatUVecI8x16:
Expand Down
1 change: 1 addition & 0 deletions test/binaryen.js/kitchen-sink.js
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,7 @@ function test_core() {
module.v128.and(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
module.v128.or(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
module.v128.xor(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
module.v128.andnot(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
module.i8x16.add(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
module.i8x16.add_saturate_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
module.i8x16.add_saturate_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
Expand Down
Loading