Author: azakai Date: Tue Apr 2 18:08:35 2019 New Revision: 357552 URL: http://llvm.org/viewvc/llvm-project?rev=357552&view=rev Log: [WebAssembly] Add Emscripten OS definition + small_printf
The Emscripten OS provides a definition of __EMSCRIPTEN__, and also that it supports iprintf optimizations. Also define small_printf optimizations, which is a printf with float support but not long double (which in wasm can be useful since long doubles are 128 bit and force linking of float128 emulation code). This part is based on sunfish's https://reviews.llvm.org/D57620 (which can't land yet since the WASI integration isn't ready yet). Differential Revision: https://reviews.llvm.org/D60167 Modified: cfe/trunk/lib/Basic/Targets.cpp cfe/trunk/lib/Basic/Targets/OSTargets.h Modified: cfe/trunk/lib/Basic/Targets.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=357552&r1=357551&r2=357552&view=diff ============================================================================== --- cfe/trunk/lib/Basic/Targets.cpp (original) +++ cfe/trunk/lib/Basic/Targets.cpp Tue Apr 2 18:08:35 2019 @@ -576,6 +576,8 @@ TargetInfo *AllocateTarget(const llvm::T switch (Triple.getOS()) { case llvm::Triple::WASI: return new WASITargetInfo<WebAssembly32TargetInfo>(Triple, Opts); + case llvm::Triple::Emscripten: + return new EmscriptenTargetInfo<WebAssembly32TargetInfo>(Triple, Opts); case llvm::Triple::UnknownOS: return new WebAssemblyOSTargetInfo<WebAssembly32TargetInfo>(Triple, Opts); default: @@ -589,6 +591,8 @@ TargetInfo *AllocateTarget(const llvm::T switch (Triple.getOS()) { case llvm::Triple::WASI: return new WASITargetInfo<WebAssembly64TargetInfo>(Triple, Opts); + case llvm::Triple::Emscripten: + return new EmscriptenTargetInfo<WebAssembly64TargetInfo>(Triple, Opts); case llvm::Triple::UnknownOS: return new WebAssemblyOSTargetInfo<WebAssembly64TargetInfo>(Triple, Opts); default: Modified: cfe/trunk/lib/Basic/Targets/OSTargets.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/OSTargets.h?rev=357552&r1=357551&r2=357552&view=diff ============================================================================== --- cfe/trunk/lib/Basic/Targets/OSTargets.h (original) +++ cfe/trunk/lib/Basic/Targets/OSTargets.h Tue Apr 2 18:08:35 2019 @@ -848,6 +848,21 @@ public: : WebAssemblyOSTargetInfo<Target>(Triple, Opts) {} }; +// Emscripten target +template <typename Target> +class LLVM_LIBRARY_VISIBILITY EmscriptenTargetInfo + : public WebAssemblyOSTargetInfo<Target> { + void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, + MacroBuilder &Builder) const final { + WebAssemblyOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder); + Builder.defineMacro("__EMSCRIPTEN__"); + } + +public: + explicit EmscriptenTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) + : WebAssemblyOSTargetInfo<Target>(Triple, Opts) {} +}; + } // namespace targets } // namespace clang #endif // LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits