Skip to content

Commit 24b0df3

Browse files
committed
configure: systematically configure internal types
Check and define _CTYPE and _ALIGN macros for internal fixed width types.
1 parent 6f85fd7 commit 24b0df3

File tree

1 file changed

+86
-100
lines changed

1 file changed

+86
-100
lines changed

configure.ac

Lines changed: 86 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -2730,19 +2730,6 @@ if test "$MPID_NO_LONG_LONG" != "yes" ; then
27302730
AC_DEFINE(HAVE_LONG_LONG_INT,1,[Define if long long is supported])
27312731
fi
27322732
fi
2733-
# Add HAVE_FLOAT16 detection
2734-
if test "$MPID_NO_FLOAT16" != "yes" ; then
2735-
AC_CACHE_CHECK([whether _Float16 is supported],
2736-
pac_cv_have_float16,[
2737-
# The compiler might optimize out _Float16 usage and give a false
2738-
# positive for this test (observed with clang 6 on Linux with -O2).
2739-
# We use volatile as a way to disable optimizations.
2740-
AC_LINK_IFELSE([AC_LANG_PROGRAM([],[volatile _Float16 a=1; return (int)a;])],
2741-
pac_cv_have_float16=yes,pac_cv_have_float16=no)])
2742-
if test "$pac_cv_have_float16" = "yes" ; then
2743-
AC_DEFINE(HAVE_FLOAT16,1,[Define if _Float16 is supported])
2744-
fi
2745-
fi
27462733

27472734
# ----------------------------------------------------------------------------
27482735
AC_CHECK_ALIGNOF([max_align_t],[0],[#include <stddef.h>])
@@ -2788,30 +2775,13 @@ AC_CHECK_SIZEOF(wchar_t, 0, [
27882775
#endif
27892776
])
27902777

2791-
AC_CHECK_SIZEOF(__float128, 0)
2792-
if test "$ac_cv_sizeof___float128" = "16" ; then
2793-
AC_DEFINE(HAVE_FLOAT128, 1, [Define if __float128 is supported])
2794-
fi
2795-
27962778
AC_CHECK_SIZEOF(float_int, 0, [typedef struct { float a; int b; } float_int; ])
27972779
AC_CHECK_SIZEOF(double_int, 0, [typedef struct { double a; int b; } double_int; ])
27982780
AC_CHECK_SIZEOF(long_int, 0, [typedef struct { long a; int b; } long_int; ])
27992781
AC_CHECK_SIZEOF(short_int, 0, [typedef struct { short a; int b; } short_int; ])
28002782
AC_CHECK_SIZEOF(two_int, 0, [typedef struct { int a; int b; } two_int; ])
28012783
AC_CHECK_SIZEOF(long_double_int, 0, [typedef struct { long double a; int b;} long_double_int; ])
28022784

2803-
# alignments for basic types
2804-
AC_CHECK_ALIGNOF(char)
2805-
AC_CHECK_ALIGNOF(float)
2806-
AC_CHECK_ALIGNOF(double)
2807-
AC_CHECK_ALIGNOF(long)
2808-
AC_CHECK_ALIGNOF(long long)
2809-
AC_CHECK_ALIGNOF(long double)
2810-
AC_CHECK_ALIGNOF(short)
2811-
AC_CHECK_ALIGNOF(int)
2812-
AC_CHECK_ALIGNOF(bool)
2813-
AC_CHECK_ALIGNOF(wchar_t)
2814-
28152785
# sys/bitypes.h defines the int16_t etc. on some systems (e.g., OSF1).
28162786
# Include it when testing for these types
28172787
AC_CHECK_HEADER(sys/bitypes.h,[use_bitypes="#include <sys/bitypes.h>"
@@ -2829,37 +2799,6 @@ AC_CHECK_SIZEOF(uint16_t)
28292799
AC_CHECK_SIZEOF(uint32_t)
28302800
AC_CHECK_SIZEOF(uint64_t)
28312801

2832-
AC_CHECK_ALIGNOF(int8_t)
2833-
AC_CHECK_ALIGNOF(int16_t)
2834-
AC_CHECK_ALIGNOF(int32_t)
2835-
AC_CHECK_ALIGNOF(int64_t)
2836-
2837-
if test "$ac_cv_sizeof_int8_t" -eq 1 ; then
2838-
AC_DEFINE(HAVE_INT8_T,1,[Define if int8_t is supported by the C compiler])
2839-
fi
2840-
if test "$ac_cv_sizeof_int16_t" -eq 2 ; then
2841-
AC_DEFINE(HAVE_INT16_T,1,[Define if int16_t is supported by the C compiler])
2842-
fi
2843-
if test "$ac_cv_sizeof_int32_t" -eq 4 ; then
2844-
AC_DEFINE(HAVE_INT32_T,1,[Define if int32_t is supported by the C compiler])
2845-
fi
2846-
if test "$ac_cv_sizeof_int64_t" -eq 8 ; then
2847-
AC_DEFINE(HAVE_INT64_T,1,[Define if int64_t is supported by the C compiler])
2848-
fi
2849-
2850-
if test "$ac_cv_sizeof_uint8_t" -eq 1 ; then
2851-
AC_DEFINE(HAVE_UINT8_T,1,[Define if uint8_t is supported by the C compiler])
2852-
fi
2853-
if test "$ac_cv_sizeof_uint16_t" -eq 2 ; then
2854-
AC_DEFINE(HAVE_UINT16_T,1,[Define if uint16_t is supported by the C compiler])
2855-
fi
2856-
if test "$ac_cv_sizeof_uint32_t" -eq 4 ; then
2857-
AC_DEFINE(HAVE_UINT32_T,1,[Define if uint32_t is supported by the C compiler])
2858-
fi
2859-
if test "$ac_cv_sizeof_uint64_t" -eq 8 ; then
2860-
AC_DEFINE(HAVE_UINT64_T,1,[Define if uint64_t is supported by the C compiler])
2861-
fi
2862-
28632802
# Other C99 types.
28642803
AC_CHECK_HEADERS([stdbool.h complex.h])
28652804
AC_CHECK_SIZEOF([_Bool],0,[
@@ -2884,7 +2823,6 @@ AS_IF([test "X$pac_cv_have_long_double" = "Xyes"],[
28842823
#endif
28852824
])
28862825
])
2887-
AC_CHECK_SIZEOF([_Float16])
28882826

28892827
# we need really could just use the result of AC_CHECK_SIZEOF, but having a
28902828
# HAVE_typename macro is useful for consistency
@@ -2912,57 +2850,105 @@ template and manually set the correct values.])
29122850
fi
29132851
done
29142852

2915-
# Generate _CTYPE for internal types
2853+
# Generate _CTYPE and _ALIGN for internal types
2854+
2855+
if test "$ac_cv_sizeof_int8_t" -eq 1 ; then
2856+
AC_DEFINE_UNQUOTED([MPIR_INT8_CTYPE],[int8_t], [The C type for MPIR_INT8])
2857+
AC_DEFINE_UNQUOTED([MPIR_UINT8_CTYPE],[uint8_t], [The C type for MPIR_UINT8])
2858+
AC_CHECK_ALIGNOF(int8_t)
2859+
AC_DEFINE_UNQUOTED([MPIR_INT8_ALIGN],[$ac_cv_alignof_int8_t], [The alignment for MPIR_INT8])
2860+
fi
29162861

2917-
for i in 1 2 4 8 16 ; do
2918-
AC_MSG_CHECKING([for C type matching $i-byte integer])
2919-
get_c_int_type $i
2920-
AC_MSG_RESULT($pac_retval)
2921-
if test $pac_retval != "unavailable" ; then
2922-
len=`expr $i \* 8`
2923-
AC_DEFINE_UNQUOTED([MPIR_INT${len}_CTYPE],[$pac_retval], [The C type for MPIR_INT${len}])
2924-
AC_DEFINE_UNQUOTED([MPIR_UINT${len}_CTYPE],[$pac_retval], [The C type for MPIR_UINT${len}])
2862+
if test "$ac_cv_sizeof_int16_t" -eq 2 ; then
2863+
AC_DEFINE_UNQUOTED([MPIR_INT16_CTYPE],[int16_t], [The C type for MPIR_INT16])
2864+
AC_DEFINE_UNQUOTED([MPIR_UINT16_CTYPE],[uint16_t], [The C type for MPIR_UINT16])
2865+
AC_CHECK_ALIGNOF(int16_t)
2866+
AC_DEFINE_UNQUOTED([MPIR_INT16_ALIGN],[$ac_cv_alignof_int16_t], [The alignment for MPIR_INT16])
2867+
fi
2868+
2869+
if test "$ac_cv_sizeof_int32_t" -eq 4 ; then
2870+
AC_DEFINE_UNQUOTED([MPIR_INT32_CTYPE],[int32_t], [The C type for MPIR_INT32])
2871+
AC_DEFINE_UNQUOTED([MPIR_UINT32_CTYPE],[uint32_t], [The C type for MPIR_UINT32])
2872+
AC_CHECK_ALIGNOF(int32_t)
2873+
AC_DEFINE_UNQUOTED([MPIR_INT32_ALIGN],[$ac_cv_alignof_int32_t], [The alignment for MPIR_INT32])
2874+
fi
2875+
2876+
if test "$ac_cv_sizeof_int64_t" -eq 8 ; then
2877+
AC_DEFINE_UNQUOTED([MPIR_INT64_CTYPE],[int64_t], [The C type for MPIR_INT64])
2878+
AC_DEFINE_UNQUOTED([MPIR_UINT64_CTYPE],[uint64_t], [The C type for MPIR_UINT64])
2879+
AC_CHECK_ALIGNOF(int64_t)
2880+
AC_DEFINE_UNQUOTED([MPIR_INT64_ALIGN],[$ac_cv_alignof_int64_t], [The alignment for MPIR_INT64])
2881+
fi
2882+
2883+
if test "$MPID_NO_INT128" != "yes" ; then
2884+
AC_CHECK_SIZEOF(__int128)
2885+
if test "$ac_cv_sizeof___int128" -eq 16 ; then
2886+
AC_DEFINE_UNQUOTED([MPIR_INT128_CTYPE],[__int128], [The C type for MPIR_INT128])
2887+
AC_DEFINE_UNQUOTED([MPIR_UINT128_CTYPE],[unsigned __int128], [The C type for MPIR_UINT128])
2888+
AC_CHECK_ALIGNOF(__int128)
2889+
AC_DEFINE_UNQUOTED([MPIR_INT128_ALIGN],[$ac_cv_alignof___int128], [The alignment for MPIR_INT128])
29252890
fi
2926-
done
2891+
fi
29272892

2928-
for i in 2 4 8 16; do
2929-
AC_MSG_CHECKING([for C type matching $i-byte float])
2930-
get_c_float_type $i
2931-
AC_MSG_RESULT($pac_retval)
2932-
if test $pac_retval != "unavailable" ; then
2933-
len=`expr $i \* 8`
2934-
AC_DEFINE_UNQUOTED([MPIR_FLOAT${len}_CTYPE],[$pac_retval], [The C type for MPIR_FLOAT${len}])
2893+
if test "$MPID_NO_FLOAT16" != "yes" ; then
2894+
AC_CHECK_SIZEOF(_Float16)
2895+
AC_CHECK_SIZEOF(__fp16)
2896+
if test "$ac_cv_sizeof__Float16" -eq 2 ; then
2897+
AC_DEFINE_UNQUOTED([MPIR_FLOAT16_CTYPE],[_Float16], [The C type for MPIR_FLOAT16])
2898+
AC_CHECK_ALIGNOF(_Float16)
2899+
AC_DEFINE_UNQUOTED([MPIR_FLOAT16_ALIGN],[$ac_cv_alignof__Float16], [The alignment for MPIR_FLOAT16])
2900+
elif test "$ac_cv_sizeof___fp16" -eq 2 ; then
2901+
# enable it on ARM with -mfp16-format
2902+
AC_DEFINE_UNQUOTED([MPIR_FLOAT16_CTYPE],[__fp16], [The C type for MPIR_FLOAT16])
2903+
AC_CHECK_ALIGNOF(__fp16)
2904+
AC_DEFINE_UNQUOTED([MPIR_FLOAT16_ALIGN],[$ac_cv_alignof___fp16], [The alignment for MPIR_FLOAT16])
29352905
fi
2936-
done
2906+
fi
2907+
2908+
if test "$ac_cv_sizeof_float" -eq 4 ; then
2909+
AC_DEFINE_UNQUOTED([MPIR_FLOAT32_CTYPE],[float], [The C type for MPIR_FLOAT32])
2910+
AC_CHECK_ALIGNOF(float)
2911+
AC_DEFINE_UNQUOTED([MPIR_FLOAT32_ALIGN],[$ac_cv_alignof_float], [The alignment for MPIR_FLOAT32])
2912+
fi
2913+
2914+
if test "$ac_cv_sizeof_double" -eq 8 ; then
2915+
AC_DEFINE_UNQUOTED([MPIR_FLOAT64_CTYPE],[double], [The C type for MPIR_FLOAT64])
2916+
AC_CHECK_ALIGNOF(double)
2917+
AC_DEFINE_UNQUOTED([MPIR_FLOAT64_ALIGN],[$ac_cv_alignof_double], [The alignment for MPIR_FLOAT64])
2918+
fi
2919+
2920+
if test "$MPID_NO_FLOAT128" != "yes" ; then
2921+
AC_CHECK_SIZEOF(__float128)
2922+
if test "$ac_cv_sizeof___float128" -eq 16 ; then
2923+
AC_DEFINE_UNQUOTED([MPIR_FLOAT128_CTYPE],[__float128], [The C type for MPIR_FLOAT128])
2924+
AC_CHECK_ALIGNOF(__float128)
2925+
AC_DEFINE_UNQUOTED([MPIR_FLOAT128_ALIGN],[$ac_cv_alignof___float128], [The alignment for MPIR_FLOAT64])
2926+
fi
2927+
fi
29372928

29382929
if test "$ac_cv_sizeof_long_double" -gt 0 ; then
29392930
len=`expr $ac_cv_sizeof_long_double \* 8`
29402931
AC_DEFINE_UNQUOTED([MPIR_ALT_FLOAT${len}_CTYPE],[long double], [The C type for MPIR_ALT_FLOAT${len}])
2932+
AC_CHECK_ALIGNOF(long double)
2933+
AC_DEFINE_UNQUOTED([MPIR_ALT_FLOAT${len}_ALIGN],[$ac_cv_alignof_long_double], [The alignment for MPIR_ALT_FLOAT${len}])
2934+
fi
2935+
2936+
if test "$ac_cv_sizeof_float__Complex" -eq 8 ; then
2937+
AC_DEFINE_UNQUOTED([MPIR_COMPLEX32_CTYPE], [float _Complex], [The C type for MPIR_COMPLEX32])
2938+
fi
2939+
if test "$ac_cv_sizeof_double__Complex" -eq 16 ; then
2940+
AC_DEFINE_UNQUOTED([MPIR_COMPLEX64_CTYPE], [double _Complex], [The C type for MPIR_COMPLEX64])
2941+
fi
2942+
if test "$ac_cv_sizeof_long_double__Complex" -gt 0 ; then
2943+
len=`expr $ac_cv_sizeof_long_double \* 8`
2944+
AC_DEFINE_UNQUOTED([MPIR_ALT_COMPLEX${len}_CTYPE], [long double _Complex], [The C type for MPIR_ALT_COMPLEX${len}])
29412945
fi
29422946

29432947
# autoheader won't recognize keys with variable expansion, so -
2944-
AH_TEMPLATE([MPIR_INT8_CTYPE], [The C type for MPIR_INT8])
2945-
AH_TEMPLATE([MPIR_INT16_CTYPE], [The C type for MPIR_INT16])
2946-
AH_TEMPLATE([MPIR_INT32_CTYPE], [The C type for MPIR_INT32])
2947-
AH_TEMPLATE([MPIR_INT64_CTYPE], [The C type for MPIR_INT64])
2948-
AH_TEMPLATE([MPIR_INT128_CTYPE], [The C type for MPIR_INT128])
2949-
AH_TEMPLATE([MPIR_UINT8_CTYPE], [The C type for MPIR_UINT8])
2950-
AH_TEMPLATE([MPIR_UINT16_CTYPE], [The C type for MPIR_UINT16])
2951-
AH_TEMPLATE([MPIR_UINT32_CTYPE], [The C type for MPIR_UINT32])
2952-
AH_TEMPLATE([MPIR_UINT64_CTYPE], [The C type for MPIR_UINT64])
2953-
AH_TEMPLATE([MPIR_UINT128_CTYPE], [The C type for MPIR_UINT128])
2954-
AH_TEMPLATE([MPIR_FLOAT8_CTYPE], [The C type for MPIR_FLOAT8])
2955-
AH_TEMPLATE([MPIR_FLOAT16_CTYPE], [The C type for MPIR_FLOAT16])
2956-
AH_TEMPLATE([MPIR_FLOAT32_CTYPE], [The C type for MPIR_FLOAT32])
2957-
AH_TEMPLATE([MPIR_FLOAT64_CTYPE], [The C type for MPIR_FLOAT64])
2958-
AH_TEMPLATE([MPIR_FLOAT128_CTYPE], [The C type for MPIR_FLOAT128])
29592948
AH_TEMPLATE([MPIR_ALT_FLOAT96_CTYPE], [The C type for MPIR_ALT_FLOAT96])
29602949
AH_TEMPLATE([MPIR_ALT_FLOAT128_CTYPE], [The C type for MPIR_ALT_FLOAT128])
2961-
dnl optionally define the following to use C native complex types in reduction op
2962-
AH_TEMPLATE([MPIR_COMPLEX16_CTYPE], [The C type for MPIR_COMPLEX16])
2963-
AH_TEMPLATE([MPIR_COMPLEX32_CTYPE], [The C type for MPIR_COMPLEX32])
2964-
AH_TEMPLATE([MPIR_COMPLEX64_CTYPE], [The C type for MPIR_COMPLEX64])
2965-
AH_TEMPLATE([MPIR_COMPLEX128_CTYPE], [The C type for MPIR_COMPLEX128])
2950+
AH_TEMPLATE([MPIR_ALT_FLOAT96_ALIGN], [The alignment for MPIR_ALT_FLOAT96])
2951+
AH_TEMPLATE([MPIR_ALT_FLOAT128_ALIGN], [The alignment for MPIR_ALT_FLOAT128])
29662952
AH_TEMPLATE([MPIR_ALT_COMPLEX96_CTYPE], [The C type for MPIR_ALT_COMPLEX96])
29672953
AH_TEMPLATE([MPIR_ALT_COMPLEX128_CTYPE], [The C type for MPIR_ALT_COMPLEX128])
29682954

0 commit comments

Comments
 (0)