summaryrefslogtreecommitdiff
path: root/src/tools/fuzzing/fuzzing.cpp
diff options
context:
space:
mode:
authorBrendan Dahl <brendan.dahl@gmail.com>2024-08-22 11:21:53 -0700
committerGitHub <noreply@github.com>2024-08-22 11:21:53 -0700
commit95a280f70ef529c3c506d628648a96f2d267f4c1 (patch)
treee77cf0b2337418fb7034c5c0e5b21de172b4bc30 /src/tools/fuzzing/fuzzing.cpp
parent2d99e10c03e619b01688268319c1cd43f7539e33 (diff)
downloadbinaryen-95a280f70ef529c3c506d628648a96f2d267f4c1.tar.gz
binaryen-95a280f70ef529c3c506d628648a96f2d267f4c1.tar.bz2
binaryen-95a280f70ef529c3c506d628648a96f2d267f4c1.zip
[FP16] Add a feature flag for FP16. (#6864)
Ensure the "fp16" feature is enabled for FP16 instructions.
Diffstat (limited to 'src/tools/fuzzing/fuzzing.cpp')
-rw-r--r--src/tools/fuzzing/fuzzing.cpp247
1 files changed, 130 insertions, 117 deletions
diff --git a/src/tools/fuzzing/fuzzing.cpp b/src/tools/fuzzing/fuzzing.cpp
index a143d2ff2..7a3007e43 100644
--- a/src/tools/fuzzing/fuzzing.cpp
+++ b/src/tools/fuzzing/fuzzing.cpp
@@ -3271,116 +3271,119 @@ Expression* TranslateToFuzzReader::makeBinary(Type type) {
}
case Type::v128: {
assert(wasm.features.hasSIMD());
- return buildBinary({pick(EqVecI8x16,
- NeVecI8x16,
- LtSVecI8x16,
- LtUVecI8x16,
- GtSVecI8x16,
- GtUVecI8x16,
- LeSVecI8x16,
- LeUVecI8x16,
- GeSVecI8x16,
- GeUVecI8x16,
- EqVecI16x8,
- NeVecI16x8,
- LtSVecI16x8,
- LtUVecI16x8,
- GtSVecI16x8,
- GtUVecI16x8,
- LeSVecI16x8,
- LeUVecI16x8,
- GeSVecI16x8,
- GeUVecI16x8,
- EqVecI32x4,
- NeVecI32x4,
- LtSVecI32x4,
- LtUVecI32x4,
- GtSVecI32x4,
- GtUVecI32x4,
- LeSVecI32x4,
- LeUVecI32x4,
- GeSVecI32x4,
- GeUVecI32x4,
- EqVecF16x8,
- EqVecF16x8,
- NeVecF16x8,
- LtVecF16x8,
- GtVecF16x8,
- LeVecF16x8,
- GeVecF16x8,
- EqVecF32x4,
- NeVecF32x4,
- LtVecF32x4,
- GtVecF32x4,
- LeVecF32x4,
- GeVecF32x4,
- EqVecF64x2,
- NeVecF64x2,
- LtVecF64x2,
- GtVecF64x2,
- LeVecF64x2,
- GeVecF64x2,
- AndVec128,
- OrVec128,
- XorVec128,
- AndNotVec128,
- AddVecI8x16,
- AddSatSVecI8x16,
- AddSatUVecI8x16,
- SubVecI8x16,
- SubSatSVecI8x16,
- SubSatUVecI8x16,
- MinSVecI8x16,
- MinUVecI8x16,
- MaxSVecI8x16,
- MaxUVecI8x16,
- // TODO: avgr_u
- // TODO: q15mulr_sat_s
- // TODO: extmul
- AddVecI16x8,
- AddSatSVecI16x8,
- AddSatUVecI16x8,
- SubVecI16x8,
- SubSatSVecI16x8,
- SubSatUVecI16x8,
- MulVecI16x8,
- MinSVecI16x8,
- MinUVecI16x8,
- MaxSVecI16x8,
- MaxUVecI16x8,
- AddVecI32x4,
- SubVecI32x4,
- MulVecI32x4,
- MinSVecI32x4,
- MinUVecI32x4,
- MaxSVecI32x4,
- MaxUVecI32x4,
- DotSVecI16x8ToVecI32x4,
- AddVecI64x2,
- SubVecI64x2,
- AddVecF16x8,
- SubVecF16x8,
- MulVecF16x8,
- DivVecF16x8,
- MinVecF16x8,
- MaxVecF16x8,
- AddVecF32x4,
- SubVecF32x4,
- MulVecF32x4,
- DivVecF32x4,
- MinVecF32x4,
- MaxVecF32x4,
- AddVecF64x2,
- SubVecF64x2,
- MulVecF64x2,
- DivVecF64x2,
- MinVecF64x2,
- MaxVecF64x2,
- NarrowSVecI16x8ToVecI8x16,
- NarrowUVecI16x8ToVecI8x16,
- NarrowSVecI32x4ToVecI16x8,
- NarrowUVecI32x4ToVecI16x8,
- SwizzleVecI8x16),
+ return buildBinary({pick(FeatureOptions<BinaryOp>()
+ .add(FeatureSet::SIMD,
+ EqVecI8x16,
+ NeVecI8x16,
+ LtSVecI8x16,
+ LtUVecI8x16,
+ GtSVecI8x16,
+ GtUVecI8x16,
+ LeSVecI8x16,
+ LeUVecI8x16,
+ GeSVecI8x16,
+ GeUVecI8x16,
+ EqVecI16x8,
+ NeVecI16x8,
+ LtSVecI16x8,
+ LtUVecI16x8,
+ GtSVecI16x8,
+ GtUVecI16x8,
+ LeSVecI16x8,
+ LeUVecI16x8,
+ GeSVecI16x8,
+ GeUVecI16x8,
+ EqVecI32x4,
+ NeVecI32x4,
+ LtSVecI32x4,
+ LtUVecI32x4,
+ GtSVecI32x4,
+ GtUVecI32x4,
+ LeSVecI32x4,
+ LeUVecI32x4,
+ GeSVecI32x4,
+ GeUVecI32x4,
+ EqVecF32x4,
+ NeVecF32x4,
+ LtVecF32x4,
+ GtVecF32x4,
+ LeVecF32x4,
+ GeVecF32x4,
+ EqVecF64x2,
+ NeVecF64x2,
+ LtVecF64x2,
+ GtVecF64x2,
+ LeVecF64x2,
+ GeVecF64x2,
+ AndVec128,
+ OrVec128,
+ XorVec128,
+ AndNotVec128,
+ AddVecI8x16,
+ AddSatSVecI8x16,
+ AddSatUVecI8x16,
+ SubVecI8x16,
+ SubSatSVecI8x16,
+ SubSatUVecI8x16,
+ MinSVecI8x16,
+ MinUVecI8x16,
+ MaxSVecI8x16,
+ MaxUVecI8x16,
+ // TODO: avgr_u
+ // TODO: q15mulr_sat_s
+ // TODO: extmul
+ AddVecI16x8,
+ AddSatSVecI16x8,
+ AddSatUVecI16x8,
+ SubVecI16x8,
+ SubSatSVecI16x8,
+ SubSatUVecI16x8,
+ MulVecI16x8,
+ MinSVecI16x8,
+ MinUVecI16x8,
+ MaxSVecI16x8,
+ MaxUVecI16x8,
+ AddVecI32x4,
+ SubVecI32x4,
+ MulVecI32x4,
+ MinSVecI32x4,
+ MinUVecI32x4,
+ MaxSVecI32x4,
+ MaxUVecI32x4,
+ DotSVecI16x8ToVecI32x4,
+ AddVecI64x2,
+ SubVecI64x2,
+ AddVecF32x4,
+ SubVecF32x4,
+ MulVecF32x4,
+ DivVecF32x4,
+ MinVecF32x4,
+ MaxVecF32x4,
+ AddVecF64x2,
+ SubVecF64x2,
+ MulVecF64x2,
+ DivVecF64x2,
+ MinVecF64x2,
+ MaxVecF64x2,
+ NarrowSVecI16x8ToVecI8x16,
+ NarrowUVecI16x8ToVecI8x16,
+ NarrowSVecI32x4ToVecI16x8,
+ NarrowUVecI32x4ToVecI16x8,
+ SwizzleVecI8x16)
+ .add(FeatureSet::FP16,
+ EqVecF16x8,
+ EqVecF16x8,
+ NeVecF16x8,
+ LtVecF16x8,
+ GtVecF16x8,
+ LeVecF16x8,
+ GeVecF16x8,
+ AddVecF16x8,
+ SubVecF16x8,
+ MulVecF16x8,
+ DivVecF16x8,
+ MinVecF16x8,
+ MaxVecF16x8)),
make(Type::v128),
make(Type::v128)});
}
@@ -3586,7 +3589,9 @@ Expression* TranslateToFuzzReader::makeSIMDExtract(Type type) {
op = ExtractLaneVecI64x2;
break;
case Type::f32:
- op = ExtractLaneVecF32x4;
+ op = pick(FeatureOptions<SIMDExtractOp>()
+ .add(FeatureSet::SIMD, ExtractLaneVecF32x4)
+ .add(FeatureSet::FP16, ExtractLaneVecF16x8));
break;
case Type::f64:
op = ExtractLaneVecF64x2;
@@ -3621,12 +3626,16 @@ Expression* TranslateToFuzzReader::makeSIMDExtract(Type type) {
}
Expression* TranslateToFuzzReader::makeSIMDReplace() {
- SIMDReplaceOp op = pick(ReplaceLaneVecI8x16,
- ReplaceLaneVecI16x8,
- ReplaceLaneVecI32x4,
- ReplaceLaneVecI64x2,
- ReplaceLaneVecF32x4,
- ReplaceLaneVecF64x2);
+ SIMDReplaceOp op =
+ pick(FeatureOptions<SIMDReplaceOp>()
+ .add(FeatureSet::SIMD,
+ ReplaceLaneVecI8x16,
+ ReplaceLaneVecI16x8,
+ ReplaceLaneVecI32x4,
+ ReplaceLaneVecI64x2,
+ ReplaceLaneVecF32x4,
+ ReplaceLaneVecF64x2)
+ .add(FeatureSet::FeatureSet::FP16, ReplaceLaneVecF16x8));
Expression* vec = make(Type::v128);
uint8_t index;
Type lane_t;
@@ -3647,6 +3656,10 @@ Expression* TranslateToFuzzReader::makeSIMDReplace() {
index = upTo(2);
lane_t = Type::i64;
break;
+ case ReplaceLaneVecF16x8:
+ index = upTo(8);
+ lane_t = Type::f32;
+ break;
case ReplaceLaneVecF32x4:
index = upTo(4);
lane_t = Type::f32;