From dd3873375ca7375b79105742b30fa03f9f8a0c24 Mon Sep 17 00:00:00 2001 From: Thomas Lively <7121787+tlively@users.noreply.github.com> Date: Mon, 18 Mar 2019 20:38:07 -0700 Subject: 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. --- src/wasm.h | 44 +------------------------------------------- 1 file changed, 1 insertion(+), 43 deletions(-) (limited to 'src/wasm.h') 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; -- cgit v1.2.3