1// Copyright 2018 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#if !V8_ENABLE_WEBASSEMBLY 6#error This header should only be included if WebAssembly is enabled. 7#endif // !V8_ENABLE_WEBASSEMBLY 8 9#ifndef V8_WASM_WASM_FEATURE_FLAGS_H_ 10#define V8_WASM_WASM_FEATURE_FLAGS_H_ 11 12// See https://github.com/WebAssembly/proposals for an overview of current 13// WebAssembly proposals. 14 15// Experimental features (disabled by default). 16#define FOREACH_WASM_EXPERIMENTAL_FEATURE_FLAG(V) /* (force 80 columns) */ \ 17 /* No official proposal (yet?). */ \ 18 /* V8 side owner: clemensb */ \ 19 V(compilation_hints, "compilation hints section", false) \ 20 \ 21 /* GC proposal (early prototype, might change dramatically) */ \ 22 /* Official proposal: https://github.com/WebAssembly/gc */ \ 23 /* Prototype engineering spec: https://bit.ly/3cWcm6Q */ \ 24 /* V8 side owner: jkummerow */ \ 25 V(gc, "garbage collection", false) \ 26 \ 27 /* Non-specified, V8-only experimental additions to the GC proposal */ \ 28 /* V8 side owner: jkummerow */ \ 29 V(nn_locals, \ 30 "allow non-defaultable/non-nullable locals, validated with 'until end of " \ 31 "block' semantics", \ 32 false) \ 33 V(unsafe_nn_locals, \ 34 "allow non-defaultable/non-nullable locals, no validation", false) \ 35 V(assume_ref_cast_succeeds, \ 36 "assume ref.cast always succeeds and skip the related type check " \ 37 "(unsafe)", \ 38 false) \ 39 V(skip_null_checks, \ 40 "skip null checks for call.ref and array and struct operations (unsafe)", \ 41 false) \ 42 V(skip_bounds_checks, "skip array bounds checks (unsafe)", false) \ 43 \ 44 /* Typed function references proposal. */ \ 45 /* Official proposal: https://github.com/WebAssembly/function-references */ \ 46 /* V8 side owner: manoskouk */ \ 47 V(typed_funcref, "typed function references", false) \ 48 \ 49 /* Memory64 proposal. */ \ 50 /* https://github.com/WebAssembly/memory64 */ \ 51 /* V8 side owner: clemensb */ \ 52 V(memory64, "memory64", false) \ 53 \ 54 /* Relaxed SIMD proposal. */ \ 55 /* https://github.com/WebAssembly/relaxed-simd */ \ 56 /* V8 side owner: zhin */ \ 57 V(relaxed_simd, "relaxed simd", false) \ 58 \ 59 /* Branch Hinting proposal. */ \ 60 /* https://github.com/WebAssembly/branch-hinting */ \ 61 /* V8 side owner: jkummerow */ \ 62 V(branch_hinting, "branch hinting", false) \ 63 \ 64 /* Stack Switching proposal. */ \ 65 /* https://github.com/WebAssembly/stack-switching */ \ 66 /* V8 side owner: thibaudm, fgm */ \ 67 V(stack_switching, "stack switching", false) \ 68 \ 69 /* Extended Constant Expressions Proposal. */ \ 70 /* https://github.com/WebAssembly/extended-const */ \ 71 /* V8 side owner: manoskouk */ \ 72 V(extended_const, "extended constant expressions", false) 73 74// ############################################################################# 75// Staged features (disabled by default, but enabled via --wasm-staging (also 76// exposed as chrome://flags/#enable-experimental-webassembly-features). Staged 77// features get limited fuzzer coverage, and should come with their own tests. 78// They are not run through all fuzzers though and don't get much exposure in 79// the wild. Staged features do not necessarily be fully stabilized. They should 80// be shipped with enough lead time to the next branch to allow for 81// stabilization. 82#define FOREACH_WASM_STAGING_FEATURE_FLAG(V) /* (force 80 columns) */ \ 83 /* Tail call / return call proposal. */ \ 84 /* https://github.com/webassembly/tail-call */ \ 85 /* V8 side owner: thibaudm */ \ 86 /* Staged in v8.7 * */ \ 87 V(return_call, "return call opcodes", false) \ 88 \ 89 /* Type reflection proposal. */ \ 90 /* https://github.com/webassembly/js-types */ \ 91 /* V8 side owner: ahaas */ \ 92 /* Staged in v7.8. */ \ 93 V(type_reflection, "wasm type reflection in JS", false) 94 95// ############################################################################# 96// Shipped features (enabled by default). Remove the feature flag once they hit 97// stable and are expected to stay enabled. 98#define FOREACH_WASM_SHIPPED_FEATURE_FLAG(V) /* (force 80 columns) */ \ 99 /* Fixed-width SIMD operations. */ \ 100 /* https://github.com/webassembly/simd */ \ 101 /* V8 side owner: gdeepti, zhin */ \ 102 /* Staged in v8.7 * */ \ 103 /* Shipped in v9.1 * */ \ 104 V(simd, "SIMD opcodes", true) \ 105 \ 106 /* Threads proposal. */ \ 107 /* https://github.com/webassembly/threads */ \ 108 /* NOTE: This is enabled via chromium flag on desktop systems since v7.4, */ \ 109 /* and on android from 9.1. Threads are only available when */ \ 110 /* SharedArrayBuffers are enabled as well, and are gated by COOP/COEP */ \ 111 /* headers, more fine grained control is in the chromium codebase */ \ 112 /* ITS: https://groups.google.com/a/chromium.org/d/msg/blink-dev/ */ \ 113 /* tD6np-OG2PU/rcNGROOMFQAJ */ \ 114 /* V8 side owner: gdeepti */ \ 115 V(threads, "thread opcodes", true) \ 116 \ 117 /* Exception handling proposal. */ \ 118 /* https://github.com/WebAssembly/exception-handling */ \ 119 /* V8 side owner: thibaudm */ \ 120 /* Staged in v8.9 */ \ 121 /* Shipped in v9.5 */ \ 122 V(eh, "exception handling opcodes", true) \ 123 \ 124// Combination of all available wasm feature flags. 125#define FOREACH_WASM_FEATURE_FLAG(V) \ 126 FOREACH_WASM_EXPERIMENTAL_FEATURE_FLAG(V) \ 127 FOREACH_WASM_STAGING_FEATURE_FLAG(V) \ 128 FOREACH_WASM_SHIPPED_FEATURE_FLAG(V) 129 130#endif // V8_WASM_WASM_FEATURE_FLAGS_H_ 131