On 9/17/2021 4:05 PM, Martin Sebor wrote:
On 9/2/21 10:28 AM, Jeff Law via Gcc-patches wrote:


On 8/30/2021 2:03 PM, Martin Sebor via Gcc-patches wrote:
The predicate analysis subset of the tree-ssa-uninit pass isn't
necessarily specific to the detection of uninitialized reads.
Suitably parameterized, the same core logic could be used in
other warning passes to improve their S/N ratio, or issue more
nuanced diagnostics (e.g., when an invalid access cannot be
ruled out but also need not in reality be unavoidable, issue
a "may be invalid" type of warning rather than "is invalid").

Separating the predicate analysis logic from the uninitialized
pass and exposing a narrow API should also make it easier to
understand and evolve each part independently of the other,
or replace one with a better implementation without modifying
the other.(*)

As the first step in this direction, the attached patch extracts
the predicate analysis logic out of the pass, turns the interface
into public class members, and hides the internals in either
private members or static functions defined in a new source file.
(**)

The changes should have no externally observable effect (i.e.,
should cause no changes in warnings), except on the contents of
the uninitialized dump.  While making the changes I enhanced
the dumps to help me follow the logic.  Turning some previously
free-standing functions into members involved changing their
signatures and adjusting their callers.  While making these
changes I also renamed some of them as well some variables for
improved clarity.  Finally, I moved declarations of locals
closer to their point of initialization.

Tested on x86_64-linux.  Besides the usual bootstrap/regtest
I also tentatively verified the generality of the new class
interfaces by making use of it in -Warray-bounds.  Besides there,
I'd like to make use of it in the new gimple-ssa-warn-access pass
and, longer term, any other flow-sensitive warnings that might
benefit from it.

Martin

[*] A review of open -Wuninitialized bugs I did while working
on this project made me aware of a number of opportunities to
improve the analyzer to reduce the number of false positives
-Wmaybe-uninitiailzed suffers from.

[**] The class isn't fully general and, like the uninit pass,
only works with PHI nodes.  I plan to generalize it to compute
the set of predicates between any two basic blocks.

gcc-predanal.diff

Factor predidacte analysis out of tree-ssa-uninit.c into its own module.

gcc/ChangeLog:

    * Makefile.in (OBJS): Add gimple-predicate-analysis.o.
    * tree-ssa-uninit.c (max_phi_args): Move to gimple-predicate-analysis.
    (MASK_SET_BIT, MASK_TEST_BIT, MASK_EMPTY): Same.
    (check_defs):
    (can_skip_redundant_opnd):
    (compute_uninit_opnds_pos): Adjust to namespace change.
    (find_pdom): Move to gimple-predicate-analysis.cc.
    (find_dom): Same.
    (struct uninit_undef_val_t): New.
    (is_non_loop_exit_postdominating): Move to gimple-predicate-analysis.cc.
    (find_control_equiv_block): Same.
    (MAX_NUM_CHAINS, MAX_CHAIN_LEN, MAX_POSTDOM_CHECK): Same.
    (MAX_SWITCH_CASES): Same.
    (compute_control_dep_chain): Same.
    (find_uninit_use): Use predicate analyzer.
    (struct pred_info): Move to gimple-predicate-analysis.
    (convert_control_dep_chain_into_preds): Same.
    (find_predicates): Same.
    (collect_phi_def_edges): Same.
    (warn_uninitialized_phi): Use predicate analyzer.
    (find_def_preds): Move to gimple-predicate-analysis.
    (dump_pred_info): Same.
    (dump_pred_chain): Same.
    (dump_predicates): Same.
    (destroy_predicate_vecs): Remove.
    (execute_late_warn_uninitialized): New.
    (get_cmp_code): Move to gimple-predicate-analysis.
    (is_value_included_in): Same.
    (value_sat_pred_p): Same.
    (find_matching_predicate_in_rest_chains): Same.
    (is_use_properly_guarded): Same.
    (prune_uninit_phi_opnds): Same.
    (find_var_cmp_const): Same.
    (use_pred_not_overlap_with_undef_path_pred): Same.
    (pred_equal_p): Same.
    (is_neq_relop_p): Same.
    (is_neq_zero_form_p): Same.
    (pred_expr_equal_p): Same.
    (is_pred_expr_subset_of): Same.
    (is_pred_chain_subset_of): Same.
    (is_included_in): Same.
    (is_superset_of): Same.
    (pred_neg_p): Same.
    (simplify_pred): Same.
    (simplify_preds_2): Same.
    (simplify_preds_3): Same.
    (simplify_preds_4): Same.
    (simplify_preds): Same.
    (push_pred): Same.
    (push_to_worklist): Same.
    (get_pred_info_from_cmp): Same.
    (is_degenerated_phi): Same.
    (normalize_one_pred_1): Same.
    (normalize_one_pred): Same.
    (normalize_one_pred_chain): Same.
    (normalize_preds): Same.
    (can_one_predicate_be_invalidated_p): Same.
    (can_chain_union_be_invalidated_p): Same.
    (uninit_uses_cannot_happen): Same.
    (pass_late_warn_uninitialized::execute): Define.
    * gimple-predicate-analysis.cc: New file.
    * gimple-predicate-analysis.h: New file.
Thanks for tackling this.  It's something I think we've needed for a long time.

I've only done a cursory review since this is primarily moving the analysis engine to its own file and class-ifying it.

As we build additional consumers I won't be surprised if we have to adjust the exposed class API, but that's fine.   The first goal is to get the analysis disentangled from the consumer(s).

OK.  Looking forward to seeing the analysis used elsewhere.

Thanks, I just pushed it.

As a heads up, I've been having some weird email problems lately and
didn't find your approval until today, in my Trash folder.  Just in
case there's fallout that I'm not responsive to, please either ping
me on IRC or email my @redhat account.
Weird.  I wonder if google is trying to tell me something :-)

Anyway,  it does seem to be triggering an ICE on nios2-linux-gnu and csky-linux-gnu (so far).

Compile the attached code with -O2 -Wall  with a nios2-linux-gnu cross compiler.  You should get an ICE in the predicate bits.

Jeff


# 0 "../sysdeps/ieee754/soft-fp/s_fmaf.c"
# 1 "/home/jlaw/jenkins/workspace/nios2-linux-gnu/glibc/math//"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "../include/stdc-predef.h" 1
# 0 "<command-line>" 2
# 1 
"/home/jlaw/jenkins/workspace/nios2-linux-gnu/nios2-linux-gnu-obj/glibc/libc-modules.h"
 1
# 0 "<command-line>" 2
# 1 "./../include/libc-symbols.h" 1
# 85 "./../include/libc-symbols.h"
# 1 
"/home/jlaw/jenkins/workspace/nios2-linux-gnu/nios2-linux-gnu-obj/glibc/config.h"
 1
# 86 "./../include/libc-symbols.h" 2


# 1 "../sysdeps/generic/libc-symver.h" 1
# 25 "../sysdeps/generic/libc-symver.h"
# 1 
"/home/jlaw/jenkins/workspace/nios2-linux-gnu/nios2-linux-gnu-obj/glibc/config.h"
 1
# 26 "../sysdeps/generic/libc-symver.h" 2
# 89 "./../include/libc-symbols.h" 2
# 865 "./../include/libc-symbols.h"
# 1 "../sysdeps/generic/symbol-hacks.h" 1
# 866 "./../include/libc-symbols.h" 2
# 0 "<command-line>" 2
# 1 "../sysdeps/ieee754/soft-fp/s_fmaf.c"
# 29 "../sysdeps/ieee754/soft-fp/s_fmaf.c"
# 1 "../include/math.h" 1






# 1 "../math/math.h" 1
# 27 "../math/math.h"
# 1 "../bits/libc-header-start.h" 1
# 33 "../bits/libc-header-start.h"
# 1 "../include/features.h" 1
# 392 "../include/features.h"
# 1 "../include/features-time64.h" 1
# 1 "../sysdeps/unix/sysv/linux/features-time64.h" 1
# 20 "../sysdeps/unix/sysv/linux/features-time64.h"
# 1 "../sysdeps/wordsize-32/bits/wordsize.h" 1
# 21 "../sysdeps/unix/sysv/linux/features-time64.h" 2
# 1 "../bits/timesize.h" 1
# 19 "../bits/timesize.h"
# 1 "../sysdeps/wordsize-32/bits/wordsize.h" 1
# 20 "../bits/timesize.h" 2
# 22 "../sysdeps/unix/sysv/linux/features-time64.h" 2
# 2 "../include/features-time64.h" 2
# 393 "../include/features.h" 2
# 488 "../include/features.h"
# 1 "../include/sys/cdefs.h" 1
# 10 "../include/sys/cdefs.h"
# 1 "../misc/sys/cdefs.h" 1
# 499 "../misc/sys/cdefs.h"
# 1 "../sysdeps/wordsize-32/bits/wordsize.h" 1
# 500 "../misc/sys/cdefs.h" 2
# 1 "../bits/long-double.h" 1
# 501 "../misc/sys/cdefs.h" 2
# 11 "../include/sys/cdefs.h" 2
# 19 "../include/sys/cdefs.h"
extern void __chk_fail (void) __attribute__ ((__noreturn__));


# 489 "../include/features.h" 2
# 512 "../include/features.h"
# 1 "../include/gnu/stubs.h" 1
# 513 "../include/features.h" 2
# 34 "../bits/libc-header-start.h" 2
# 28 "../math/math.h" 2









# 1 "../include/bits/types.h" 1
# 1 "../posix/bits/types.h" 1
# 27 "../posix/bits/types.h"
# 1 "../sysdeps/wordsize-32/bits/wordsize.h" 1
# 28 "../posix/bits/types.h" 2
# 1 "../bits/timesize.h" 1
# 19 "../bits/timesize.h"
# 1 "../sysdeps/wordsize-32/bits/wordsize.h" 1
# 20 "../bits/timesize.h" 2
# 29 "../posix/bits/types.h" 2


typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;


typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;




__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;



typedef __int8_t __int_least8_t;
typedef __uint8_t __uint_least8_t;
typedef __int16_t __int_least16_t;
typedef __uint16_t __uint_least16_t;
typedef __int32_t __int_least32_t;
typedef __uint32_t __uint_least32_t;
typedef __int64_t __int_least64_t;
typedef __uint64_t __uint_least64_t;






__extension__ typedef long long int __quad_t;
__extension__ typedef unsigned long long int __u_quad_t;







__extension__ typedef long long int __intmax_t;
__extension__ typedef unsigned long long int __uintmax_t;
# 141 "../posix/bits/types.h"
# 1 "../sysdeps/unix/sysv/linux/generic/bits/typesizes.h" 1
# 142 "../posix/bits/types.h" 2
# 1 "../bits/time64.h" 1
# 143 "../posix/bits/types.h" 2


__extension__ typedef __uint64_t __dev_t;
__extension__ typedef unsigned int __uid_t;
__extension__ typedef unsigned int __gid_t;
__extension__ typedef unsigned long int __ino_t;
__extension__ typedef __uint64_t __ino64_t;
__extension__ typedef unsigned int __mode_t;
__extension__ typedef unsigned int __nlink_t;
__extension__ typedef long int __off_t;
__extension__ typedef __int64_t __off64_t;
__extension__ typedef int __pid_t;
__extension__ typedef struct { int __val[2]; } __fsid_t;
__extension__ typedef long int __clock_t;
__extension__ typedef unsigned long int __rlim_t;
__extension__ typedef __uint64_t __rlim64_t;
__extension__ typedef unsigned int __id_t;
__extension__ typedef long int __time_t;
__extension__ typedef unsigned int __useconds_t;
__extension__ typedef long int __suseconds_t;
__extension__ typedef __int64_t __suseconds64_t;

__extension__ typedef int __daddr_t;
__extension__ typedef int __key_t;


__extension__ typedef int __clockid_t;


__extension__ typedef void * __timer_t;


__extension__ typedef int __blksize_t;




__extension__ typedef long int __blkcnt_t;
__extension__ typedef __int64_t __blkcnt64_t;


__extension__ typedef unsigned long int __fsblkcnt_t;
__extension__ typedef __uint64_t __fsblkcnt64_t;


__extension__ typedef unsigned long int __fsfilcnt_t;
__extension__ typedef __uint64_t __fsfilcnt64_t;


__extension__ typedef int __fsword_t;

__extension__ typedef int __ssize_t;


__extension__ typedef long int __syscall_slong_t;

__extension__ typedef unsigned long int __syscall_ulong_t;



typedef __off64_t __loff_t;
typedef char *__caddr_t;


__extension__ typedef int __intptr_t;


__extension__ typedef unsigned int __socklen_t;




typedef int __sig_atomic_t;







__extension__ typedef __int64_t __time64_t;
# 2 "../include/bits/types.h" 2
# 38 "../math/math.h" 2


# 1 "../bits/math-vector.h" 1
# 27 "../bits/math-vector.h"
# 1 "../bits/libm-simd-decl-stubs.h" 1
# 28 "../bits/math-vector.h" 2
# 41 "../math/math.h" 2


# 1 "../bits/floatn.h" 1
# 52 "../bits/floatn.h"
# 1 "../bits/floatn-common.h" 1
# 24 "../bits/floatn-common.h"
# 1 "../bits/long-double.h" 1
# 25 "../bits/floatn-common.h" 2
# 53 "../bits/floatn.h" 2
# 44 "../math/math.h" 2
# 152 "../math/math.h"
# 1 "../bits/flt-eval-method.h" 1
# 153 "../math/math.h" 2
# 163 "../math/math.h"
typedef float float_t;
typedef double double_t;
# 204 "../math/math.h"
# 1 "../bits/fp-logb.h" 1
# 205 "../math/math.h" 2
# 247 "../math/math.h"
# 1 "../bits/fp-fast.h" 1
# 248 "../math/math.h" 2



enum
  {
    FP_INT_UPWARD =

      0,
    FP_INT_DOWNWARD =

      1,
    FP_INT_TOWARDZERO =

      2,
    FP_INT_TONEARESTFROMZERO =

      3,
    FP_INT_TONEAREST =

      4,
  };
# 312 "../math/math.h"
# 1 "../include/bits/mathcalls-helper-functions.h" 1
# 1 "../math/bits/mathcalls-helper-functions.h" 1
# 20 "../math/bits/mathcalls-helper-functions.h"
extern int __fpclassify (double __value) __attribute__ ((__nothrow__ ))
     __attribute__ ((__const__));


extern int __signbit (double __value) __attribute__ ((__nothrow__ ))
     __attribute__ ((__const__));



extern int __isinf (double __value) __attribute__ ((__nothrow__ ))
  __attribute__ ((__const__));


extern int __finite (double __value) __attribute__ ((__nothrow__ ))
  __attribute__ ((__const__));


extern int __isnan (double __value) __attribute__ ((__nothrow__ ))
  __attribute__ ((__const__));


extern int __iseqsig (double __x, double __y) __attribute__ ((__nothrow__ ));


extern int __issignaling (double __value) __attribute__ ((__nothrow__ ))
     __attribute__ ((__const__));
# 2 "../include/bits/mathcalls-helper-functions.h" 2
# 313 "../math/math.h" 2
# 1 "../include/bits/mathcalls.h" 1
# 1 "../math/bits/mathcalls.h" 1
# 53 "../math/bits/mathcalls.h"
extern double acos (double __x) __attribute__ ((__nothrow__ )); extern double 
__acos (double __x) __attribute__ ((__nothrow__ ));

extern double asin (double __x) __attribute__ ((__nothrow__ )); extern double 
__asin (double __x) __attribute__ ((__nothrow__ ));

extern double atan (double __x) __attribute__ ((__nothrow__ )); extern double 
__atan (double __x) __attribute__ ((__nothrow__ ));

extern double atan2 (double __y, double __x) __attribute__ ((__nothrow__ )); 
extern double __atan2 (double __y, double __x) __attribute__ ((__nothrow__ ));


 extern double cos (double __x) __attribute__ ((__nothrow__ )); extern double 
__cos (double __x) __attribute__ ((__nothrow__ ));

 extern double sin (double __x) __attribute__ ((__nothrow__ )); extern double 
__sin (double __x) __attribute__ ((__nothrow__ ));

extern double tan (double __x) __attribute__ ((__nothrow__ )); extern double 
__tan (double __x) __attribute__ ((__nothrow__ ));




extern double cosh (double __x) __attribute__ ((__nothrow__ )); extern double 
__cosh (double __x) __attribute__ ((__nothrow__ ));

extern double sinh (double __x) __attribute__ ((__nothrow__ )); extern double 
__sinh (double __x) __attribute__ ((__nothrow__ ));

extern double tanh (double __x) __attribute__ ((__nothrow__ )); extern double 
__tanh (double __x) __attribute__ ((__nothrow__ ));



 extern void sincos (double __x, double *__sinx, double *__cosx) __attribute__ 
((__nothrow__ )); extern void __sincos (double __x, double *__sinx, double 
*__cosx) __attribute__ ((__nothrow__ ))
                                                        ;




extern double acosh (double __x) __attribute__ ((__nothrow__ )); extern double 
__acosh (double __x) __attribute__ ((__nothrow__ ));

extern double asinh (double __x) __attribute__ ((__nothrow__ )); extern double 
__asinh (double __x) __attribute__ ((__nothrow__ ));

extern double atanh (double __x) __attribute__ ((__nothrow__ )); extern double 
__atanh (double __x) __attribute__ ((__nothrow__ ));





 extern double exp (double __x) __attribute__ ((__nothrow__ )); extern double 
__exp (double __x) __attribute__ ((__nothrow__ ));


extern double frexp (double __x, int *__exponent) __attribute__ ((__nothrow__ 
)); extern double __frexp (double __x, int *__exponent) __attribute__ 
((__nothrow__ ));


extern double ldexp (double __x, int __exponent) __attribute__ ((__nothrow__ 
)); extern double __ldexp (double __x, int __exponent) __attribute__ 
((__nothrow__ ));


 extern double log (double __x) __attribute__ ((__nothrow__ )); extern double 
__log (double __x) __attribute__ ((__nothrow__ ));


extern double log10 (double __x) __attribute__ ((__nothrow__ )); extern double 
__log10 (double __x) __attribute__ ((__nothrow__ ));


extern double modf (double __x, double *__iptr) __attribute__ ((__nothrow__ )); 
extern double __modf (double __x, double *__iptr) __attribute__ ((__nothrow__ 
)) ;



extern double exp10 (double __x) __attribute__ ((__nothrow__ )); extern double 
__exp10 (double __x) __attribute__ ((__nothrow__ ));




extern double expm1 (double __x) __attribute__ ((__nothrow__ )); extern double 
__expm1 (double __x) __attribute__ ((__nothrow__ ));


extern double log1p (double __x) __attribute__ ((__nothrow__ )); extern double 
__log1p (double __x) __attribute__ ((__nothrow__ ));


extern double logb (double __x) __attribute__ ((__nothrow__ )); extern double 
__logb (double __x) __attribute__ ((__nothrow__ ));




extern double exp2 (double __x) __attribute__ ((__nothrow__ )); extern double 
__exp2 (double __x) __attribute__ ((__nothrow__ ));


extern double log2 (double __x) __attribute__ ((__nothrow__ )); extern double 
__log2 (double __x) __attribute__ ((__nothrow__ ));






 extern double pow (double __x, double __y) __attribute__ ((__nothrow__ )); 
extern double __pow (double __x, double __y) __attribute__ ((__nothrow__ ));


extern double sqrt (double __x) __attribute__ ((__nothrow__ )); extern double 
__sqrt (double __x) __attribute__ ((__nothrow__ ));



extern double hypot (double __x, double __y) __attribute__ ((__nothrow__ )); 
extern double __hypot (double __x, double __y) __attribute__ ((__nothrow__ ));




extern double cbrt (double __x) __attribute__ ((__nothrow__ )); extern double 
__cbrt (double __x) __attribute__ ((__nothrow__ ));






extern double ceil (double __x) __attribute__ ((__nothrow__ )) __attribute__ 
((__const__)); extern double __ceil (double __x) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__));


extern double fabs (double __x) __attribute__ ((__nothrow__ )) __attribute__ 
((__const__)); extern double __fabs (double __x) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__));


extern double floor (double __x) __attribute__ ((__nothrow__ )) __attribute__ 
((__const__)); extern double __floor (double __x) __attribute__ ((__nothrow__ 
)) __attribute__ ((__const__));


extern double fmod (double __x, double __y) __attribute__ ((__nothrow__ )); 
extern double __fmod (double __x, double __y) __attribute__ ((__nothrow__ ));
# 177 "../math/bits/mathcalls.h"
extern int isinf (double __value) __attribute__ ((__nothrow__ ))
  __attribute__ ((__const__));




extern int finite (double __value) __attribute__ ((__nothrow__ ))
  __attribute__ ((__const__));


extern double drem (double __x, double __y) __attribute__ ((__nothrow__ )); 
extern double __drem (double __x, double __y) __attribute__ ((__nothrow__ ));



extern double significand (double __x) __attribute__ ((__nothrow__ )); extern 
double __significand (double __x) __attribute__ ((__nothrow__ ));






extern double copysign (double __x, double __y) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__)); extern double __copysign (double __x, double __y) 
__attribute__ ((__nothrow__ )) __attribute__ ((__const__));




extern double nan (const char *__tagb) __attribute__ ((__nothrow__ )); extern 
double __nan (const char *__tagb) __attribute__ ((__nothrow__ ));
# 213 "../math/bits/mathcalls.h"
extern int isnan (double __value) __attribute__ ((__nothrow__ ))
  __attribute__ ((__const__));





extern double j0 (double) __attribute__ ((__nothrow__ )); extern double __j0 
(double) __attribute__ ((__nothrow__ ));
extern double j1 (double) __attribute__ ((__nothrow__ )); extern double __j1 
(double) __attribute__ ((__nothrow__ ));
extern double jn (int, double) __attribute__ ((__nothrow__ )); extern double 
__jn (int, double) __attribute__ ((__nothrow__ ));
extern double y0 (double) __attribute__ ((__nothrow__ )); extern double __y0 
(double) __attribute__ ((__nothrow__ ));
extern double y1 (double) __attribute__ ((__nothrow__ )); extern double __y1 
(double) __attribute__ ((__nothrow__ ));
extern double yn (int, double) __attribute__ ((__nothrow__ )); extern double 
__yn (int, double) __attribute__ ((__nothrow__ ));





extern double erf (double) __attribute__ ((__nothrow__ )); extern double __erf 
(double) __attribute__ ((__nothrow__ ));
extern double erfc (double) __attribute__ ((__nothrow__ )); extern double 
__erfc (double) __attribute__ ((__nothrow__ ));
extern double lgamma (double) __attribute__ ((__nothrow__ )); extern double 
__lgamma (double) __attribute__ ((__nothrow__ ));




extern double tgamma (double) __attribute__ ((__nothrow__ )); extern double 
__tgamma (double) __attribute__ ((__nothrow__ ));





extern double gamma (double) __attribute__ ((__nothrow__ )); extern double 
__gamma (double) __attribute__ ((__nothrow__ ));







extern double lgamma_r (double, int *__signgamp) __attribute__ ((__nothrow__ 
)); extern double __lgamma_r (double, int *__signgamp) __attribute__ 
((__nothrow__ ));






extern double rint (double __x) __attribute__ ((__nothrow__ )); extern double 
__rint (double __x) __attribute__ ((__nothrow__ ));


extern double nextafter (double __x, double __y) __attribute__ ((__nothrow__ 
)); extern double __nextafter (double __x, double __y) __attribute__ 
((__nothrow__ ));

extern double nexttoward (double __x, long double __y) __attribute__ 
((__nothrow__ )); extern double __nexttoward (double __x, long double __y) 
__attribute__ ((__nothrow__ ));




extern double nextdown (double __x) __attribute__ ((__nothrow__ )); extern 
double __nextdown (double __x) __attribute__ ((__nothrow__ ));

extern double nextup (double __x) __attribute__ ((__nothrow__ )); extern double 
__nextup (double __x) __attribute__ ((__nothrow__ ));



extern double remainder (double __x, double __y) __attribute__ ((__nothrow__ 
)); extern double __remainder (double __x, double __y) __attribute__ 
((__nothrow__ ));



extern double scalbn (double __x, int __n) __attribute__ ((__nothrow__ )); 
extern double __scalbn (double __x, int __n) __attribute__ ((__nothrow__ ));



extern int ilogb (double __x) __attribute__ ((__nothrow__ )); extern int 
__ilogb (double __x) __attribute__ ((__nothrow__ ));




extern long int llogb (double __x) __attribute__ ((__nothrow__ )); extern long 
int __llogb (double __x) __attribute__ ((__nothrow__ ));




extern double scalbln (double __x, long int __n) __attribute__ ((__nothrow__ 
)); extern double __scalbln (double __x, long int __n) __attribute__ 
((__nothrow__ ));



extern double nearbyint (double __x) __attribute__ ((__nothrow__ )); extern 
double __nearbyint (double __x) __attribute__ ((__nothrow__ ));



extern double round (double __x) __attribute__ ((__nothrow__ )) __attribute__ 
((__const__)); extern double __round (double __x) __attribute__ ((__nothrow__ 
)) __attribute__ ((__const__));



extern double trunc (double __x) __attribute__ ((__nothrow__ )) __attribute__ 
((__const__)); extern double __trunc (double __x) __attribute__ ((__nothrow__ 
)) __attribute__ ((__const__));




extern double remquo (double __x, double __y, int *__quo) __attribute__ 
((__nothrow__ )); extern double __remquo (double __x, double __y, int *__quo) 
__attribute__ ((__nothrow__ ));






extern long int lrint (double __x) __attribute__ ((__nothrow__ )); extern long 
int __lrint (double __x) __attribute__ ((__nothrow__ ));
__extension__
extern long long int llrint (double __x) __attribute__ ((__nothrow__ )); extern 
long long int __llrint (double __x) __attribute__ ((__nothrow__ ));



extern long int lround (double __x) __attribute__ ((__nothrow__ )); extern long 
int __lround (double __x) __attribute__ ((__nothrow__ ));
__extension__
extern long long int llround (double __x) __attribute__ ((__nothrow__ )); 
extern long long int __llround (double __x) __attribute__ ((__nothrow__ ));



extern double fdim (double __x, double __y) __attribute__ ((__nothrow__ )); 
extern double __fdim (double __x, double __y) __attribute__ ((__nothrow__ ));


extern double fmax (double __x, double __y) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__)); extern double __fmax (double __x, double __y) 
__attribute__ ((__nothrow__ )) __attribute__ ((__const__));


extern double fmin (double __x, double __y) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__)); extern double __fmin (double __x, double __y) 
__attribute__ ((__nothrow__ )) __attribute__ ((__const__));


extern double fma (double __x, double __y, double __z) __attribute__ 
((__nothrow__ )); extern double __fma (double __x, double __y, double __z) 
__attribute__ ((__nothrow__ ));




extern double roundeven (double __x) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__)); extern double __roundeven (double __x) 
__attribute__ ((__nothrow__ )) __attribute__ ((__const__));



extern __intmax_t fromfp (double __x, int __round, unsigned int __width) 
__attribute__ ((__nothrow__ )); extern __intmax_t __fromfp (double __x, int 
__round, unsigned int __width) __attribute__ ((__nothrow__ ))
                            ;



extern __uintmax_t ufromfp (double __x, int __round, unsigned int __width) 
__attribute__ ((__nothrow__ )); extern __uintmax_t __ufromfp (double __x, int 
__round, unsigned int __width) __attribute__ ((__nothrow__ ))
                              ;




extern __intmax_t fromfpx (double __x, int __round, unsigned int __width) 
__attribute__ ((__nothrow__ )); extern __intmax_t __fromfpx (double __x, int 
__round, unsigned int __width) __attribute__ ((__nothrow__ ))
                             ;




extern __uintmax_t ufromfpx (double __x, int __round, unsigned int __width) 
__attribute__ ((__nothrow__ )); extern __uintmax_t __ufromfpx (double __x, int 
__round, unsigned int __width) __attribute__ ((__nothrow__ ))
                               ;


extern int canonicalize (double *__cx, const double *__x) __attribute__ 
((__nothrow__ ));






extern double fmaxmag (double __x, double __y) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__)); extern double __fmaxmag (double __x, double __y) 
__attribute__ ((__nothrow__ )) __attribute__ ((__const__));


extern double fminmag (double __x, double __y) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__)); extern double __fminmag (double __x, double __y) 
__attribute__ ((__nothrow__ )) __attribute__ ((__const__));




extern int totalorder (const double *__x, const double *__y) __attribute__ 
((__nothrow__ ))

     __attribute__ ((__pure__));


extern int totalordermag (const double *__x, const double *__y) __attribute__ 
((__nothrow__ ))

     __attribute__ ((__pure__));


extern double getpayload (const double *__x) __attribute__ ((__nothrow__ )); 
extern double __getpayload (const double *__x) __attribute__ ((__nothrow__ ));


extern int setpayload (double *__x, double __payload) __attribute__ 
((__nothrow__ ));


extern int setpayloadsig (double *__x, double __payload) __attribute__ 
((__nothrow__ ));







extern double scalb (double __x, double __n) __attribute__ ((__nothrow__ )); 
extern double __scalb (double __x, double __n) __attribute__ ((__nothrow__ ));
# 2 "../include/bits/mathcalls.h" 2
# 314 "../math/math.h" 2
# 329 "../math/math.h"
# 1 "../include/bits/mathcalls-helper-functions.h" 1
# 1 "../math/bits/mathcalls-helper-functions.h" 1
# 20 "../math/bits/mathcalls-helper-functions.h"
extern int __fpclassifyf (float __value) __attribute__ ((__nothrow__ ))
     __attribute__ ((__const__));


extern int __signbitf (float __value) __attribute__ ((__nothrow__ ))
     __attribute__ ((__const__));



extern int __isinff (float __value) __attribute__ ((__nothrow__ ))
  __attribute__ ((__const__));


extern int __finitef (float __value) __attribute__ ((__nothrow__ ))
  __attribute__ ((__const__));


extern int __isnanf (float __value) __attribute__ ((__nothrow__ ))
  __attribute__ ((__const__));


extern int __iseqsigf (float __x, float __y) __attribute__ ((__nothrow__ ));


extern int __issignalingf (float __value) __attribute__ ((__nothrow__ ))
     __attribute__ ((__const__));
# 2 "../include/bits/mathcalls-helper-functions.h" 2
# 330 "../math/math.h" 2
# 1 "../include/bits/mathcalls.h" 1
# 1 "../math/bits/mathcalls.h" 1
# 53 "../math/bits/mathcalls.h"
extern float acosf (float __x) __attribute__ ((__nothrow__ )); extern float 
__acosf (float __x) __attribute__ ((__nothrow__ ));

extern float asinf (float __x) __attribute__ ((__nothrow__ )); extern float 
__asinf (float __x) __attribute__ ((__nothrow__ ));

extern float atanf (float __x) __attribute__ ((__nothrow__ )); extern float 
__atanf (float __x) __attribute__ ((__nothrow__ ));

extern float atan2f (float __y, float __x) __attribute__ ((__nothrow__ )); 
extern float __atan2f (float __y, float __x) __attribute__ ((__nothrow__ ));


 extern float cosf (float __x) __attribute__ ((__nothrow__ )); extern float 
__cosf (float __x) __attribute__ ((__nothrow__ ));

 extern float sinf (float __x) __attribute__ ((__nothrow__ )); extern float 
__sinf (float __x) __attribute__ ((__nothrow__ ));

extern float tanf (float __x) __attribute__ ((__nothrow__ )); extern float 
__tanf (float __x) __attribute__ ((__nothrow__ ));




extern float coshf (float __x) __attribute__ ((__nothrow__ )); extern float 
__coshf (float __x) __attribute__ ((__nothrow__ ));

extern float sinhf (float __x) __attribute__ ((__nothrow__ )); extern float 
__sinhf (float __x) __attribute__ ((__nothrow__ ));

extern float tanhf (float __x) __attribute__ ((__nothrow__ )); extern float 
__tanhf (float __x) __attribute__ ((__nothrow__ ));



 extern void sincosf (float __x, float *__sinx, float *__cosx) __attribute__ 
((__nothrow__ )); extern void __sincosf (float __x, float *__sinx, float 
*__cosx) __attribute__ ((__nothrow__ ))
                                                        ;




extern float acoshf (float __x) __attribute__ ((__nothrow__ )); extern float 
__acoshf (float __x) __attribute__ ((__nothrow__ ));

extern float asinhf (float __x) __attribute__ ((__nothrow__ )); extern float 
__asinhf (float __x) __attribute__ ((__nothrow__ ));

extern float atanhf (float __x) __attribute__ ((__nothrow__ )); extern float 
__atanhf (float __x) __attribute__ ((__nothrow__ ));





 extern float expf (float __x) __attribute__ ((__nothrow__ )); extern float 
__expf (float __x) __attribute__ ((__nothrow__ ));


extern float frexpf (float __x, int *__exponent) __attribute__ ((__nothrow__ 
)); extern float __frexpf (float __x, int *__exponent) __attribute__ 
((__nothrow__ ));


extern float ldexpf (float __x, int __exponent) __attribute__ ((__nothrow__ )); 
extern float __ldexpf (float __x, int __exponent) __attribute__ ((__nothrow__ 
));


 extern float logf (float __x) __attribute__ ((__nothrow__ )); extern float 
__logf (float __x) __attribute__ ((__nothrow__ ));


extern float log10f (float __x) __attribute__ ((__nothrow__ )); extern float 
__log10f (float __x) __attribute__ ((__nothrow__ ));


extern float modff (float __x, float *__iptr) __attribute__ ((__nothrow__ )); 
extern float __modff (float __x, float *__iptr) __attribute__ ((__nothrow__ )) ;



extern float exp10f (float __x) __attribute__ ((__nothrow__ )); extern float 
__exp10f (float __x) __attribute__ ((__nothrow__ ));




extern float expm1f (float __x) __attribute__ ((__nothrow__ )); extern float 
__expm1f (float __x) __attribute__ ((__nothrow__ ));


extern float log1pf (float __x) __attribute__ ((__nothrow__ )); extern float 
__log1pf (float __x) __attribute__ ((__nothrow__ ));


extern float logbf (float __x) __attribute__ ((__nothrow__ )); extern float 
__logbf (float __x) __attribute__ ((__nothrow__ ));




extern float exp2f (float __x) __attribute__ ((__nothrow__ )); extern float 
__exp2f (float __x) __attribute__ ((__nothrow__ ));


extern float log2f (float __x) __attribute__ ((__nothrow__ )); extern float 
__log2f (float __x) __attribute__ ((__nothrow__ ));






 extern float powf (float __x, float __y) __attribute__ ((__nothrow__ )); 
extern float __powf (float __x, float __y) __attribute__ ((__nothrow__ ));


extern float sqrtf (float __x) __attribute__ ((__nothrow__ )); extern float 
__sqrtf (float __x) __attribute__ ((__nothrow__ ));



extern float hypotf (float __x, float __y) __attribute__ ((__nothrow__ )); 
extern float __hypotf (float __x, float __y) __attribute__ ((__nothrow__ ));




extern float cbrtf (float __x) __attribute__ ((__nothrow__ )); extern float 
__cbrtf (float __x) __attribute__ ((__nothrow__ ));






extern float ceilf (float __x) __attribute__ ((__nothrow__ )) __attribute__ 
((__const__)); extern float __ceilf (float __x) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__));


extern float fabsf (float __x) __attribute__ ((__nothrow__ )) __attribute__ 
((__const__)); extern float __fabsf (float __x) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__));


extern float floorf (float __x) __attribute__ ((__nothrow__ )) __attribute__ 
((__const__)); extern float __floorf (float __x) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__));


extern float fmodf (float __x, float __y) __attribute__ ((__nothrow__ )); 
extern float __fmodf (float __x, float __y) __attribute__ ((__nothrow__ ));
# 177 "../math/bits/mathcalls.h"
extern int isinff (float __value) __attribute__ ((__nothrow__ ))
  __attribute__ ((__const__));




extern int finitef (float __value) __attribute__ ((__nothrow__ ))
  __attribute__ ((__const__));


extern float dremf (float __x, float __y) __attribute__ ((__nothrow__ )); 
extern float __dremf (float __x, float __y) __attribute__ ((__nothrow__ ));



extern float significandf (float __x) __attribute__ ((__nothrow__ )); extern 
float __significandf (float __x) __attribute__ ((__nothrow__ ));






extern float copysignf (float __x, float __y) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__)); extern float __copysignf (float __x, float __y) 
__attribute__ ((__nothrow__ )) __attribute__ ((__const__));




extern float nanf (const char *__tagb) __attribute__ ((__nothrow__ )); extern 
float __nanf (const char *__tagb) __attribute__ ((__nothrow__ ));
# 213 "../math/bits/mathcalls.h"
extern int isnanf (float __value) __attribute__ ((__nothrow__ ))
  __attribute__ ((__const__));





extern float j0f (float) __attribute__ ((__nothrow__ )); extern float __j0f 
(float) __attribute__ ((__nothrow__ ));
extern float j1f (float) __attribute__ ((__nothrow__ )); extern float __j1f 
(float) __attribute__ ((__nothrow__ ));
extern float jnf (int, float) __attribute__ ((__nothrow__ )); extern float 
__jnf (int, float) __attribute__ ((__nothrow__ ));
extern float y0f (float) __attribute__ ((__nothrow__ )); extern float __y0f 
(float) __attribute__ ((__nothrow__ ));
extern float y1f (float) __attribute__ ((__nothrow__ )); extern float __y1f 
(float) __attribute__ ((__nothrow__ ));
extern float ynf (int, float) __attribute__ ((__nothrow__ )); extern float 
__ynf (int, float) __attribute__ ((__nothrow__ ));





extern float erff (float) __attribute__ ((__nothrow__ )); extern float __erff 
(float) __attribute__ ((__nothrow__ ));
extern float erfcf (float) __attribute__ ((__nothrow__ )); extern float __erfcf 
(float) __attribute__ ((__nothrow__ ));
extern float lgammaf (float) __attribute__ ((__nothrow__ )); extern float 
__lgammaf (float) __attribute__ ((__nothrow__ ));




extern float tgammaf (float) __attribute__ ((__nothrow__ )); extern float 
__tgammaf (float) __attribute__ ((__nothrow__ ));





extern float gammaf (float) __attribute__ ((__nothrow__ )); extern float 
__gammaf (float) __attribute__ ((__nothrow__ ));







extern float lgammaf_r (float, int *__signgamp) __attribute__ ((__nothrow__ )); 
extern float __lgammaf_r (float, int *__signgamp) __attribute__ ((__nothrow__ 
));






extern float rintf (float __x) __attribute__ ((__nothrow__ )); extern float 
__rintf (float __x) __attribute__ ((__nothrow__ ));


extern float nextafterf (float __x, float __y) __attribute__ ((__nothrow__ )); 
extern float __nextafterf (float __x, float __y) __attribute__ ((__nothrow__ ));

extern float nexttowardf (float __x, long double __y) __attribute__ 
((__nothrow__ )); extern float __nexttowardf (float __x, long double __y) 
__attribute__ ((__nothrow__ ));




extern float nextdownf (float __x) __attribute__ ((__nothrow__ )); extern float 
__nextdownf (float __x) __attribute__ ((__nothrow__ ));

extern float nextupf (float __x) __attribute__ ((__nothrow__ )); extern float 
__nextupf (float __x) __attribute__ ((__nothrow__ ));



extern float remainderf (float __x, float __y) __attribute__ ((__nothrow__ )); 
extern float __remainderf (float __x, float __y) __attribute__ ((__nothrow__ ));



extern float scalbnf (float __x, int __n) __attribute__ ((__nothrow__ )); 
extern float __scalbnf (float __x, int __n) __attribute__ ((__nothrow__ ));



extern int ilogbf (float __x) __attribute__ ((__nothrow__ )); extern int 
__ilogbf (float __x) __attribute__ ((__nothrow__ ));




extern long int llogbf (float __x) __attribute__ ((__nothrow__ )); extern long 
int __llogbf (float __x) __attribute__ ((__nothrow__ ));




extern float scalblnf (float __x, long int __n) __attribute__ ((__nothrow__ )); 
extern float __scalblnf (float __x, long int __n) __attribute__ ((__nothrow__ 
));



extern float nearbyintf (float __x) __attribute__ ((__nothrow__ )); extern 
float __nearbyintf (float __x) __attribute__ ((__nothrow__ ));



extern float roundf (float __x) __attribute__ ((__nothrow__ )) __attribute__ 
((__const__)); extern float __roundf (float __x) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__));



extern float truncf (float __x) __attribute__ ((__nothrow__ )) __attribute__ 
((__const__)); extern float __truncf (float __x) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__));




extern float remquof (float __x, float __y, int *__quo) __attribute__ 
((__nothrow__ )); extern float __remquof (float __x, float __y, int *__quo) 
__attribute__ ((__nothrow__ ));






extern long int lrintf (float __x) __attribute__ ((__nothrow__ )); extern long 
int __lrintf (float __x) __attribute__ ((__nothrow__ ));
__extension__
extern long long int llrintf (float __x) __attribute__ ((__nothrow__ )); extern 
long long int __llrintf (float __x) __attribute__ ((__nothrow__ ));



extern long int lroundf (float __x) __attribute__ ((__nothrow__ )); extern long 
int __lroundf (float __x) __attribute__ ((__nothrow__ ));
__extension__
extern long long int llroundf (float __x) __attribute__ ((__nothrow__ )); 
extern long long int __llroundf (float __x) __attribute__ ((__nothrow__ ));



extern float fdimf (float __x, float __y) __attribute__ ((__nothrow__ )); 
extern float __fdimf (float __x, float __y) __attribute__ ((__nothrow__ ));


extern float fmaxf (float __x, float __y) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__)); extern float __fmaxf (float __x, float __y) 
__attribute__ ((__nothrow__ )) __attribute__ ((__const__));


extern float fminf (float __x, float __y) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__)); extern float __fminf (float __x, float __y) 
__attribute__ ((__nothrow__ )) __attribute__ ((__const__));


extern float fmaf (float __x, float __y, float __z) __attribute__ ((__nothrow__ 
)); extern float __fmaf (float __x, float __y, float __z) __attribute__ 
((__nothrow__ ));




extern float roundevenf (float __x) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__)); extern float __roundevenf (float __x) 
__attribute__ ((__nothrow__ )) __attribute__ ((__const__));



extern __intmax_t fromfpf (float __x, int __round, unsigned int __width) 
__attribute__ ((__nothrow__ )); extern __intmax_t __fromfpf (float __x, int 
__round, unsigned int __width) __attribute__ ((__nothrow__ ))
                            ;



extern __uintmax_t ufromfpf (float __x, int __round, unsigned int __width) 
__attribute__ ((__nothrow__ )); extern __uintmax_t __ufromfpf (float __x, int 
__round, unsigned int __width) __attribute__ ((__nothrow__ ))
                              ;




extern __intmax_t fromfpxf (float __x, int __round, unsigned int __width) 
__attribute__ ((__nothrow__ )); extern __intmax_t __fromfpxf (float __x, int 
__round, unsigned int __width) __attribute__ ((__nothrow__ ))
                             ;




extern __uintmax_t ufromfpxf (float __x, int __round, unsigned int __width) 
__attribute__ ((__nothrow__ )); extern __uintmax_t __ufromfpxf (float __x, int 
__round, unsigned int __width) __attribute__ ((__nothrow__ ))
                               ;


extern int canonicalizef (float *__cx, const float *__x) __attribute__ 
((__nothrow__ ));






extern float fmaxmagf (float __x, float __y) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__)); extern float __fmaxmagf (float __x, float __y) 
__attribute__ ((__nothrow__ )) __attribute__ ((__const__));


extern float fminmagf (float __x, float __y) __attribute__ ((__nothrow__ )) 
__attribute__ ((__const__)); extern float __fminmagf (float __x, float __y) 
__attribute__ ((__nothrow__ )) __attribute__ ((__const__));




extern int totalorderf (const float *__x, const float *__y) __attribute__ 
((__nothrow__ ))

     __attribute__ ((__pure__));


extern int totalordermagf (const float *__x, const float *__y) __attribute__ 
((__nothrow__ ))

     __attribute__ ((__pure__));


extern float getpayloadf (const float *__x) __attribute__ ((__nothrow__ )); 
extern float __getpayloadf (const float *__x) __attribute__ ((__nothrow__ ));


extern int setpayloadf (float *__x, float __payload) __attribute__ 
((__nothrow__ ));


extern int setpayloadsigf (float *__x, float __payload) __attribute__ 
((__nothrow__ ));







extern float scalbf (float __x, float __n) __attribute__ ((__nothrow__ )); 
extern float __scalbf (float __x, float __n) __attribute__ ((__nothrow__ ));
# 2 "../include/bits/mathcalls.h" 2
# 331 "../math/math.h" 2
# 566 "../math/math.h"
# 1 "../include/bits/mathcalls-narrow.h" 1
# 1 "../math/bits/mathcalls-narrow.h" 1
# 24 "../math/bits/mathcalls-narrow.h"
extern float fadd (double __x, double __y) __attribute__ ((__nothrow__ ));


extern float fdiv (double __x, double __y) __attribute__ ((__nothrow__ ));


extern float fmul (double __x, double __y) __attribute__ ((__nothrow__ ));


extern float fsqrt (double __x) __attribute__ ((__nothrow__ ));


extern float fsub (double __x, double __y) __attribute__ ((__nothrow__ ));
# 2 "../include/bits/mathcalls-narrow.h" 2
# 567 "../math/math.h" 2
# 587 "../math/math.h"
# 1 "../include/bits/mathcalls-narrow.h" 1
# 1 "../math/bits/mathcalls-narrow.h" 1
# 24 "../math/bits/mathcalls-narrow.h"
extern float faddl (long double __x, long double __y) __attribute__ 
((__nothrow__ ));


extern float fdivl (long double __x, long double __y) __attribute__ 
((__nothrow__ ));


extern float fmull (long double __x, long double __y) __attribute__ 
((__nothrow__ ));


extern float fsqrtl (long double __x) __attribute__ ((__nothrow__ ));


extern float fsubl (long double __x, long double __y) __attribute__ 
((__nothrow__ ));
# 2 "../include/bits/mathcalls-narrow.h" 2
# 588 "../math/math.h" 2
# 616 "../math/math.h"
# 1 "../include/bits/mathcalls-narrow.h" 1
# 1 "../math/bits/mathcalls-narrow.h" 1
# 24 "../math/bits/mathcalls-narrow.h"
extern double daddl (long double __x, long double __y) __attribute__ 
((__nothrow__ ));


extern double ddivl (long double __x, long double __y) __attribute__ 
((__nothrow__ ));


extern double dmull (long double __x, long double __y) __attribute__ 
((__nothrow__ ));


extern double dsqrtl (long double __x) __attribute__ ((__nothrow__ ));


extern double dsubl (long double __x, long double __y) __attribute__ 
((__nothrow__ ));
# 2 "../include/bits/mathcalls-narrow.h" 2
# 617 "../math/math.h" 2
# 697 "../math/math.h"
# 1 "../include/bits/mathcalls-narrow.h" 1
# 1 "../math/bits/mathcalls-narrow.h" 1
# 24 "../math/bits/mathcalls-narrow.h"
extern _Float32 f32addf32x (_Float32x __x, _Float32x __y) __attribute__ 
((__nothrow__ ));


extern _Float32 f32divf32x (_Float32x __x, _Float32x __y) __attribute__ 
((__nothrow__ ));


extern _Float32 f32mulf32x (_Float32x __x, _Float32x __y) __attribute__ 
((__nothrow__ ));


extern _Float32 f32sqrtf32x (_Float32x __x) __attribute__ ((__nothrow__ ));


extern _Float32 f32subf32x (_Float32x __x, _Float32x __y) __attribute__ 
((__nothrow__ ));
# 2 "../include/bits/mathcalls-narrow.h" 2
# 698 "../math/math.h" 2
# 707 "../math/math.h"
# 1 "../include/bits/mathcalls-narrow.h" 1
# 1 "../math/bits/mathcalls-narrow.h" 1
# 24 "../math/bits/mathcalls-narrow.h"
extern _Float32 f32addf64 (_Float64 __x, _Float64 __y) __attribute__ 
((__nothrow__ ));


extern _Float32 f32divf64 (_Float64 __x, _Float64 __y) __attribute__ 
((__nothrow__ ));


extern _Float32 f32mulf64 (_Float64 __x, _Float64 __y) __attribute__ 
((__nothrow__ ));


extern _Float32 f32sqrtf64 (_Float64 __x) __attribute__ ((__nothrow__ ));


extern _Float32 f32subf64 (_Float64 __x, _Float64 __y) __attribute__ 
((__nothrow__ ));
# 2 "../include/bits/mathcalls-narrow.h" 2
# 708 "../math/math.h" 2
# 747 "../math/math.h"
# 1 "../include/bits/mathcalls-narrow.h" 1
# 1 "../math/bits/mathcalls-narrow.h" 1
# 24 "../math/bits/mathcalls-narrow.h"
extern _Float32x f32xaddf64 (_Float64 __x, _Float64 __y) __attribute__ 
((__nothrow__ ));


extern _Float32x f32xdivf64 (_Float64 __x, _Float64 __y) __attribute__ 
((__nothrow__ ));


extern _Float32x f32xmulf64 (_Float64 __x, _Float64 __y) __attribute__ 
((__nothrow__ ));


extern _Float32x f32xsqrtf64 (_Float64 __x) __attribute__ ((__nothrow__ ));


extern _Float32x f32xsubf64 (_Float64 __x, _Float64 __y) __attribute__ 
((__nothrow__ ));
# 2 "../include/bits/mathcalls-narrow.h" 2
# 748 "../math/math.h" 2
# 854 "../math/math.h"
extern int signgam;
# 934 "../math/math.h"
enum
  {
    FP_NAN =

      0,
    FP_INFINITE =

      1,
    FP_ZERO =

      2,
    FP_SUBNORMAL =

      3,
    FP_NORMAL =

      4
  };
# 1054 "../math/math.h"
# 1 "../bits/iscanonical.h" 1
# 1055 "../math/math.h" 2
# 1406 "../math/math.h"

# 8 "../include/math.h" 2



extern int __signgam;








# 35 "../include/math.h"






# 57 "../include/math.h"
# 1 "../include/stdint.h" 1
# 1 "../stdlib/stdint.h" 1
# 26 "../stdlib/stdint.h"
# 1 "../bits/libc-header-start.h" 1
# 27 "../stdlib/stdint.h" 2
# 1 "../include/bits/types.h" 1
# 28 "../stdlib/stdint.h" 2
# 1 "../bits/wchar.h" 1
# 29 "../stdlib/stdint.h" 2
# 1 "../sysdeps/wordsize-32/bits/wordsize.h" 1
# 30 "../stdlib/stdint.h" 2




# 1 "../bits/stdint-intn.h" 1
# 22 "../bits/stdint-intn.h"
# 1 "../include/bits/types.h" 1
# 23 "../bits/stdint-intn.h" 2

typedef __int8_t int8_t;
typedef __int16_t int16_t;
typedef __int32_t int32_t;
typedef __int64_t int64_t;
# 35 "../stdlib/stdint.h" 2


# 1 "../bits/stdint-uintn.h" 1
# 22 "../bits/stdint-uintn.h"
# 1 "../include/bits/types.h" 1
# 23 "../bits/stdint-uintn.h" 2

typedef __uint8_t uint8_t;
typedef __uint16_t uint16_t;
typedef __uint32_t uint32_t;
typedef __uint64_t uint64_t;
# 38 "../stdlib/stdint.h" 2





typedef __int_least8_t int_least8_t;
typedef __int_least16_t int_least16_t;
typedef __int_least32_t int_least32_t;
typedef __int_least64_t int_least64_t;


typedef __uint_least8_t uint_least8_t;
typedef __uint_least16_t uint_least16_t;
typedef __uint_least32_t uint_least32_t;
typedef __uint_least64_t uint_least64_t;





typedef signed char int_fast8_t;





typedef int int_fast16_t;
typedef int int_fast32_t;
__extension__
typedef long long int int_fast64_t;



typedef unsigned char uint_fast8_t;





typedef unsigned int uint_fast16_t;
typedef unsigned int uint_fast32_t;
__extension__
typedef unsigned long long int uint_fast64_t;
# 93 "../stdlib/stdint.h"
typedef int intptr_t;


typedef unsigned int uintptr_t;




typedef __intmax_t intmax_t;
typedef __uintmax_t uintmax_t;
# 2 "../include/stdint.h" 2
# 58 "../include/math.h" 2
# 1 "../sysdeps/generic/nan-high-order-bit.h" 1
# 59 "../include/math.h" 2




typedef union
{
  float value;
  uint32_t word;
} ieee_float_shape_type;
# 89 "../include/math.h"
extern inline int
__issignalingf (float x)
{
  uint32_t xi;
  do { ieee_float_shape_type gf_u; gf_u.value = (x); (xi) = gf_u.word; } while 
(0);
# 103 "../include/math.h"
  xi ^= 0x00400000;


  return (xi & 0x7fffffff) > 0x7fc00000;

}
# 30 "../sysdeps/ieee754/soft-fp/s_fmaf.c" 2
# 1 "../include/libc-diag.h" 1
# 31 "../sysdeps/ieee754/soft-fp/s_fmaf.c" 2
# 1 "../sysdeps/generic/libm-alias-float.h" 1
# 22 "../sysdeps/generic/libm-alias-float.h"
# 1 "../bits/floatn.h" 1
# 23 "../sysdeps/generic/libm-alias-float.h" 2
# 32 "../sysdeps/ieee754/soft-fp/s_fmaf.c" 2








# 39 "../sysdeps/ieee754/soft-fp/s_fmaf.c"
#pragma GCC diagnostic push
# 39 "../sysdeps/ieee754/soft-fp/s_fmaf.c"
;

# 40 "../sysdeps/ieee754/soft-fp/s_fmaf.c"
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
# 40 "../sysdeps/ieee754/soft-fp/s_fmaf.c"
;

# 1 "../soft-fp/soft-fp.h" 1
# 32 "../soft-fp/soft-fp.h"
# 1 "../sysdeps/nios2/sfp-machine.h" 1
# 33 "../soft-fp/soft-fp.h" 2
# 44 "../soft-fp/soft-fp.h"
# 1 "../include/endian.h" 1
# 1 "../string/endian.h" 1
# 24 "../string/endian.h"
# 1 "../include/bits/endian.h" 1
# 1 "../string/bits/endian.h" 1
# 35 "../string/bits/endian.h"
# 1 "../sysdeps/nios2/bits/endianness.h" 1
# 36 "../string/bits/endian.h" 2
# 2 "../include/bits/endian.h" 2
# 25 "../string/endian.h" 2
# 35 "../string/endian.h"
# 1 "../bits/byteswap.h" 1
# 27 "../bits/byteswap.h"
# 1 "../include/bits/types.h" 1
# 28 "../bits/byteswap.h" 2





static __inline __uint16_t
__bswap_16 (__uint16_t __bsx)
{

  return __builtin_bswap16 (__bsx);



}






static __inline __uint32_t
__bswap_32 (__uint32_t __bsx)
{

  return __builtin_bswap32 (__bsx);



}
# 69 "../bits/byteswap.h"
__extension__ static __inline __uint64_t
__bswap_64 (__uint64_t __bsx)
{

  return __builtin_bswap64 (__bsx);



}
# 36 "../string/endian.h" 2
# 1 "../bits/uintn-identity.h" 1
# 26 "../bits/uintn-identity.h"
# 1 "../include/bits/types.h" 1
# 27 "../bits/uintn-identity.h" 2





static __inline __uint16_t
__uint16_identity (__uint16_t __x)
{
  return __x;
}

static __inline __uint32_t
__uint32_identity (__uint32_t __x)
{
  return __x;
}

static __inline __uint64_t
__uint64_identity (__uint64_t __x)
{
  return __x;
}
# 37 "../string/endian.h" 2
# 2 "../include/endian.h" 2
# 45 "../soft-fp/soft-fp.h" 2
# 313 "../soft-fp/soft-fp.h"
# 1 "../soft-fp/op-1.h" 1
# 314 "../soft-fp/soft-fp.h" 2
# 1 "../soft-fp/op-2.h" 1
# 315 "../soft-fp/soft-fp.h" 2
# 1 "../soft-fp/op-4.h" 1
# 316 "../soft-fp/soft-fp.h" 2
# 1 "../soft-fp/op-8.h" 1
# 317 "../soft-fp/soft-fp.h" 2
# 1 "../soft-fp/op-common.h" 1
# 318 "../soft-fp/soft-fp.h" 2





typedef int QItype __attribute__ ((mode (QI)));
typedef int SItype __attribute__ ((mode (SI)));
typedef int DItype __attribute__ ((mode (DI)));
typedef unsigned int UQItype __attribute__ ((mode (QI)));
typedef unsigned int USItype __attribute__ ((mode (SI)));
typedef unsigned int UDItype __attribute__ ((mode (DI)));

typedef unsigned int UHWtype __attribute__ ((mode (HI)));
# 344 "../soft-fp/soft-fp.h"
# 1 "../stdlib/longlong.h" 1
# 60 "../stdlib/longlong.h"
extern const UQItype __clz_tab[256] ;
# 345 "../soft-fp/soft-fp.h" 2
# 43 "../sysdeps/ieee754/soft-fp/s_fmaf.c" 2
# 1 "../soft-fp/single.h" 1
# 65 "../soft-fp/single.h"
typedef float SFtype __attribute__ ((mode (SF)));

union _FP_UNION_S
{
  SFtype flt;
  struct
  {





    unsigned frac : 24 - (((unsigned long) 1 << (24 -1)) != 0);
    unsigned exp : 8;
    unsigned sign : 1;

  } bits;
};
# 44 "../sysdeps/ieee754/soft-fp/s_fmaf.c" 2

float
__fmaf (float a, float b, float c)
{
  int _fex = 0;
  long A_c __attribute__ ((unused)) ; long A_s __attribute__ ((unused)) ; long 
A_e __attribute__ ((unused)) ; unsigned long A_f ;
  long B_c __attribute__ ((unused)) ; long B_s __attribute__ ((unused)) ; long 
B_e __attribute__ ((unused)) ; unsigned long B_f ;
  long C_c __attribute__ ((unused)) ; long C_s __attribute__ ((unused)) ; long 
C_e __attribute__ ((unused)) ; unsigned long C_f ;
  long R_c __attribute__ ((unused)) ; long R_s __attribute__ ((unused)) ; long 
R_e __attribute__ ((unused)) ; unsigned long R_f ;
  float r;

  do {} while (0);
  do { do { union _FP_UNION_S _FP_UNPACK_RAW_1_flo; _FP_UNPACK_RAW_1_flo.flt = 
((a)); A_f = _FP_UNPACK_RAW_1_flo.bits.frac; A_e = 
_FP_UNPACK_RAW_1_flo.bits.exp; A_s = _FP_UNPACK_RAW_1_flo.bits.sign; } while 
(0); do { switch (A_e) { default: (A_f) |= ((unsigned long) 1 << (24 -1)); do { 
if (__builtin_constant_p (3) && (3) == 1) A_f += A_f; else A_f <<= (3); } while 
(0); A_e -= 127; A_c = 0; break; case 0: if ((A_f == 0)) A_c = 1; else if (0) { 
A_c = 1; (A_f = 0); _fex |= (0); } else { long _FP_UNPACK_CANONICAL_shift; do { 
_Static_assert (((sizeof (unsigned long) == sizeof (unsigned int) || (sizeof 
(unsigned long) == sizeof (unsigned long)) || (sizeof (unsigned long) == sizeof 
(unsigned long long)))), "_FP_W_TYPE size unsupported for clz"); if (sizeof 
(unsigned long) == sizeof (unsigned int)) ((_FP_UNPACK_CANONICAL_shift)) = 
__builtin_clz (A_f); else if (sizeof (unsigned long) == sizeof (unsigned long)) 
((_FP_UNPACK_CANONICAL_shift)) = __builtin_clzl (A_f); else 
((_FP_UNPACK_CANONICAL_shift)) = __builtin_clzll (A_f); } while (0); 
_FP_UNPACK_CANONICAL_shift -= (32 - 24); do { if (__builtin_constant_p 
((_FP_UNPACK_CANONICAL_shift + 3)) && ((_FP_UNPACK_CANONICAL_shift + 3)) == 1) 
A_f += A_f; else A_f <<= ((_FP_UNPACK_CANONICAL_shift + 3)); } while (0); A_e 
-= (127 - 1 + _FP_UNPACK_CANONICAL_shift); A_c = 0; _fex |= (0); } break; case 
255: if ((A_f == 0)) A_c = 2; else { A_c = 3; if (((0) ? ((A_f) & ((unsigned 
long) 1 << (24 -2))) : !((A_f) & ((unsigned long) 1 << (24 -2))))) _fex |= (0 | 
0); } break; } } while (0); } while (0);
  do { do { union _FP_UNION_S _FP_UNPACK_RAW_1_flo; _FP_UNPACK_RAW_1_flo.flt = 
((b)); B_f = _FP_UNPACK_RAW_1_flo.bits.frac; B_e = 
_FP_UNPACK_RAW_1_flo.bits.exp; B_s = _FP_UNPACK_RAW_1_flo.bits.sign; } while 
(0); do { switch (B_e) { default: (B_f) |= ((unsigned long) 1 << (24 -1)); do { 
if (__builtin_constant_p (3) && (3) == 1) B_f += B_f; else B_f <<= (3); } while 
(0); B_e -= 127; B_c = 0; break; case 0: if ((B_f == 0)) B_c = 1; else if (0) { 
B_c = 1; (B_f = 0); _fex |= (0); } else { long _FP_UNPACK_CANONICAL_shift; do { 
_Static_assert (((sizeof (unsigned long) == sizeof (unsigned int) || (sizeof 
(unsigned long) == sizeof (unsigned long)) || (sizeof (unsigned long) == sizeof 
(unsigned long long)))), "_FP_W_TYPE size unsupported for clz"); if (sizeof 
(unsigned long) == sizeof (unsigned int)) ((_FP_UNPACK_CANONICAL_shift)) = 
__builtin_clz (B_f); else if (sizeof (unsigned long) == sizeof (unsigned long)) 
((_FP_UNPACK_CANONICAL_shift)) = __builtin_clzl (B_f); else 
((_FP_UNPACK_CANONICAL_shift)) = __builtin_clzll (B_f); } while (0); 
_FP_UNPACK_CANONICAL_shift -= (32 - 24); do { if (__builtin_constant_p 
((_FP_UNPACK_CANONICAL_shift + 3)) && ((_FP_UNPACK_CANONICAL_shift + 3)) == 1) 
B_f += B_f; else B_f <<= ((_FP_UNPACK_CANONICAL_shift + 3)); } while (0); B_e 
-= (127 - 1 + _FP_UNPACK_CANONICAL_shift); B_c = 0; _fex |= (0); } break; case 
255: if ((B_f == 0)) B_c = 2; else { B_c = 3; if (((0) ? ((B_f) & ((unsigned 
long) 1 << (24 -2))) : !((B_f) & ((unsigned long) 1 << (24 -2))))) _fex |= (0 | 
0); } break; } } while (0); } while (0);
  do { do { union _FP_UNION_S _FP_UNPACK_RAW_1_flo; _FP_UNPACK_RAW_1_flo.flt = 
((c)); C_f = _FP_UNPACK_RAW_1_flo.bits.frac; C_e = 
_FP_UNPACK_RAW_1_flo.bits.exp; C_s = _FP_UNPACK_RAW_1_flo.bits.sign; } while 
(0); do { switch (C_e) { default: (C_f) |= ((unsigned long) 1 << (24 -1)); do { 
if (__builtin_constant_p (3) && (3) == 1) C_f += C_f; else C_f <<= (3); } while 
(0); C_e -= 127; C_c = 0; break; case 0: if ((C_f == 0)) C_c = 1; else if (0) { 
C_c = 1; (C_f = 0); _fex |= (0); } else { long _FP_UNPACK_CANONICAL_shift; do { 
_Static_assert (((sizeof (unsigned long) == sizeof (unsigned int) || (sizeof 
(unsigned long) == sizeof (unsigned long)) || (sizeof (unsigned long) == sizeof 
(unsigned long long)))), "_FP_W_TYPE size unsupported for clz"); if (sizeof 
(unsigned long) == sizeof (unsigned int)) ((_FP_UNPACK_CANONICAL_shift)) = 
__builtin_clz (C_f); else if (sizeof (unsigned long) == sizeof (unsigned long)) 
((_FP_UNPACK_CANONICAL_shift)) = __builtin_clzl (C_f); else 
((_FP_UNPACK_CANONICAL_shift)) = __builtin_clzll (C_f); } while (0); 
_FP_UNPACK_CANONICAL_shift -= (32 - 24); do { if (__builtin_constant_p 
((_FP_UNPACK_CANONICAL_shift + 3)) && ((_FP_UNPACK_CANONICAL_shift + 3)) == 1) 
C_f += C_f; else C_f <<= ((_FP_UNPACK_CANONICAL_shift + 3)); } while (0); C_e 
-= (127 - 1 + _FP_UNPACK_CANONICAL_shift); C_c = 0; _fex |= (0); } break; case 
255: if ((C_f == 0)) C_c = 2; else { C_c = 3; if (((0) ? ((C_f) & ((unsigned 
long) 1 << (24 -2))) : !((C_f) & ((unsigned long) 1 << (24 -2))))) _fex |= (0 | 
0); } break; } } while (0); } while (0);
  do { __label__ done_fma; long _FP_FMA_T_c __attribute__ ((unused)) ; long 
_FP_FMA_T_s __attribute__ ((unused)) ; long _FP_FMA_T_e __attribute__ 
((unused)) ; unsigned long _FP_FMA_T_f ; _FP_FMA_T_s = A_s ^ B_s; _FP_FMA_T_e = 
A_e + B_e + 1; switch ((((A_c) << 2) | (B_c))) { case (((0) << 2) | (0)): 
switch (C_c) { case 2: case 3: R_s = C_s; (R_f = C_f); R_c = C_c; break; case 
1: R_c = 0; R_s = _FP_FMA_T_s; R_e = _FP_FMA_T_e; do { unsigned long 
_FP_MUL_MEAT_1_wide_Z_f0 , _FP_MUL_MEAT_1_wide_Z_f1 ; do { do { unsigned long 
__x0, __x1, __x2, __x3; UHWtype __ul, __vl, __uh, __vh; __ul = ((unsigned long) 
(A_f) & (((unsigned long) 1 << (32 / 2)) - 1)); __uh = ((unsigned long) (A_f) 
>> (32 / 2)); __vl = ((unsigned long) (B_f) & (((unsigned long) 1 << (32 / 2)) 
- 1)); __vh = ((unsigned long) (B_f) >> (32 / 2)); __x0 = (unsigned long) __ul 
* __vl; __x1 = (unsigned long) __ul * __vh; __x2 = (unsigned long) __uh * __vl; 
__x3 = (unsigned long) __uh * __vh; __x1 += ((unsigned long) (__x0) >> (32 / 
2)); __x1 += __x2; if (__x1 < __x2) __x3 += ((unsigned long) 1 << (32 / 2)); 
(_FP_MUL_MEAT_1_wide_Z_f1) = __x3 + ((unsigned long) (__x1) >> (32 / 2)); 
(_FP_MUL_MEAT_1_wide_Z_f0) = ((unsigned long) (__x1) & (((unsigned long) 1 << 
(32 / 2)) - 1)) * ((unsigned long) 1 << (32 / 2)) + ((unsigned long) (__x0) & 
(((unsigned long) 1 << (32 / 2)) - 1)); } while (0); } while (0); (void) (((((3 
+ 24))-1) < 32) ? ({ _FP_MUL_MEAT_1_wide_Z_f0 = (_FP_MUL_MEAT_1_wide_Z_f1 << 
(32 - (((3 + 24))-1)) | _FP_MUL_MEAT_1_wide_Z_f0 >> (((3 + 24))-1) | 
(__builtin_constant_p (((3 + 24))-1) && (((3 + 24))-1) == 1 ? 
_FP_MUL_MEAT_1_wide_Z_f0 & 1 : (_FP_MUL_MEAT_1_wide_Z_f0 << (32 - (((3 + 
24))-1))) != 0)); _FP_MUL_MEAT_1_wide_Z_f1 >>= (((3 + 24))-1); }) : ({ 
_FP_MUL_MEAT_1_wide_Z_f0 = (_FP_MUL_MEAT_1_wide_Z_f1 >> ((((3 + 24))-1) - 32) | 
((((((3 + 24))-1) == 32 ? 0 : (_FP_MUL_MEAT_1_wide_Z_f1 << (2*32 - (((3 + 
24))-1)))) | _FP_MUL_MEAT_1_wide_Z_f0) != 0)); _FP_MUL_MEAT_1_wide_Z_f1 = 0; 
})); R_f = _FP_MUL_MEAT_1_wide_Z_f0; } while (0); if ((R_f & ((unsigned long) 1 
<< ((3 + 24))))) (R_f = (R_f >> ((1)) | (__builtin_constant_p ((1)) && ((1)) == 
1 ? R_f & 1 : (R_f << (32 - ((1)))) != 0))); else R_e--; break; case 0:; 
unsigned long _FP_FMA_TD_f0 , _FP_FMA_TD_f1 ; unsigned long _FP_FMA_ZD_f0 , 
_FP_FMA_ZD_f1 ; unsigned long _FP_FMA_RD_f0 , _FP_FMA_RD_f1 ; do { do { 
unsigned long __x0, __x1, __x2, __x3; UHWtype __ul, __vl, __uh, __vh; __ul = 
((unsigned long) (A_f) & (((unsigned long) 1 << (32 / 2)) - 1)); __uh = 
((unsigned long) (A_f) >> (32 / 2)); __vl = ((unsigned long) (B_f) & 
(((unsigned long) 1 << (32 / 2)) - 1)); __vh = ((unsigned long) (B_f) >> (32 / 
2)); __x0 = (unsigned long) __ul * __vl; __x1 = (unsigned long) __ul * __vh; 
__x2 = (unsigned long) __uh * __vl; __x3 = (unsigned long) __uh * __vh; __x1 += 
((unsigned long) (__x0) >> (32 / 2)); __x1 += __x2; if (__x1 < __x2) __x3 += 
((unsigned long) 1 << (32 / 2)); (_FP_FMA_TD_f1) = __x3 + ((unsigned long) 
(__x1) >> (32 / 2)); (_FP_FMA_TD_f0) = ((unsigned long) (__x1) & (((unsigned 
long) 1 << (32 / 2)) - 1)) * ((unsigned long) 1 << (32 / 2)) + ((unsigned long) 
(__x0) & (((unsigned long) 1 << (32 / 2)) - 1)); } while (0); } while (0); R_e 
= _FP_FMA_T_e; int _FP_FMA_tsh = ((_FP_FMA_TD_f1) & ((unsigned long) 1 << ((2 * 
(3 + 24)) - 1) % 32)) == 0; _FP_FMA_T_e -= _FP_FMA_tsh; int _FP_FMA_ediff = 
_FP_FMA_T_e - C_e; if (_FP_FMA_ediff >= 0) { int _FP_FMA_shift = (3 + 24) - 
_FP_FMA_tsh - _FP_FMA_ediff; if (_FP_FMA_shift <= -(3 + 24)) (_FP_FMA_ZD_f0 = 
1, _FP_FMA_ZD_f1 = 0); else { ((_FP_FMA_ZD_f0 = C_f), (_FP_FMA_ZD_f1 = 0)); if 
(_FP_FMA_shift < 0) (void) (((-_FP_FMA_shift) < 32) ? ({ _FP_FMA_ZD_f0 = 
(_FP_FMA_ZD_f1 << (32 - (-_FP_FMA_shift)) | _FP_FMA_ZD_f0 >> (-_FP_FMA_shift) | 
(__builtin_constant_p (-_FP_FMA_shift) && (-_FP_FMA_shift) == 1 ? _FP_FMA_ZD_f0 
& 1 : (_FP_FMA_ZD_f0 << (32 - (-_FP_FMA_shift))) != 0)); _FP_FMA_ZD_f1 >>= 
(-_FP_FMA_shift); }) : ({ _FP_FMA_ZD_f0 = (_FP_FMA_ZD_f1 >> ((-_FP_FMA_shift) - 
32) | ((((-_FP_FMA_shift) == 32 ? 0 : (_FP_FMA_ZD_f1 << (2*32 - 
(-_FP_FMA_shift)))) | _FP_FMA_ZD_f0) != 0)); _FP_FMA_ZD_f1 = 0; })); else if 
(_FP_FMA_shift > 0) (void) (((_FP_FMA_shift) < 32) ? ({ if 
(__builtin_constant_p (_FP_FMA_shift) && (_FP_FMA_shift) == 1) { _FP_FMA_ZD_f1 
= _FP_FMA_ZD_f1 + _FP_FMA_ZD_f1 + (((signed long) (_FP_FMA_ZD_f0)) < 0); 
_FP_FMA_ZD_f0 += _FP_FMA_ZD_f0; } else { _FP_FMA_ZD_f1 = _FP_FMA_ZD_f1 << 
(_FP_FMA_shift) | _FP_FMA_ZD_f0 >> (32 - (_FP_FMA_shift)); _FP_FMA_ZD_f0 <<= 
(_FP_FMA_shift); } 0; }) : ({ _FP_FMA_ZD_f1 = _FP_FMA_ZD_f0 << ((_FP_FMA_shift) 
- 32); _FP_FMA_ZD_f0 = 0; })); } R_s = _FP_FMA_T_s; if (_FP_FMA_T_s == C_s) do 
{ unsigned long __x; __x = (_FP_FMA_TD_f0) + (_FP_FMA_ZD_f0); (_FP_FMA_RD_f1) = 
(_FP_FMA_TD_f1) + (_FP_FMA_ZD_f1) + (__x < (_FP_FMA_TD_f0)); (_FP_FMA_RD_f0) = 
__x; } while (0); else { do { unsigned long __x; __x = (_FP_FMA_TD_f0) - 
(_FP_FMA_ZD_f0); (_FP_FMA_RD_f1) = (_FP_FMA_TD_f1) - (_FP_FMA_ZD_f1) - (__x > 
(_FP_FMA_TD_f0)); (_FP_FMA_RD_f0) = __x; } while (0); if (((signed long) 
_FP_FMA_RD_f1 < 0)) { R_s = C_s; do { unsigned long __x; __x = (_FP_FMA_ZD_f0) 
- (_FP_FMA_TD_f0); (_FP_FMA_RD_f1) = (_FP_FMA_ZD_f1) - (_FP_FMA_TD_f1) - (__x > 
(_FP_FMA_ZD_f0)); (_FP_FMA_RD_f0) = __x; } while (0); } } } else { R_e = C_e; 
R_s = C_s; ((_FP_FMA_ZD_f0 = C_f), (_FP_FMA_ZD_f1 = 0)); (void) ((((3 + 24)) < 
32) ? ({ if (__builtin_constant_p ((3 + 24)) && ((3 + 24)) == 1) { 
_FP_FMA_ZD_f1 = _FP_FMA_ZD_f1 + _FP_FMA_ZD_f1 + (((signed long) 
(_FP_FMA_ZD_f0)) < 0); _FP_FMA_ZD_f0 += _FP_FMA_ZD_f0; } else { _FP_FMA_ZD_f1 = 
_FP_FMA_ZD_f1 << ((3 + 24)) | _FP_FMA_ZD_f0 >> (32 - ((3 + 24))); _FP_FMA_ZD_f0 
<<= ((3 + 24)); } 0; }) : ({ _FP_FMA_ZD_f1 = _FP_FMA_ZD_f0 << (((3 + 24)) - 
32); _FP_FMA_ZD_f0 = 0; })); int _FP_FMA_shift = -_FP_FMA_ediff - _FP_FMA_tsh; 
if (_FP_FMA_shift >= (2 * (3 + 24))) (_FP_FMA_TD_f0 = 1, _FP_FMA_TD_f1 = 0); 
else if (_FP_FMA_shift > 0) (void) (((_FP_FMA_shift) < 32) ? ({ _FP_FMA_TD_f0 = 
(_FP_FMA_TD_f1 << (32 - (_FP_FMA_shift)) | _FP_FMA_TD_f0 >> (_FP_FMA_shift) | 
(__builtin_constant_p (_FP_FMA_shift) && (_FP_FMA_shift) == 1 ? _FP_FMA_TD_f0 & 
1 : (_FP_FMA_TD_f0 << (32 - (_FP_FMA_shift))) != 0)); _FP_FMA_TD_f1 >>= 
(_FP_FMA_shift); }) : ({ _FP_FMA_TD_f0 = (_FP_FMA_TD_f1 >> ((_FP_FMA_shift) - 
32) | ((((_FP_FMA_shift) == 32 ? 0 : (_FP_FMA_TD_f1 << (2*32 - 
(_FP_FMA_shift)))) | _FP_FMA_TD_f0) != 0)); _FP_FMA_TD_f1 = 0; })); if (C_s == 
_FP_FMA_T_s) do { unsigned long __x; __x = (_FP_FMA_ZD_f0) + (_FP_FMA_TD_f0); 
(_FP_FMA_RD_f1) = (_FP_FMA_ZD_f1) + (_FP_FMA_TD_f1) + (__x < (_FP_FMA_ZD_f0)); 
(_FP_FMA_RD_f0) = __x; } while (0); else do { unsigned long __x; __x = 
(_FP_FMA_ZD_f0) - (_FP_FMA_TD_f0); (_FP_FMA_RD_f1) = (_FP_FMA_ZD_f1) - 
(_FP_FMA_TD_f1) - (__x > (_FP_FMA_ZD_f0)); (_FP_FMA_RD_f0) = __x; } while (0); 
} if (((_FP_FMA_RD_f1 | _FP_FMA_RD_f0) == 0)) { if (_FP_FMA_T_s == C_s) R_s = 
C_s; else R_s = (0 == 3); (R_f = 0); R_c = 1; } else { int _FP_FMA_rlz; do { if 
(_FP_FMA_RD_f1) do { _Static_assert (((sizeof (unsigned long) == sizeof 
(unsigned int) || (sizeof (unsigned long) == sizeof (unsigned long)) || (sizeof 
(unsigned long) == sizeof (unsigned long long)))), "_FP_W_TYPE size unsupported 
for clz"); if (sizeof (unsigned long) == sizeof (unsigned int)) ((_FP_FMA_rlz)) 
= __builtin_clz (_FP_FMA_RD_f1); else if (sizeof (unsigned long) == sizeof 
(unsigned long)) ((_FP_FMA_rlz)) = __builtin_clzl (_FP_FMA_RD_f1); else 
((_FP_FMA_rlz)) = __builtin_clzll (_FP_FMA_RD_f1); } while (0); else { do { 
_Static_assert (((sizeof (unsigned long) == sizeof (unsigned int) || (sizeof 
(unsigned long) == sizeof (unsigned long)) || (sizeof (unsigned long) == sizeof 
(unsigned long long)))), "_FP_W_TYPE size unsupported for clz"); if (sizeof 
(unsigned long) == sizeof (unsigned int)) ((_FP_FMA_rlz)) = __builtin_clz 
(_FP_FMA_RD_f0); else if (sizeof (unsigned long) == sizeof (unsigned long)) 
((_FP_FMA_rlz)) = __builtin_clzl (_FP_FMA_RD_f0); else ((_FP_FMA_rlz)) = 
__builtin_clzll (_FP_FMA_RD_f0); } while (0); (_FP_FMA_rlz) += 32; } } while 
(0); _FP_FMA_rlz -= ((2 * 32) - (2 * (3 + 24))); R_e -= _FP_FMA_rlz; int 
_FP_FMA_shift = (3 + 24) - _FP_FMA_rlz; if (_FP_FMA_shift > 0) (void) 
(((_FP_FMA_shift) < 32) ? ({ _FP_FMA_RD_f0 = (_FP_FMA_RD_f1 << (32 - 
(_FP_FMA_shift)) | _FP_FMA_RD_f0 >> (_FP_FMA_shift) | (__builtin_constant_p 
(_FP_FMA_shift) && (_FP_FMA_shift) == 1 ? _FP_FMA_RD_f0 & 1 : (_FP_FMA_RD_f0 << 
(32 - (_FP_FMA_shift))) != 0)); _FP_FMA_RD_f1 >>= (_FP_FMA_shift); }) : ({ 
_FP_FMA_RD_f0 = (_FP_FMA_RD_f1 >> ((_FP_FMA_shift) - 32) | ((((_FP_FMA_shift) 
== 32 ? 0 : (_FP_FMA_RD_f1 << (2*32 - (_FP_FMA_shift)))) | _FP_FMA_RD_f0) != 
0)); _FP_FMA_RD_f1 = 0; })); else if (_FP_FMA_shift < 0) (void) 
(((-_FP_FMA_shift) < 32) ? ({ if (__builtin_constant_p (-_FP_FMA_shift) && 
(-_FP_FMA_shift) == 1) { _FP_FMA_RD_f1 = _FP_FMA_RD_f1 + _FP_FMA_RD_f1 + 
(((signed long) (_FP_FMA_RD_f0)) < 0); _FP_FMA_RD_f0 += _FP_FMA_RD_f0; } else { 
_FP_FMA_RD_f1 = _FP_FMA_RD_f1 << (-_FP_FMA_shift) | _FP_FMA_RD_f0 >> (32 - 
(-_FP_FMA_shift)); _FP_FMA_RD_f0 <<= (-_FP_FMA_shift); } 0; }) : ({ 
_FP_FMA_RD_f1 = _FP_FMA_RD_f0 << ((-_FP_FMA_shift) - 32); _FP_FMA_RD_f0 = 0; 
})); (R_f = _FP_FMA_RD_f0); R_c = 0; } break; } goto done_fma; case (((3) << 2) 
| (3)): do { if (((A_f) & ((unsigned long) 1 << (24 -2))) && !((B_f) & 
((unsigned long) 1 << (24 -2)))) { _FP_FMA_T_s = B_s; (_FP_FMA_T_f = B_f); } 
else { _FP_FMA_T_s = A_s; (_FP_FMA_T_f = A_f); } _FP_FMA_T_c = 3; } while (0); 
break; case (((3) << 2) | (0)): case (((3) << 2) | (2)): case (((3) << 2) | 
(1)): _FP_FMA_T_s = A_s; case (((2) << 2) | (2)): case (((2) << 2) | (0)): case 
(((1) << 2) | (0)): case (((1) << 2) | (1)): (_FP_FMA_T_f = A_f); _FP_FMA_T_c = 
A_c; break; case (((0) << 2) | (3)): case (((2) << 2) | (3)): case (((1) << 2) 
| (3)): _FP_FMA_T_s = B_s; case (((0) << 2) | (2)): case (((0) << 2) | (1)): 
(_FP_FMA_T_f = B_f); _FP_FMA_T_c = B_c; break; case (((2) << 2) | (1)): case 
(((1) << 2) | (2)): _FP_FMA_T_s = 0; _FP_FMA_T_c = 3; (_FP_FMA_T_f = 
((((unsigned long) 1 << (24 -2)) << 1) - 1)); _fex |= (0 | 0); break; default: 
__builtin_unreachable (); } switch ((((_FP_FMA_T_c) << 2) | (C_c))) { case 
(((3) << 2) | (3)): do { if (((_FP_FMA_T_f) & ((unsigned long) 1 << (24 -2))) 
&& !((C_f) & ((unsigned long) 1 << (24 -2)))) { R_s = C_s; (R_f = C_f); } else 
{ R_s = _FP_FMA_T_s; (R_f = _FP_FMA_T_f); } R_c = 3; } while (0); break; case 
(((3) << 2) | (0)): case (((3) << 2) | (2)): case (((3) << 2) | (1)): case 
(((2) << 2) | (0)): case (((2) << 2) | (1)): R_s = _FP_FMA_T_s; (R_f = 
_FP_FMA_T_f); R_c = _FP_FMA_T_c; break; case (((2) << 2) | (3)): case (((1) << 
2) | (3)): case (((1) << 2) | (0)): case (((1) << 2) | (2)): R_s = C_s; (R_f = 
C_f); R_c = C_c; R_e = C_e; break; case (((2) << 2) | (2)): if (_FP_FMA_T_s == 
C_s) { R_s = C_s; (R_f = C_f); R_c = C_c; } else { R_s = 0; R_c = 3; (R_f = 
((((unsigned long) 1 << (24 -2)) << 1) - 1)); _fex |= (0 | 0); } break; case 
(((1) << 2) | (1)): if (_FP_FMA_T_s == C_s) R_s = C_s; else R_s = (0 == 3); 
(R_f = C_f); R_c = C_c; break; default: __builtin_unreachable (); } done_fma: ; 
} while (0);
  do { do { switch (R_c) { case 0: R_e += 127; if (R_e > 0) { do { if ((R_f) & 
7) { _fex |= (0); switch (0) { case 0: do { if (((R_f) & 15) != ((unsigned 
long) 1 << 2)) (R_f += ((unsigned long) 1 << 2)); } while (0); break; case 1: 
(void) 0; break; case 2: do { if (!R_s && ((R_f) & 7)) (R_f += ((unsigned long) 
1 << 3)); } while (0); break; case 3: do { if (R_s && ((R_f) & 7)) (R_f += 
((unsigned long) 1 << 3)); } while (0); break; } } } while (0); if ((R_f & 
((unsigned long) 1 << ((3 + 24))))) { (R_f &= ~((unsigned long) 1 << ((3 + 
24)))); R_e++; } (R_f >>= 3); if (R_e >= 255) { switch (0) { case 0: R_c = 2; 
break; case 2: if (!R_s) R_c = 2; break; case 3: if (R_s) R_c = 2; break; } if 
(R_c == 2) { R_e = 255; (R_f = 0); } else { R_e = 255 - 1; (R_f = (~(signed 
long) 0)); } _fex |= (0); _fex |= (0); } } else { int 
_FP_PACK_CANONICAL_is_tiny = 1; if (0 && R_e == 0) { long 
_FP_PACK_CANONICAL_T_c __attribute__ ((unused)) ; long _FP_PACK_CANONICAL_T_s 
__attribute__ ((unused)) ; long _FP_PACK_CANONICAL_T_e __attribute__ ((unused)) 
; unsigned long _FP_PACK_CANONICAL_T_f ; (_FP_PACK_CANONICAL_T_f = R_f); 
_FP_PACK_CANONICAL_T_s = R_s; _FP_PACK_CANONICAL_T_e = R_e; do { if 
((_FP_PACK_CANONICAL_T_f) & 7) { _fex |= (0); switch (0) { case 0: do { if 
(((_FP_PACK_CANONICAL_T_f) & 15) != ((unsigned long) 1 << 2)) 
(_FP_PACK_CANONICAL_T_f += ((unsigned long) 1 << 2)); } while (0); break; case 
1: (void) 0; break; case 2: do { if (!_FP_PACK_CANONICAL_T_s && 
((_FP_PACK_CANONICAL_T_f) & 7)) (_FP_PACK_CANONICAL_T_f += ((unsigned long) 1 
<< 3)); } while (0); break; case 3: do { if (_FP_PACK_CANONICAL_T_s && 
((_FP_PACK_CANONICAL_T_f) & 7)) (_FP_PACK_CANONICAL_T_f += ((unsigned long) 1 
<< 3)); } while (0); break; } } } while (0); if ((_FP_PACK_CANONICAL_T_f & 
((unsigned long) 1 << ((3 + 24))))) _FP_PACK_CANONICAL_is_tiny = 0; } R_e = 
-R_e + 1; if (R_e <= (3 + 24)) { (R_f = (R_f >> ((R_e)) | (__builtin_constant_p 
((R_e)) && ((R_e)) == 1 ? R_f & 1 : (R_f << (32 - ((R_e)))) != 0))); do { if 
((R_f) & 7) { _fex |= (0); switch (0) { case 0: do { if (((R_f) & 15) != 
((unsigned long) 1 << 2)) (R_f += ((unsigned long) 1 << 2)); } while (0); 
break; case 1: (void) 0; break; case 2: do { if (!R_s && ((R_f) & 7)) (R_f += 
((unsigned long) 1 << 3)); } while (0); break; case 3: do { if (R_s && ((R_f) & 
7)) (R_f += ((unsigned long) 1 << 3)); } while (0); break; } } } while (0); if 
((R_f) & (((unsigned long) 1 << ((3 + 24))) >> 1)) { R_e = 1; (R_f = 0); _fex 
|= (0); } else { R_e = 0; (R_f >>= 3); } if (_FP_PACK_CANONICAL_is_tiny && 
(((_fex) & 0) || (0 & 0))) _fex |= (0); } else { R_e = 0; if (!(R_f == 0)) { 
(R_f = 1); do { if ((R_f) & 7) { _fex |= (0); switch (0) { case 0: do { if 
(((R_f) & 15) != ((unsigned long) 1 << 2)) (R_f += ((unsigned long) 1 << 2)); } 
while (0); break; case 1: (void) 0; break; case 2: do { if (!R_s && ((R_f) & 
7)) (R_f += ((unsigned long) 1 << 3)); } while (0); break; case 3: do { if (R_s 
&& ((R_f) & 7)) (R_f += ((unsigned long) 1 << 3)); } while (0); break; } } } 
while (0); (R_f) >>= (3); } _fex |= (0); } } break; case 1: R_e = 0; (R_f = 0); 
break; case 2: R_e = 255; (R_f = 0); break; case 3: R_e = 255; if (!1) { (R_f = 
((((unsigned long) 1 << (24 -2)) << 1) - 1)); R_s = 0; } else do { if (0) { 
(R_f) &= ((unsigned long) 1 << (24 -2)) - 1; if ((R_f == 0)) { R_s = 0; (R_f = 
((((unsigned long) 1 << (24 -2)) << 1) - 1)); } } else (R_f) |= ((unsigned 
long) 1 << (24 -2)); } while (0); break; } } while (0); do { union _FP_UNION_S 
_FP_PACK_RAW_1_flo; _FP_PACK_RAW_1_flo.bits.frac = R_f; 
_FP_PACK_RAW_1_flo.bits.exp = R_e; _FP_PACK_RAW_1_flo.bits.sign = R_s; ((r)) = 
_FP_PACK_RAW_1_flo.flt; } while (0); } while (0);
  do {} while (0);

  return r;
}

# 65 "../sysdeps/ieee754/soft-fp/s_fmaf.c"
#pragma GCC diagnostic pop
# 65 "../sysdeps/ieee754/soft-fp/s_fmaf.c"
;


extern __typeof (__fmaf) fmaf __attribute__ ((weak, alias ("__fmaf"))) 
__attribute__ ((__copy__ (__fmaf)));; extern __typeof (__fmaf) fmaf32 
__attribute__ ((weak, alias ("__fmaf"))) __attribute__ ((__copy__ (__fmaf)));

Reply via email to