r357552 - [WebAssembly] Add Emscripten OS definition + small_printf

Alon Zakai via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 2 18:08:36 PDT 2019


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




More information about the cfe-commits mailing list