diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/StripTargetFeatures.cpp | 7 | ||||
-rw-r--r-- | src/passes/pass.cpp | 3 | ||||
-rw-r--r-- | src/passes/passes.h | 1 | ||||
-rw-r--r-- | src/wasm-binary.h | 1 | ||||
-rw-r--r-- | src/wasm/wasm-binary.cpp | 16 | ||||
-rw-r--r-- | src/wasm/wasm.cpp | 1 |
6 files changed, 20 insertions, 9 deletions
diff --git a/src/passes/StripTargetFeatures.cpp b/src/passes/StripTargetFeatures.cpp index 542b4a6c1..cb5e51f08 100644 --- a/src/passes/StripTargetFeatures.cpp +++ b/src/passes/StripTargetFeatures.cpp @@ -19,11 +19,14 @@ namespace wasm { struct StripTargetFeatures : public Pass { + bool isStripped = false; + StripTargetFeatures(bool isStripped) : isStripped(isStripped) {} void run(PassRunner* runner, Module* module) override { - module->hasFeaturesSection = false; + module->hasFeaturesSection = !isStripped; } }; -Pass* createStripTargetFeaturesPass() { return new StripTargetFeatures(); } +Pass* createStripTargetFeaturesPass() { return new StripTargetFeatures(true); } +Pass* createEmitTargetFeaturesPass() { return new StripTargetFeatures(false); } } // namespace wasm diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp index b46a03b5e..d1dd2fe69 100644 --- a/src/passes/pass.cpp +++ b/src/passes/pass.cpp @@ -109,6 +109,9 @@ void PassRegistry::registerPasses() { registerPass("duplicate-function-elimination", "removes duplicate functions", createDuplicateFunctionEliminationPass); + registerPass("emit-target-features", + "emit the target features section in the output", + createEmitTargetFeaturesPass); registerPass("extract-function", "leaves just one function (useful for debugging)", createExtractFunctionPass); diff --git a/src/passes/passes.h b/src/passes/passes.h index 84aabf0e8..15daf268e 100644 --- a/src/passes/passes.h +++ b/src/passes/passes.h @@ -36,6 +36,7 @@ Pass* createDataFlowOptsPass(); Pass* createDeadCodeEliminationPass(); Pass* createDirectizePass(); Pass* createDuplicateFunctionEliminationPass(); +Pass* createEmitTargetFeaturesPass(); Pass* createExtractFunctionPass(); Pass* createFlattenPass(); Pass* createFuncCastEmulationPass(); diff --git a/src/wasm-binary.h b/src/wasm-binary.h index ea1a8ad82..8f1cbb7de 100644 --- a/src/wasm-binary.h +++ b/src/wasm-binary.h @@ -400,6 +400,7 @@ extern const char* TargetFeatures; extern const char* AtomicsFeature; extern const char* BulkMemoryFeature; extern const char* ExceptionHandlingFeature; +extern const char* MutableGlobalsFeature; extern const char* TruncSatFeature; extern const char* SignExtFeature; extern const char* SIMD128Feature; diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index 5fb3a8550..f1c6eeb7c 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -666,19 +666,19 @@ void WasmBinaryWriter::writeFeaturesSection() { auto toString = [](FeatureSet::Feature f) { switch (f) { case FeatureSet::Atomics: - return "atomics"; + return BinaryConsts::UserSections::AtomicsFeature; case FeatureSet::MutableGlobals: - return "mutable-globals"; + return BinaryConsts::UserSections::MutableGlobalsFeature; case FeatureSet::TruncSat: - return "nontrapping-fptoint"; + return BinaryConsts::UserSections::TruncSatFeature; case FeatureSet::SIMD: - return "simd128"; + return BinaryConsts::UserSections::SIMD128Feature; case FeatureSet::BulkMemory: - return "bulk-memory"; + return BinaryConsts::UserSections::BulkMemoryFeature; case FeatureSet::SignExt: - return "sign-ext"; + return BinaryConsts::UserSections::SignExtFeature; case FeatureSet::ExceptionHandling: - return "exception-handling"; + return BinaryConsts::UserSections::ExceptionHandlingFeature; default: WASM_UNREACHABLE(); } @@ -2154,6 +2154,8 @@ void WasmBinaryBuilder::readFeatures(size_t payloadLen) { wasm.features.setBulkMemory(); } else if (name == BinaryConsts::UserSections::ExceptionHandlingFeature) { wasm.features.setExceptionHandling(); + } else if (name == BinaryConsts::UserSections::MutableGlobalsFeature) { + wasm.features.setMutableGlobals(); } else if (name == BinaryConsts::UserSections::TruncSatFeature) { wasm.features.setTruncSat(); } else if (name == BinaryConsts::UserSections::SignExtFeature) { diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp index 56eb83fbc..a307d95f4 100644 --- a/src/wasm/wasm.cpp +++ b/src/wasm/wasm.cpp @@ -36,6 +36,7 @@ const char* TargetFeatures = "target_features"; const char* AtomicsFeature = "atomics"; const char* BulkMemoryFeature = "bulk-memory"; const char* ExceptionHandlingFeature = "exception-handling"; +const char* MutableGlobalsFeature = "mutable-globals"; const char* TruncSatFeature = "nontrapping-fptoint"; const char* SignExtFeature = "sign-ext"; const char* SIMD128Feature = "simd128"; |