-
- Downloads
gfortran: Introduce gfc_type_abi_kind
The following patch detects the powerpc64le-linux kind == 16 cases and for the -mabi=ieeelongdouble case (no matter whether it is the configured in default or just option used on the command line) uses _r17 or _c17 instead of _r16 or _c17 in the library API names. From what I can see, e.g. calls to sin on real(kind = 16) works fine with or without this patch (we call __builtin_sinl and the backend uses rs6000_mangle_decl_assembler_name which ensures __sinieee128 is called). What is clearly still broken is IO, where for real(kind=16) a a = 1.0 print *, a end we call _gfortran_transfer_real_write (&dt_parm.0, &a, 16); for both -mabi=ibmlongdouble and -mabi=ieeelongdouble I don't remember what was the agreement, do we want _gfortran_transfer_real_write (&dt_parm.0, &a, 17); for the ieeelongdouble case, or some new entrypoint for the abi_kind == 17 real/complex IO? Also, what about kind stored in array descriptors? Shall we use there the abi_kind or kind? I guess at least before the IO case is solved there is no point in checking the testsuite, too many things will be majorly broken... 2021-12-31 Jakub Jelinek <jakub@redhat.com> * gfortran.h (gfc_real_info): Add abi_kind member. (gfc_type_abi_kind): Declare. * trans-types.c (gfc_init_kinds): Initialize abi_kind. * intrinsic.c (gfc_type_abi_kind): New function. (conv_name): Use it. * iresolve.c (resolve_transformational, gfc_resolve_abs, gfc_resolve_char_achar, gfc_resolve_acos, gfc_resolve_acosh, gfc_resolve_aimag, gfc_resolve_and, gfc_resolve_aint, gfc_resolve_all, gfc_resolve_anint, gfc_resolve_any, gfc_resolve_asin, gfc_resolve_asinh, gfc_resolve_atan, gfc_resolve_atanh, gfc_resolve_atan2, gfc_resolve_bessel_n2, gfc_resolve_ceiling, gfc_resolve_cmplx, gfc_resolve_complex, gfc_resolve_cos, gfc_resolve_cosh, gfc_resolve_count, gfc_resolve_dble, gfc_resolve_dim, gfc_resolve_dot_product, gfc_resolve_dprod, gfc_resolve_exp, gfc_resolve_floor, gfc_resolve_hypot, gfc_resolve_int, gfc_resolve_int2, gfc_resolve_int8, gfc_resolve_long, gfc_resolve_log, gfc_resolve_log10, gfc_resolve_logical, gfc_resolve_matmul, gfc_resolve_minmax, gfc_resolve_maxloc, gfc_resolve_findloc, gfc_resolve_maxval, gfc_resolve_merge, gfc_resolve_minloc, gfc_resolve_minval, gfc_resolve_mod, gfc_resolve_modulo, gfc_resolve_nearest, gfc_resolve_or, gfc_resolve_real, gfc_resolve_realpart, gfc_resolve_reshape, gfc_resolve_sign, gfc_resolve_sin, gfc_resolve_sinh, gfc_resolve_sqrt, gfc_resolve_tan, gfc_resolve_tanh, gfc_resolve_transpose, gfc_resolve_trigd, gfc_resolve_xor, gfc_resolve_random_number): Likewise. * trans-decl.c (gfc_build_intrinsic_function_decls): Likewise.
Showing
- gcc/fortran/gfortran.h 7 additions, 1 deletiongcc/fortran/gfortran.h
- gcc/fortran/intrinsic.c 23 additions, 2 deletionsgcc/fortran/intrinsic.c
- gcc/fortran/iresolve.c 117 additions, 68 deletionsgcc/fortran/iresolve.c
- gcc/fortran/trans-decl.c 6 additions, 4 deletionsgcc/fortran/trans-decl.c
- gcc/fortran/trans-types.c 24 additions, 1 deletiongcc/fortran/trans-types.c
Loading
Please register or sign in to comment