blob: 8c58ba6eafd14e4ce9187c31ed140fed6c6d2f5c [file] [log] [blame]
//===- 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;
};
} // namespace Ice
#endif // ALLOW_WASM
#endif // SUBZERO_SRC_WASMTRANSLATOR_H