shithub: MicroHs

Download patch

ref: cfcf05fe424c3ab22d98ba8333b7256b64587d39
parent: 0b49c736b78cd1a075a09c7a5b6b11d60298ee3c
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Thu Aug 24 14:23:29 EDT 2023

Make it a little nicer.

--- a/src/runtime/eval.c
+++ b/src/runtime/eval.c
@@ -11,10 +11,22 @@
 #if defined(__MINGW32__)
 #define ffsl __builtin_ffsll
 #endif
+
 #if defined(_MSC_VER)
+
+/* Make Microsoft compiler a little more compatible. */
+
 #pragma warning(disable : 4996)
 #pragma intrinsic(_BitScanForward)
-#define FFSL(ret, arg) do { unsigned long r; if (_BitScanForward64(&r, (arg))) { (ret) = r+1; } else (ret) = 0; } while(0)
+static inline int
+ffsl(int64_t arg)
+{
+  unsigned long r;
+  if (_BitScanForward64(&r, arg))
+    return (int)(r+1);
+  else
+    return 0;
+}
 #define PCOMMA ""
 
 #define WIN32_LEAN_AND_MEAN
@@ -47,7 +59,6 @@
 
 #include <sys/time.h>
 
-#define FFSL(ret, arg) ((ret) = ffsl(arg))
 #define PCOMMA "'"
 
 #endif  /* !defined(_MSC_VER) */
@@ -231,7 +242,7 @@
   int k;                        /* will contain bit pos + 1 */
   for(;;) {
     uint64_t word = free_map[i];
-    FFSL(k, word);
+    k = ffsl(word);
     if (k)
       break;
     i++;
--