diff options
Diffstat (limited to 'vendor/github.com/tetratelabs/wazero/api/features.go')
-rw-r--r-- | vendor/github.com/tetratelabs/wazero/api/features.go | 214 |
1 files changed, 0 insertions, 214 deletions
diff --git a/vendor/github.com/tetratelabs/wazero/api/features.go b/vendor/github.com/tetratelabs/wazero/api/features.go deleted file mode 100644 index c739d3bf7..000000000 --- a/vendor/github.com/tetratelabs/wazero/api/features.go +++ /dev/null @@ -1,214 +0,0 @@ -package api - -import ( - "fmt" - "strings" -) - -// CoreFeatures is a bit flag of WebAssembly Core specification features. See -// https://github.com/WebAssembly/proposals for proposals and their status. -// -// Constants define individual features, such as CoreFeatureMultiValue, or -// groups of "finished" features, assigned to a WebAssembly Core Specification -// version, e.g. CoreFeaturesV1 or CoreFeaturesV2. -// -// Note: Numeric values are not intended to be interpreted except as bit flags. -type CoreFeatures uint64 - -// CoreFeaturesV1 are features included in the WebAssembly Core Specification -// 1.0. As of late 2022, this is the only version that is a Web Standard (W3C -// Recommendation). -// -// See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/ -const CoreFeaturesV1 = CoreFeatureMutableGlobal - -// CoreFeaturesV2 are features included in the WebAssembly Core Specification -// 2.0 (20220419). As of late 2022, version 2.0 is a W3C working draft, not yet -// a Web Standard (W3C Recommendation). -// -// See https://www.w3.org/TR/2022/WD-wasm-core-2-20220419/appendix/changes.html#release-1-1 -const CoreFeaturesV2 = CoreFeaturesV1 | - CoreFeatureBulkMemoryOperations | - CoreFeatureMultiValue | - CoreFeatureNonTrappingFloatToIntConversion | - CoreFeatureReferenceTypes | - CoreFeatureSignExtensionOps | - CoreFeatureSIMD - -const ( - // CoreFeatureBulkMemoryOperations adds instructions modify ranges of - // memory or table entries ("bulk-memory-operations"). This is included in - // CoreFeaturesV2, but not CoreFeaturesV1. - // - // Here are the notable effects: - // - Adds `memory.fill`, `memory.init`, `memory.copy` and `data.drop` - // instructions. - // - Adds `table.init`, `table.copy` and `elem.drop` instructions. - // - Introduces a "passive" form of element and data segments. - // - Stops checking "active" element and data segment boundaries at - // compile-time, meaning they can error at runtime. - // - // Note: "bulk-memory-operations" is mixed with the "reference-types" - // proposal due to the WebAssembly Working Group merging them - // "mutually dependent". Therefore, enabling this feature requires enabling - // CoreFeatureReferenceTypes, and vice-versa. - // - // See https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/bulk-memory-operations/Overview.md - // https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/reference-types/Overview.md and - // https://github.com/WebAssembly/spec/pull/1287 - CoreFeatureBulkMemoryOperations CoreFeatures = 1 << iota - - // CoreFeatureMultiValue enables multiple values ("multi-value"). This is - // included in CoreFeaturesV2, but not CoreFeaturesV1. - // - // Here are the notable effects: - // - Function (`func`) types allow more than one result. - // - Block types (`block`, `loop` and `if`) can be arbitrary function - // types. - // - // See https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/multi-value/Overview.md - CoreFeatureMultiValue - - // CoreFeatureMutableGlobal allows globals to be mutable. This is included - // in both CoreFeaturesV1 and CoreFeaturesV2. - // - // When false, an api.Global can never be cast to an api.MutableGlobal, and - // any wasm that includes global vars will fail to parse. - CoreFeatureMutableGlobal - - // CoreFeatureNonTrappingFloatToIntConversion enables non-trapping - // float-to-int conversions ("nontrapping-float-to-int-conversion"). This - // is included in CoreFeaturesV2, but not CoreFeaturesV1. - // - // The only effect of enabling is allowing the following instructions, - // which return 0 on NaN instead of panicking. - // - `i32.trunc_sat_f32_s` - // - `i32.trunc_sat_f32_u` - // - `i32.trunc_sat_f64_s` - // - `i32.trunc_sat_f64_u` - // - `i64.trunc_sat_f32_s` - // - `i64.trunc_sat_f32_u` - // - `i64.trunc_sat_f64_s` - // - `i64.trunc_sat_f64_u` - // - // See https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/nontrapping-float-to-int-conversion/Overview.md - CoreFeatureNonTrappingFloatToIntConversion - - // CoreFeatureReferenceTypes enables various instructions and features - // related to table and new reference types. This is included in - // CoreFeaturesV2, but not CoreFeaturesV1. - // - // - Introduction of new value types: `funcref` and `externref`. - // - Support for the following new instructions: - // - `ref.null` - // - `ref.func` - // - `ref.is_null` - // - `table.fill` - // - `table.get` - // - `table.grow` - // - `table.set` - // - `table.size` - // - Support for multiple tables per module: - // - `call_indirect`, `table.init`, `table.copy` and `elem.drop` - // - Support for instructions can take non-zero table index. - // - Element segments can take non-zero table index. - // - // Note: "reference-types" is mixed with the "bulk-memory-operations" - // proposal due to the WebAssembly Working Group merging them - // "mutually dependent". Therefore, enabling this feature requires enabling - // CoreFeatureBulkMemoryOperations, and vice-versa. - // - // See https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/bulk-memory-operations/Overview.md - // https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/reference-types/Overview.md and - // https://github.com/WebAssembly/spec/pull/1287 - CoreFeatureReferenceTypes - - // CoreFeatureSignExtensionOps enables sign extension instructions - // ("sign-extension-ops"). This is included in CoreFeaturesV2, but not - // CoreFeaturesV1. - // - // Adds instructions: - // - `i32.extend8_s` - // - `i32.extend16_s` - // - `i64.extend8_s` - // - `i64.extend16_s` - // - `i64.extend32_s` - // - // See https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/sign-extension-ops/Overview.md - CoreFeatureSignExtensionOps - - // CoreFeatureSIMD enables the vector value type and vector instructions - // (aka SIMD). This is included in CoreFeaturesV2, but not CoreFeaturesV1. - // - // Note: The instruction list is too long to enumerate in godoc. - // See https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/simd/SIMD.md - CoreFeatureSIMD - - // Update experimental/features.go when adding elements here. -) - -// SetEnabled enables or disables the feature or group of features. -func (f CoreFeatures) SetEnabled(feature CoreFeatures, val bool) CoreFeatures { - if val { - return f | feature - } - return f &^ feature -} - -// IsEnabled returns true if the feature (or group of features) is enabled. -func (f CoreFeatures) IsEnabled(feature CoreFeatures) bool { - return f&feature != 0 -} - -// RequireEnabled returns an error if the feature (or group of features) is not -// enabled. -func (f CoreFeatures) RequireEnabled(feature CoreFeatures) error { - if f&feature == 0 { - return fmt.Errorf("feature %q is disabled", feature) - } - return nil -} - -// String implements fmt.Stringer by returning each enabled feature. -func (f CoreFeatures) String() string { - var builder strings.Builder - for i := 0; i <= 63; i++ { // cycle through all bits to reduce code and maintenance - target := CoreFeatures(1 << i) - if f.IsEnabled(target) { - if name := featureName(target); name != "" { - if builder.Len() > 0 { - builder.WriteByte('|') - } - builder.WriteString(name) - } - } - } - return builder.String() -} - -func featureName(f CoreFeatures) string { - switch f { - case CoreFeatureMutableGlobal: - // match https://github.com/WebAssembly/mutable-global - return "mutable-global" - case CoreFeatureSignExtensionOps: - // match https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/sign-extension-ops/Overview.md - return "sign-extension-ops" - case CoreFeatureMultiValue: - // match https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/multi-value/Overview.md - return "multi-value" - case CoreFeatureNonTrappingFloatToIntConversion: - // match https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/nontrapping-float-to-int-conversion/Overview.md - return "nontrapping-float-to-int-conversion" - case CoreFeatureBulkMemoryOperations: - // match https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/bulk-memory-operations/Overview.md - return "bulk-memory-operations" - case CoreFeatureReferenceTypes: - // match https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/reference-types/Overview.md - return "reference-types" - case CoreFeatureSIMD: - // match https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/simd/SIMD.md - return "simd" - } - return "" -} |