Hm, I wonder if it's the negative array index that breaks it. Could
you try this patch:
diff --git a/src/port.h b/src/port.h
index 25b7f86..427ebba 100644
--- a/src/port.h
+++ b/src/port.h
@@ -338,12 +338,12 @@ long long gethrtime(void);
#define MAKE_NAN() (nan_.d[-1])
#else
#ifdef DOUBLE_IS_IEEE_LITTLE
-#define DECLARE_INF static const struct { unsigned char c[8]; double d[1]; } \
- inf_ = { { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f }, { 0.0 } };
-#define DECLARE_NAN static const struct { unsigned char c[8]; double d[1]; } \
- nan_ = { { 0, 0, 0, 0, 0, 0, 0xf8, 0x7f }, { 0.0 } };
-#define MAKE_INF(s) ((s)*inf_.d[-1])
-#define MAKE_NAN() (nan_.d[-1])
+#define DECLARE_INF static const union { unsigned char c[8]; double d[1]; } \
+ inf_ = { { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f } };
+#define DECLARE_NAN static const union { unsigned char c[8]; double d[1]; } \
+ nan_ = { { 0, 0, 0, 0, 0, 0, 0xf8, 0x7f } };
+#define MAKE_INF(s) ((s)*inf_.d[0])
+#define MAKE_NAN() (nan_.d[0])
#else
#ifdef FLOAT_IS_IEEE_BIG
#define DECLARE_INF static const struct { unsigned char c[4]; float f[1]; } \
@@ -354,12 +354,12 @@ long long gethrtime(void);
#define MAKE_NAN() (nan_.f[-1])
#else
#ifdef FLOAT_IS_IEEE_LITTLE
-#define DECLARE_INF static const struct { unsigned char c[4]; float f[1]; } \
- inf_ = { { 0, 0, 0x80, 0x7f }, { 0.0 } };
-#define DECLARE_NAN static const struct { unsigned char c[4]; float f[1]; } \
- nan_ = { { 0, 0, 0xc0, 0x7f }, { 0.0 } };
-#define MAKE_INF(s) ((s)*inf_.f[-1])
-#define MAKE_NAN() (nan_.f[-1])
+#define DECLARE_INF static const union { unsigned char c[4]; float f[1]; } \
+ inf_ = { { 0, 0, 0x80, 0x7f } };
+#define DECLARE_NAN static const union { unsigned char c[4]; float f[1]; } \
+ nan_ = { { 0, 0, 0xc0, 0x7f } };
+#define MAKE_INF(s) ((s)*inf_.f[0])
+#define MAKE_NAN() (nan_.f[0])
#else
#define DECLARE_INF