diff options
author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2019-11-28 01:08:32 +0100 |
---|---|---|
committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2019-11-28 01:08:32 +0100 |
commit | b7dd40f5f8ea20178e20151da2aed8f1787ac3f3 (patch) | |
tree | 109ae5176bf78be7bcfdd417a1a24f2662e612a2 | |
parent | dbcc589f4577ebb0d6d05e36e2ac1246b56555ed (diff) | |
parent | 3b7e1cffefb39feb9bb6b06e849eceac438f4d5e (diff) | |
download | sparse-b7dd40f5f8ea20178e20151da2aed8f1787ac3f3.tar.gz |
Merge branch 'arch-cleanup' into master
-rw-r--r-- | lib.c | 41 | ||||
-rw-r--r-- | lib.h | 3 | ||||
-rw-r--r-- | machine.h | 26 | ||||
-rw-r--r-- | target.c | 51 | ||||
-rw-r--r-- | validation/preprocessor/predef.c | 2 |
5 files changed, 76 insertions, 47 deletions
@@ -329,8 +329,9 @@ static enum { STANDARD_C89, static int arch_msize_long = 0; int arch_m64 = ARCH_M64_DEFAULT; int arch_big_endian = ARCH_BIG_ENDIAN; -int arch_mach = MACH_NATIVE; int arch_fp_abi = FP_ABI_NATIVE; +int arch_mach = MACH_NATIVE; +int arch_os = OS_NATIVE; int arch_cmodel = CMODEL_UNKNOWN; @@ -1463,7 +1464,7 @@ static void predefined_macros(void) predefined_ctype("WCHAR", wchar_ctype, PTYPE_ALL_T|PTYPE_MIN|PTYPE_TYPE); predefined_ctype("WINT", wint_ctype, PTYPE_ALL_T|PTYPE_MIN|PTYPE_TYPE); predefined_ctype("CHAR16", &ushort_ctype, PTYPE_TYPE); - predefined_ctype("CHAR32", &uint_ctype, PTYPE_TYPE); + predefined_ctype("CHAR32", uint32_ctype, PTYPE_TYPE); predefined_ctype("INT", &int_ctype, PTYPE_ALL); predefined_ctype("LONG", &long_ctype, PTYPE_ALL); @@ -1478,8 +1479,6 @@ static void predefined_macros(void) predefined_ctype("INT64", int64_ctype, PTYPE_MAX|PTYPE_TYPE); predefined_ctype("UINT64", uint64_ctype, PTYPE_MAX|PTYPE_TYPE); - predefined_sizeof("INT128", "", 128); - predefined_ctype("INTMAX", intmax_ctype, PTYPE_MAX|PTYPE_TYPE|PTYPE_WIDTH); predefined_ctype("UINTMAX", uintmax_ctype, PTYPE_MAX|PTYPE_TYPE); predefined_ctype("INTPTR", ssize_t_ctype, PTYPE_MAX|PTYPE_TYPE|PTYPE_WIDTH); @@ -1492,6 +1491,17 @@ static void predefined_macros(void) predefined_sizeof("DOUBLE", "", bits_in_double); predefined_sizeof("LONG_DOUBLE", "", bits_in_longdouble); + switch (arch_mach) { + case MACH_ARM64: + case MACH_MIPS64: + case MACH_PPC64: + case MACH_RISCV64: + case MACH_S390X: + case MACH_SPARC64: + case MACH_X86_64: + predefined_sizeof("INT128", "", 128); + } + predefine("__ORDER_LITTLE_ENDIAN__", 1, "1234"); predefine("__ORDER_BIG_ENDIAN__", 1, "4321"); predefine("__ORDER_PDP_ENDIAN__", 1, "3412"); @@ -1551,8 +1561,7 @@ static void predefined_macros(void) predefine("__m68k__", 1, "1"); break; case MACH_MIPS64: - if (arch_m64 == ARCH_LP64) - predefine("__mips64", 1, "64"); + predefine("__mips64", 1, "64"); /* fall-through */ case MACH_MIPS32: predefine("__mips__", 1, "1"); @@ -1562,11 +1571,9 @@ static void predefined_macros(void) predefine("_MIPS_SZPTR", 1, "%d", ptr_ctype.bit_size); break; case MACH_PPC64: - if (arch_m64 == ARCH_LP64) { - predefine("__powerpc64__", 1, "1"); - predefine("__ppc64__", 1, "1"); - predefine("__PPC64__", 1, "1"); - } + predefine("__powerpc64__", 1, "1"); + predefine("__ppc64__", 1, "1"); + predefine("__PPC64__", 1, "1"); /* fall-through */ case MACH_PPC32: predefine("__powerpc__", 1, "1"); @@ -1588,13 +1595,11 @@ static void predefined_macros(void) predefine("__s390__", 1, "1"); break; case MACH_SPARC64: - if (arch_m64 == ARCH_LP64) { - predefine("__sparc_v9__", 1, "1"); - predefine("__sparcv9__", 1, "1"); - predefine("__sparcv9", 1, "1"); - predefine("__sparc64__", 1, "1"); - predefine("__arch64__", 1, "1"); - } + predefine("__sparc_v9__", 1, "1"); + predefine("__sparcv9__", 1, "1"); + predefine("__sparcv9", 1, "1"); + predefine("__sparc64__", 1, "1"); + predefine("__arch64__", 1, "1"); /* fall-through */ case MACH_SPARC32: predefine("__sparc__", 1, "1"); @@ -207,8 +207,9 @@ extern int funsigned_char; extern int arch_m64; extern int arch_big_endian; -extern int arch_mach; extern int arch_fp_abi; +extern int arch_mach; +extern int arch_os; enum { CMODEL_UNKNOWN, @@ -85,4 +85,30 @@ enum fp_abi { #define FP_ABI_NATIVE FP_ABI_SOFT #endif + +enum { + OS_CYGWIN, + OS_DARWIN, + OS_FREEBSD, + OS_LINUX, + OS_NETBSD, + OS_OPENBSD, + OS_SUNOS, + OS_UNKNOWN, +}; + +#if defined(__linux__) || defined(__linux) +#define OS_NATIVE OS_LINUX +#elif defined(__FreeBSD__) +#define OS_NATIVE OS_FREEBSD +#elif defined(__APPLE__) +#define OS_NATIVE OS_DARWIN +#elif defined(__CYGWIN__) +#define OS_NATIVE OS_CYGWIN +#elif defined(__sun__) && defined(__sun) +#define OS_NATIVE OS_SUNOS +#else +#define OS_NATIVE OS_UNKNOWN +#endif + #endif @@ -83,19 +83,21 @@ void init_target(void) wchar_ctype = &long_ctype; /* fall through */ case MACH_X86_64: -#if defined(__APPLE__) - int64_ctype = &llong_ctype; - uint64_ctype = &ullong_ctype; -#endif -#if defined(__FreeBSD__) || defined(__APPLE__) - wint_ctype = &int_ctype; -#endif -#if defined(__CYGWIN__) - wchar_ctype = &ushort_ctype; -#endif + switch (arch_os) { + case OS_CYGWIN: + wchar_ctype = &ushort_ctype; + break; + case OS_DARWIN: + int64_ctype = &llong_ctype; + uint64_ctype = &ullong_ctype; + wint_ctype = &int_ctype; + break; + case OS_FREEBSD: + wint_ctype = &int_ctype; + break; + } break; case MACH_M68K: - case MACH_SPARC32: case MACH_PPC32: wchar_ctype = &long_ctype; break; @@ -103,6 +105,12 @@ void init_target(void) case MACH_ARM64: wchar_ctype = &uint_ctype; break; + case MACH_SPARC32: + if (arch_os == OS_SUNOS) { + wint_ctype = &long_ctype; + wchar_ctype = &long_ctype; + } + break; default: break; } @@ -110,29 +118,16 @@ void init_target(void) wchar_ctype = &ushort_ctype; switch (arch_mach) { - case MACH_MIPS64: - if (arch_m64 == ARCH_LP64) + case MACH_SPARC32: + if (arch_os == OS_SUNOS) break; /* fall through */ - case MACH_M68K: - case MACH_SPARC32: - case MACH_PPC32: - case MACH_MIPS32: - case MACH_RISCV32: - arch_m64 = ARCH_LP32; - int32_ctype = &long_ctype; - uint32_ctype = &ulong_ctype; - break; - default: - break; - } - - switch (arch_mach) { case MACH_ARM: + case MACH_MIPS64: + // FIXME: ABI n32 & (n)64 have 128-bit ldouble case MACH_MIPS32: case MACH_S390: case MACH_S390X: - case MACH_SPARC32: bits_in_longdouble = 64; max_fp_alignment = 8; break; diff --git a/validation/preprocessor/predef.c b/validation/preprocessor/predef.c index 5678aced..90f9fb9c 100644 --- a/validation/preprocessor/predef.c +++ b/validation/preprocessor/predef.c @@ -37,7 +37,9 @@ int test(void) TEST_SIZEOF(INT, int); TEST_SIZEOF(LONG, long); TEST_SIZEOF(LONG_LONG, long long); +#ifdef __SIZEOF_INT128__ TEST_SIZEOF(INT128, __int128); +#endif TEST_SIZEOF(PTRDIFF_T, __PTRDIFF_TYPE__); TEST_SIZEOF(SIZE_T, __SIZE_TYPE__); TEST_SIZEOF(POINTER, void*); |