116f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk//===- subzero/src/WasmTranslator.h - WASM to Subzero Translation ---------===// 216f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk// 316f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk// The Subzero Code Generator 416f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk// 516f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk// This file is distributed under the University of Illinois Open Source 616f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk// License. See LICENSE.TXT for details. 716f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk// 816f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk//===----------------------------------------------------------------------===// 916f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk/// 1016f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk/// \file 1116f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk/// \brief Declares a driver for translating Wasm bitcode into PNaCl bitcode. 1216f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk/// 1316f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk//===----------------------------------------------------------------------===// 1416f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk 1516f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk#ifndef SUBZERO_SRC_WASMTRANSLATOR_H 1616f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk#define SUBZERO_SRC_WASMTRANSLATOR_H 1716f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk 18681f90fe6f4930c11d87a63d1c47cbb95a57f61bJohn Porto#if ALLOW_WASM 19681f90fe6f4930c11d87a63d1c47cbb95a57f61bJohn Porto 2016f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk#include "IceGlobalContext.h" 2116f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk#include "IceTranslator.h" 2216f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk 2367c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk#ifdef __clang__ 2467c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk#pragma clang diagnostic push 2567c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk#pragma clang diagnostic ignored "-Wunused-parameter" 2667c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk#endif // __clang__ 2767c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk 2867c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk#include "llvm/Support/StreamingMemoryObject.h" 2967c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk 3067c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk#ifdef __clang__ 3167c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk#pragma clang diagnostic pop 3267c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk#endif // __clang__ 3367c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk 3416f8061ca23653172ea4c1a43659bb0501b5b474Eric Holknamespace v8 { 3516f8061ca23653172ea4c1a43659bb0501b5b474Eric Holknamespace internal { 3616f8061ca23653172ea4c1a43659bb0501b5b474Eric Holkclass Zone; 3716f8061ca23653172ea4c1a43659bb0501b5b474Eric Holknamespace wasm { 3867c7c4161ad5bcf234357348a421e313932a8ee3Eric Holkstruct FunctionBody; 3916f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk} // end of namespace wasm 4016f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk} // end of namespace internal 4116f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk} // end of namespace v8 4216f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk 4316f8061ca23653172ea4c1a43659bb0501b5b474Eric Holknamespace Ice { 4416f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk 4516f8061ca23653172ea4c1a43659bb0501b5b474Eric Holkclass WasmTranslator : public Translator { 4616f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk WasmTranslator() = delete; 4716f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk WasmTranslator(const WasmTranslator &) = delete; 4816f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk WasmTranslator &operator=(const WasmTranslator &) = delete; 4916f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk 5016f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk template <typename F = std::function<void(Ostream &)>> void log(F Fn) { 5116f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk if (BuildDefs::dump() && (getFlags().getVerbose() & IceV_Wasm)) { 5216f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk Fn(Ctx->getStrDump()); 5316f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk Ctx->getStrDump().flush(); 5416f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk } 5516f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk } 5616f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk 5716f8061ca23653172ea4c1a43659bb0501b5b474Eric Holkpublic: 5816f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk explicit WasmTranslator(GlobalContext *Ctx); 5916f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk 6016f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk void translate(const std::string &IRFilename, 6116f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk std::unique_ptr<llvm::DataStreamer> InputStream); 6216f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk 6316f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk /// Translates a single Wasm function. 6416f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk /// 6516f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk /// Parameters: 6616f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk /// Zone - an arena for the V8 code to allocate from. 6767c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk /// Body - information about the function to translate 6867c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk std::unique_ptr<Cfg> 6967c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk translateFunction(v8::internal::Zone *Zone, 7067c7c4161ad5bcf234357348a421e313932a8ee3Eric Holk v8::internal::wasm::FunctionBody &Body); 7116f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk 7216f8061ca23653172ea4c1a43659bb0501b5b474Eric Holkprivate: 7387def2c8fa994f2daf87a090763a472335622697Eric Holk std::vector<uint8_t> Buffer; 7416f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk}; 7516f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk} 76681f90fe6f4930c11d87a63d1c47cbb95a57f61bJohn Porto 77681f90fe6f4930c11d87a63d1c47cbb95a57f61bJohn Porto#endif // ALLOW_WASM 78681f90fe6f4930c11d87a63d1c47cbb95a57f61bJohn Porto 7916f8061ca23653172ea4c1a43659bb0501b5b474Eric Holk#endif // SUBZERO_SRC_WASMTRANSLATOR_H 80