--- runtime.c.orig 2006-10-07 22:37:56.281774111 -0500 +++ runtime.c 2006-10-07 22:43:38.348058809 -0500 @@ -182,14 +182,14 @@ #define MUTATION_STACK_GROWTH 1024 #define FILE_INFO_SIZE 7 -#define FLONUM_PRINT_PRECISION 15 - -#ifdef C_SIXTY_FOUR -# define WORDS_PER_FLONUM 2 +#ifdef C_DOUBLE_IS_32_BITS + #define FLONUM_PRINT_PRECISION 7 #else -# define WORDS_PER_FLONUM 4 + #define FLONUM_PRINT_PRECISION 15 #endif +#define WORDS_PER_FLONUM C_SIZEOF_FLONUM + #define MAXIMAL_NUMBER_OF_COMMAND_LINE_ARGUMENTS 32 #define INITIAL_TIMER_INTERRUPT_PERIOD 10000 @@ -2268,14 +2268,16 @@ *p0; #ifndef C_SIXTY_FOUR +#ifndef C_DOUBLE_IS_32_BITS /* Align double on 8-byte boundary: */ if(aligned8(p)) ++p; #endif +#endif p0 = p; - *(p++) = C_FLONUM_TYPE | sizeof(double); + *(p++) = C_FLONUM_TAG; *((double *)p) = n; - *ptr = p + sizeof(double) / sizeof(C_word); + *ptr += C_SIZEOF_FLONUM; return (C_word)p0; } @@ -2291,14 +2293,16 @@ return C_fix(n); #ifndef C_SIXTY_FOUR +#ifndef C_DOUBLE_IS_32_BITS /* Align double on 8-byte boundary: */ if(aligned8(p)) ++p; #endif +#endif p0 = p; - *(p++) = C_FLONUM_TYPE | sizeof(double); + *(p++) = C_FLONUM_TAG; *((double *)p) = n; - *ptr = p + sizeof(double) / sizeof(C_word); + *ptr += C_SIZEOF_FLONUM; return (C_word)p0; } --- chicken.h.orig 2006-10-07 22:37:46.140255873 -0500 +++ chicken.h 2006-10-07 22:25:00.750493678 -0500 @@ -39,6 +39,8 @@ #ifndef ___CHICKEN #define ___CHICKEN +#define C_DOUBLE_IS_32_BITS + #if !defined(CMAKE_BUILD) && ((defined(HAVE_CONFIG_H) || defined(HAVE_CHICKEN_CONFIG_H)) && !defined(_MSC_VER)) # include #endif @@ -326,7 +328,11 @@ # define C_STRING_TYPE (0x02000000 | C_BYTEBLOCK_BIT) # define C_PAIR_TYPE (0x03000000) # define C_CLOSURE_TYPE (0x04000000 | C_SPECIALBLOCK_BIT) -# define C_FLONUM_TYPE (0x05000000 | C_BYTEBLOCK_BIT | C_8ALIGN_BIT) +# ifdef C_DOUBLE_IS_32_BITS +# define C_FLONUM_TYPE (0x05000000 | C_BYTEBLOCK_BIT) +# else +# define C_FLONUM_TYPE (0x05000000 | C_BYTEBLOCK_BIT | C_8ALIGN_BIT) +# endif # define C_UNUSED_TYPE (0x06000000) # define C_PORT_TYPE (0x07000000 | C_SPECIALBLOCK_BIT) # define C_STRUCTURE_TYPE (0x08000000) @@ -361,7 +367,11 @@ # define C_SIZEOF_SYMBOL 3 #endif #define C_SIZEOF_INTERNED_SYMBOL(n) (C_SIZEOF_SYMBOL + C_SIZEOF_BUCKET + C_SIZEOF_STRING(n)) -#define C_SIZEOF_FLONUM 4 +#ifdef C_DOUBLE_IS_32_BITS + #define C_SIZEOF_FLONUM 2 +#else + #define C_SIZEOF_FLONUM 4 +#endif #define C_SIZEOF_POINTER 2 #define C_SIZEOF_TAGGED_POINTER 3 #define C_SIZEOF_SWIG_POINTER 3 @@ -376,12 +386,7 @@ #define C_TAGGED_POINTER_TAG (C_TAGGED_POINTER_TYPE | (C_SIZEOF_TAGGED_POINTER - 1)) #define C_SWIG_POINTER_TAG (C_SWIG_POINTER_TYPE | (C_wordstobytes(C_SIZEOF_SWIG_POINTER - 1))) #define C_SYMBOL_TAG (C_SYMBOL_TYPE | (C_SIZEOF_SYMBOL - 1)) - -#ifdef C_SIXTY_FOUR -# define C_FLONUM_TAG (C_FLONUM_TYPE | C_wordstobytes(1)) -#else -# define C_FLONUM_TAG (C_FLONUM_TYPE | C_wordstobytes(2)) -#endif +#define C_FLONUM_TAG (C_FLONUM_TYPE | sizeof(double)) #ifdef C_SIXTY_FOUR # define C_word long