|  | //===- subzero/src/WasmTranslator.h - WASM to Subzero Translation ---------===// | 
|  | // | 
|  | //                        The Subzero Code Generator | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | /// | 
|  | /// \file | 
|  | /// \brief Declares a driver for translating Wasm bitcode into PNaCl bitcode. | 
|  | /// | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef SUBZERO_SRC_WASMTRANSLATOR_H | 
|  | #define SUBZERO_SRC_WASMTRANSLATOR_H | 
|  |  | 
|  | #if ALLOW_WASM | 
|  |  | 
|  | #include "IceGlobalContext.h" | 
|  | #include "IceTranslator.h" | 
|  |  | 
|  | #ifdef __clang__ | 
|  | #pragma clang diagnostic push | 
|  | #pragma clang diagnostic ignored "-Wunused-parameter" | 
|  | #endif // __clang__ | 
|  |  | 
|  | #include "llvm/Support/StreamingMemoryObject.h" | 
|  |  | 
|  | #ifdef __clang__ | 
|  | #pragma clang diagnostic pop | 
|  | #endif // __clang__ | 
|  |  | 
|  | namespace v8 { | 
|  | namespace internal { | 
|  | class Zone; | 
|  | namespace wasm { | 
|  | struct FunctionBody; | 
|  | } // end of namespace wasm | 
|  | } // end of namespace internal | 
|  | } // end of namespace v8 | 
|  |  | 
|  | namespace Ice { | 
|  |  | 
|  | class WasmTranslator : public Translator { | 
|  | WasmTranslator() = delete; | 
|  | WasmTranslator(const WasmTranslator &) = delete; | 
|  | WasmTranslator &operator=(const WasmTranslator &) = delete; | 
|  |  | 
|  | template <typename F = std::function<void(Ostream &)>> void log(F Fn) { | 
|  | if (BuildDefs::dump() && (getFlags().getVerbose() & IceV_Wasm)) { | 
|  | Fn(Ctx->getStrDump()); | 
|  | Ctx->getStrDump().flush(); | 
|  | } | 
|  | } | 
|  |  | 
|  | public: | 
|  | explicit WasmTranslator(GlobalContext *Ctx); | 
|  |  | 
|  | void translate(const std::string &IRFilename, | 
|  | std::unique_ptr<llvm::DataStreamer> InputStream); | 
|  |  | 
|  | /// Translates a single Wasm function. | 
|  | /// | 
|  | /// Parameters: | 
|  | ///   Zone - an arena for the V8 code to allocate from. | 
|  | ///   Body - information about the function to translate | 
|  | std::unique_ptr<Cfg> | 
|  | translateFunction(v8::internal::Zone *Zone, | 
|  | v8::internal::wasm::FunctionBody &Body); | 
|  |  | 
|  | private: | 
|  | std::vector<uint8_t> Buffer; | 
|  | }; | 
|  | } | 
|  |  | 
|  | #endif // ALLOW_WASM | 
|  |  | 
|  | #endif // SUBZERO_SRC_WASMTRANSLATOR_H |