diff options
Diffstat (limited to 'deps/v8/src/wasm/js-to-wasm-wrapper-cache.h')
-rw-r--r-- | deps/v8/src/wasm/js-to-wasm-wrapper-cache.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/deps/v8/src/wasm/js-to-wasm-wrapper-cache.h b/deps/v8/src/wasm/js-to-wasm-wrapper-cache.h new file mode 100644 index 0000000000..ff5fb8de72 --- /dev/null +++ b/deps/v8/src/wasm/js-to-wasm-wrapper-cache.h @@ -0,0 +1,41 @@ +// 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. + +#ifndef V8_WASM_JS_TO_WASM_WRAPPER_CACHE_H_ +#define V8_WASM_JS_TO_WASM_WRAPPER_CACHE_H_ + +#include "src/compiler/wasm-compiler.h" +#include "src/counters.h" +#include "src/wasm/value-type.h" +#include "src/wasm/wasm-code-manager.h" + +namespace v8 { +namespace internal { +namespace wasm { + +class JSToWasmWrapperCache { + public: + Handle<Code> GetOrCompileJSToWasmWrapper(Isolate* isolate, FunctionSig* sig, + bool is_import) { + std::pair<bool, FunctionSig> key(is_import, *sig); + Handle<Code>& cached = cache_[key]; + if (cached.is_null()) { + cached = compiler::CompileJSToWasmWrapper(isolate, sig, is_import) + .ToHandleChecked(); + } + return cached; + } + + private: + // We generate different code for calling imports than calling wasm functions + // in this module. Both are cached separately. + using CacheKey = std::pair<bool, FunctionSig>; + std::unordered_map<CacheKey, Handle<Code>, base::hash<CacheKey>> cache_; +}; + +} // namespace wasm +} // namespace internal +} // namespace v8 + +#endif // V8_WASM_JS_TO_WASM_WRAPPER_CACHE_H_ |