Fix the format specifier for Int64/Word64 on Windows
[ghc-hetmet.git] / includes / Rts.h
index 3bec799..3318402 100644 (file)
@@ -51,7 +51,25 @@ extern "C" {
 // Symbols that are extern, but private to the RTS, are declared
 // with visibility "hidden" to hide them outside the RTS shared
 // library.
+#if !defined(mingw32_HOST_OS)
 #define RTS_PRIVATE  GNUC3_ATTRIBUTE(visibility("hidden"))
+#else
+#define RTS_PRIVATE  /* disabled: RTS_PRIVATE */
+#endif
+
+#if __GNUC__ > 4
+#define BEGIN_RTS_PRIVATE #pragma GCC visibility push(hidden)
+#define END_RTS_PRIVATE   #pragma GCC visibility pop
+#else
+#define BEGIN_RTS_PRIVATE /* disabled: BEGIN_RTS_PRIVATE */
+#define END_RTS_PRIVATE   /* disabled: END_RTS_PRIVATE */
+#endif
+
+#if __GNUC__ > 4
+#define RTS_UNLIKELY(p) __builtin_expect((p),0)
+#else
+#define RTS_UNLIKELY(p) p
+#endif
 
 /* Fix for mingw stat problem (done here so it's early enough) */
 #ifdef mingw32_HOST_OS
@@ -125,9 +143,16 @@ void _assertFail(const char *filename, unsigned int linenum)
 #define FMT_Word64 "lu"
 #define FMT_Int64  "ld"
 #else
+#if defined(mingw32_HOST_OS)
+/* mingw doesn't understand %llu/%lld - it treats them as 32-bit
+   rather than 64-bit */
+#define FMT_Word64 "I64u"
+#define FMT_Int64  "I64d"
+#else
 #define FMT_Word64 "llu"
 #define FMT_Int64  "lld"
 #endif
+#endif
 
 /* -----------------------------------------------------------------------------
    Include everything STG-ish