// Copyright 2018 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #if !V8_ENABLE_WEBASSEMBLY #error This header should only be included if WebAssembly is enabled. #endif // !V8_ENABLE_WEBASSEMBLY #ifndef V8_WASM_COMPILATION_ENVIRONMENT_H_ #define V8_WASM_COMPILATION_ENVIRONMENT_H_ #include <memory> #include <optional> #include "src/wasm/wasm-features.h" #include "src/wasm/wasm-limits.h" #include "src/wasm/wasm-module.h" #include "src/wasm/wasm-tier.h" namespace v8 { class CFunctionInfo; class JobHandle; namespace internal { class Counters; namespace wasm { class NativeModule; class WasmCode; class WasmEngine; class WasmError; enum DynamicTiering : bool { … }; // Further information about a location for a deopt: A call_ref can either be // just an inline call (that didn't cause a deopt) with a deopt happening within // the inlinee or it could be the deopt point itself. This changes whether the // relevant stackstate is the one before the call or after the call. enum class LocationKindForDeopt : uint8_t { … }; // The Arm architecture does not specify the results in memory of // partially-in-bound writes, which does not align with the wasm spec. This // affects when trap handlers can be used for OOB detection; however, Mac // systems with Apple silicon currently do provide trapping beahviour for // partially-out-of-bound writes, so we assume we can rely on that on MacOS, // since doing so provides better performance for writes. #if V8_TARGET_ARCH_ARM64 && !V8_OS_MACOS constexpr bool kPartialOOBWritesAreNoops = false; #else constexpr bool kPartialOOBWritesAreNoops = …; #endif // The {CompilationEnv} encapsulates the module data that is used during // compilation. CompilationEnvs are shareable across multiple compilations. struct CompilationEnv { … }; // The wire bytes are either owned by the StreamingDecoder, or (after streaming) // by the NativeModule. This class abstracts over the storage location. class WireBytesStorage { … }; // Callbacks will receive either {kFailedCompilation} or // {kFinishedBaselineCompilation}. enum class CompilationEvent : uint8_t { … }; class V8_EXPORT_PRIVATE CompilationEventCallback { … }; // The implementation of {CompilationState} lives in module-compiler.cc. // This is the PIMPL interface to that private class. class V8_EXPORT_PRIVATE CompilationState { … }; } // namespace wasm } // namespace internal } // namespace v8 #endif // V8_WASM_COMPILATION_ENVIRONMENT_H_