From 683554c2ab01374ebe28f7f350c96f20081895a8 Mon Sep 17 00:00:00 2001 From: McKay Marston Date: Sat, 20 Feb 2021 12:22:00 +0000 Subject: [PATCH] make 9front "work" again by properly handling 64-bit typedefs --- include/chibi/bignum.h | 4 ++++ include/chibi/features.h | 2 +- include/chibi/sexp.h | 21 +++++++++++++++++++++ mkfile | 4 ++-- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/include/chibi/bignum.h b/include/chibi/bignum.h index 54792ace..dc40ccab 100644 --- a/include/chibi/bignum.h +++ b/include/chibi/bignum.h @@ -8,7 +8,11 @@ #include "chibi/eval.h" #if SEXP_USE_CUSTOM_LONG_LONGS +#ifdef PLAN9 +#include +#else #include +#endif typedef struct { uint64_t hi; diff --git a/include/chibi/features.h b/include/chibi/features.h index 644c416e..1b39a027 100644 --- a/include/chibi/features.h +++ b/include/chibi/features.h @@ -308,7 +308,7 @@ /************************************************************************/ #ifndef SEXP_64_BIT -#if defined(__amd64) || defined(__x86_64) || defined(_WIN64) || defined(_Wp64) || defined(__LP64__) || defined(__PPC64__) || defined(__mips64__) || defined(__sparc64__) +#if defined(__amd64) || defined(__x86_64) || defined(_WIN64) || defined(_Wp64) || defined(__LP64__) || defined(__PPC64__) || defined(__mips64__) || defined(__sparc64__) || defined(__arm64) #define SEXP_64_BIT 1 #else #define SEXP_64_BIT 0 diff --git a/include/chibi/sexp.h b/include/chibi/sexp.h index e34d9cbf..28d2a62e 100644 --- a/include/chibi/sexp.h +++ b/include/chibi/sexp.h @@ -231,9 +231,15 @@ typedef int sexp_sint_t; #define sexp_heap_align(n) sexp_align(n, 5) #define sexp_heap_chunks(n) (sexp_heap_align(n)>>5) #elif SEXP_64_BIT +#if PLAN9 +typedef uintptr sexp_tag_t; +typedef uintptr sexp_uint_t; +typedef intptr sexp_sint_t; +#else typedef unsigned int sexp_tag_t; typedef unsigned long sexp_uint_t; typedef long sexp_sint_t; +#endif #define SEXP_PRIdFIXNUM "ld" #define sexp_heap_align(n) sexp_align(n, 5) #define sexp_heap_chunks(n) (sexp_heap_align(n)>>5) @@ -244,6 +250,13 @@ typedef int sexp_sint_t; #define SEXP_PRIdFIXNUM "d" #define sexp_heap_align(n) sexp_align(n, 5) #define sexp_heap_chunks(n) (sexp_heap_align(n)>>5) +#elif PLAN9 +typedef uintptr sexp_tag_t; +typedef unsigned int sexp_uint_t; +typedef int sexp_sint_t; +#define SEXP_PRIdFIXNUM "d" +#define sexp_heap_align(n) sexp_align(n, 4) +#define sexp_heap_chunks(n) (sexp_heap_align(n)>>4) #else typedef unsigned short sexp_tag_t; typedef unsigned int sexp_uint_t; @@ -260,7 +273,11 @@ typedef int sexp_sint_t; #ifdef SEXP_USE_INTTYPES +#ifdef PLAN9 +#include +#else #include +#endif # ifdef UINT8_MAX # define SEXP_UINT8_DEFINED 1 typedef uint8_t sexp_uint8_t; @@ -276,9 +293,13 @@ typedef int32_t sexp_int32_t; # else # include # if SEXP_USE_UNIFORM_VECTOR_LITERALS +# ifdef PLAN9 +# include +# else # include # endif # endif +# endif # if UCHAR_MAX == 255 # define SEXP_UINT8_DEFINED 1 typedef unsigned char sexp_uint8_t; diff --git a/mkfile b/mkfile index 791f949b..1ef6e48a 100644 --- a/mkfile +++ b/mkfile @@ -7,7 +7,7 @@ MODDIR=/sys/lib/chibi-scheme CHIBI=./$O.out GENSTATIC=./tools/chibi-genstatic -CPPFLAGS= -Iinclude -DPLAN9 -DSEXP_USE_GREEN_THREADS=0 +CPPFLAGS= -Iinclude -DPLAN9 -DSEXP_USE_GREEN_THREADS=0 -D__$objtype CFLAGS= -p $CPPFLAGS CFLAGS_STATIC=$CFLAGS -DSEXP_USE_STATIC_LIBS @@ -35,7 +35,7 @@ COMPILED_LIBS = $CHIBI_COMPILED_LIBS $CHIBI_IO_COMPILED_LIBS \