~ chicken-core (chicken-5) 37cf50fe7f4dd2335fa330ab9538d245f1f58a06


commit 37cf50fe7f4dd2335fa330ab9538d245f1f58a06
Author:     Peter Bex <peter.bex@xs4all.nl>
AuthorDate: Sat Aug 17 20:27:28 2013 +0200
Commit:     Moritz Heidkamp <moritz@twoticketsplease.de>
CommitDate: Tue Aug 20 22:12:14 2013 +0200

    Clean up 64-bit detection logic (fixes #979)
    
    Affects C_SIXTY_FOUR and C_LLP. Also add some notes about C_NONUNIX
    being misleading and the check around unistd.h, inttypes.h and sys/types
    being very unsemantical (it's completely unclear what's being checked
    there).
    
    Signed-off-by: Moritz Heidkamp <moritz@twoticketsplease.de>

diff --git a/chicken.h b/chicken.h
index d828a668..044dddef 100644
--- a/chicken.h
+++ b/chicken.h
@@ -61,16 +61,8 @@
 
 /* Kind of platform */
 
-#ifndef C_SIXTY_FOUR
-# if defined (__alpha__) || defined(__ia64__) || defined(__x86_64__) || defined(__LP64__) || defined(__powerpc64__)
-#   define C_SIXTY_FOUR
-# elif (defined(__sparc_v9__) || defined(__sparcv9)) && defined(__arch64__)
-#   define C_SIXTY_FOUR
-# elif defined(__mips64) && (!defined(__GNUC__) || _MIPS_SZPTR == 64)
-#   define C_SIXTY_FOUR
-# elif defined(__MINGW64__)
-#   define C_SIXTY_FOUR
-# endif
+#if defined(__LP64__) || defined(_LP64) || defined(__MINGW64__) || defined(_WIN64)
+# define C_SIXTY_FOUR
 #endif
 
 #if defined(__APPLE__) && defined(__MACH__)
@@ -86,6 +78,10 @@
 #endif
 
 #if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__MWERKS__)
+/*
+ * XXX This should probably be renamed or changed because it's misleading.
+ * For example, Haiku is not a Unix either, but this doesn't get defined there.
+ */
 # define C_NONUNIX
 #endif
 
@@ -93,7 +89,7 @@
 # define C_SOLARIS
 #endif
 
-#ifdef __MINGW64__
+#if defined(__MINGW64__) || defined(_WIN64)
 # define C_LLP
 #endif
 
@@ -110,6 +106,7 @@
 #include <time.h>
 #include <math.h>
 
+/* This check is exceedingly strange */
 #if !defined(C_NONUNIX) || defined(__MINGW32__) || defined(__WATCOMC__)
 # include <unistd.h>
 # include <inttypes.h>
@@ -556,7 +553,7 @@ static inline int isinf_ld (long double x)
 #define C_S64_MIN    INT64_MIN
 #define C_S64_MAX    INT64_MAX
 
-#if defined(C_LLP) && defined(C_SIXTY_FOUR)
+#if defined(C_LLP)
 # define C_long                   C_s64
 # ifndef LONG_LONG_MAX
 #  define C_LONG_MAX              LLONG_MAX
diff --git a/runtime.c b/runtime.c
index c018f8bc..bc7d7d32 100644
--- a/runtime.c
+++ b/runtime.c
@@ -6074,6 +6074,7 @@ void C_ccall C_apply(C_word c, C_word closure, C_word k, C_word fn, ...)
   /* 3 additional args + 1 slot for stack-pointer + two for stack-alignment to 16 bytes */
   buf = alloca((n + 6) * sizeof(C_word));
 # ifdef __x86_64__
+  /* XXX Shouldn't this check for C_SIXTY_FOUR in general? */
   buf = (void *)C_align16((C_uword)buf);
 # endif
   buf[ 0 ] = n + 2;
Trap