diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2019-03-18 20:38:07 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-18 20:38:07 -0700 |
commit | dd3873375ca7375b79105742b30fa03f9f8a0c24 (patch) | |
tree | f07e51c24c124cc0981d1d87214aad200e67f1a8 /src/wasm.h | |
parent | a2dd7c4feae3c4da3a1f8de90171795d12eb8879 (diff) | |
download | binaryen-dd3873375ca7375b79105742b30fa03f9f8a0c24.tar.gz binaryen-dd3873375ca7375b79105742b30fa03f9f8a0c24.tar.bz2 binaryen-dd3873375ca7375b79105742b30fa03f9f8a0c24.zip |
Validate that types match features (#1949)
Refactors features into a new wasm-features.h file and updates the
validator to check that all types are allowed. Currently this is only
relevant for the v128 SIMD type, but new types will be added in the
future. The test for this change is in #1948.
Diffstat (limited to 'src/wasm.h')
-rw-r--r-- | src/wasm.h | 44 |
1 files changed, 1 insertions, 43 deletions
diff --git a/src/wasm.h b/src/wasm.h index 258ed0f35..ab9d7c816 100644 --- a/src/wasm.h +++ b/src/wasm.h @@ -35,52 +35,10 @@ #include "mixed_arena.h" #include "support/name.h" #include "wasm-type.h" +#include "wasm-features.h" namespace wasm { -struct FeatureSet { - enum Feature : uint32_t { - MVP = 0, - Atomics = 1 << 0, - MutableGlobals = 1 << 1, - TruncSat = 1 << 2, - SIMD = 1 << 3, - BulkMemory = 1 << 4, - SignExt = 1 << 5, - All = Atomics | MutableGlobals | TruncSat | SIMD | BulkMemory | SignExt - }; - - FeatureSet() : features(MVP) {} - FeatureSet(uint32_t features) : features(features) {} - - bool isMVP() const { return features == MVP; } - bool has(Feature f) const { return (features & f) == f; } - bool hasAtomics() const { return features & Atomics; } - bool hasMutableGlobals() const { return features & MutableGlobals; } - bool hasTruncSat() const { return features & TruncSat; } - bool hasSIMD() const { return features & SIMD; } - bool hasBulkMemory() const { return features & BulkMemory; } - bool hasSignExt() const { return features & SignExt; } - bool hasAll() const { return features & All; } - - void makeMVP() { features = MVP; } - void set(Feature f, bool v = true) { features = v ? (features | f) : (features & ~f); } - void setAtomics(bool v = true) { set(Atomics, v); } - void setMutableGlobals(bool v = true) { set(MutableGlobals, v); } - void setTruncSat(bool v = true) { set(TruncSat, v); } - void setSIMD(bool v = true) { set(SIMD, v); } - void setBulkMemory(bool v = true) { set(BulkMemory, v); } - void setSignExt(bool v = true) { set(SignExt, v); } - void setAll(bool v = true) { features = v ? All : MVP; } - - bool operator<=(const FeatureSet& other) { - return !(features & ~other.features); - } - -private: - uint32_t features; -}; - // An index in a wasm module typedef uint32_t Index; |