[ARM] Fix test armv8_2-fp16-move-1.c
[official-gcc.git] / gcc / testsuite / gcc.target / arm / pr59896.c
blobf431192e3c21abe6322e1494828b96a59e7ed899
1 /* { dg-do compile } */
2 /* { dg-skip-if "incompatible options" { ! { arm_thumb1_ok || arm_thumb2_ok } } } */
3 /* { dg-options "-mthumb -O2" } */
5 typedef unsigned int size_t;
6 typedef unsigned int wchar_t;
7 typedef int ptrdiff_t;
8 typedef signed char __int8_t ;
9 typedef unsigned char __uint8_t ;
10 typedef signed short __int16_t;
11 typedef unsigned short __uint16_t;
12 typedef __int16_t __int_least16_t;
13 typedef __uint16_t __uint_least16_t;
14 typedef signed int __int32_t;
15 typedef unsigned int __uint32_t;
16 typedef __int32_t __int_least32_t;
17 typedef __uint32_t __uint_least32_t;
18 typedef signed long long __int64_t;
19 typedef unsigned long long __uint64_t;
20 typedef int _LOCK_T;
21 typedef int _LOCK_RECURSIVE_T;
22 typedef long _off_t;
23 typedef short __dev_t;
24 typedef unsigned short __uid_t;
25 typedef unsigned short __gid_t;
26 __extension__ typedef long long _off64_t;
27 typedef long _fpos_t;
28 typedef signed int _ssize_t;
29 typedef unsigned int wint_t;
30 typedef struct
32 int __count;
33 union
35 wint_t __wch;
36 unsigned char __wchb[4];
37 } __value;
38 } _mbstate_t;
39 typedef _LOCK_RECURSIVE_T _flock_t;
40 typedef void *_iconv_t;
41 typedef unsigned long __ULong;
42 struct _reent;
43 struct _Bigint
45 struct _Bigint *_next;
46 int _k, _maxwds, _sign, _wds;
47 __ULong _x[1];
49 struct __tm
51 int __tm_sec;
52 int __tm_min;
53 int __tm_hour;
54 int __tm_mday;
55 int __tm_mon;
56 int __tm_year;
57 int __tm_wday;
58 int __tm_yday;
59 int __tm_isdst;
61 struct _on_exit_args {
62 void * _fnargs[32];
63 void * _dso_handle[32];
64 __ULong _fntypes;
65 __ULong _is_cxa;
67 struct _atexit {
68 struct _atexit *_next;
69 int _ind;
70 void (*_fns[32])(void);
71 struct _on_exit_args _on_exit_args;
73 struct __sbuf {
74 unsigned char *_base;
75 int _size;
77 struct __sFILE {
78 unsigned char *_p;
79 int _r;
80 int _w;
81 short _flags;
82 short _file;
83 struct __sbuf _bf;
84 int _lbfsize;
85 void * _cookie;
86 int (* _read) (struct _reent *, void *, char *, int)
88 int (* _write) (struct _reent *, void *, const char *, int)
90 _fpos_t (* _seek) (struct _reent *, void *, _fpos_t, int);
91 int (* _close) (struct _reent *, void *);
92 struct __sbuf _ub;
93 unsigned char *_up;
94 int _ur;
95 unsigned char _ubuf[3];
96 unsigned char _nbuf[1];
97 struct __sbuf _lb;
98 int _blksize;
99 _off_t _offset;
100 struct _reent *_data;
101 _flock_t _lock;
102 _mbstate_t _mbstate;
103 int _flags2;
105 typedef struct __sFILE __FILE;
106 struct _glue
108 struct _glue *_next;
109 int _niobs;
110 __FILE *_iobs;
112 struct _rand48 {
113 unsigned short _seed[3];
114 unsigned short _mult[3];
115 unsigned short _add;
117 struct _reent
119 int _errno;
120 __FILE *_stdin, *_stdout, *_stderr;
121 int _inc;
122 char _emergency[25];
123 int _current_category;
124 const char *_current_locale;
125 int __sdidinit;
126 void (* __cleanup) (struct _reent *);
127 struct _Bigint *_result;
128 int _result_k;
129 struct _Bigint *_p5s;
130 struct _Bigint **_freelist;
131 int _cvtlen;
132 char *_cvtbuf;
133 union
135 struct
137 unsigned int _unused_rand;
138 char * _strtok_last;
139 char _asctime_buf[26];
140 struct __tm _localtime_buf;
141 int _gamma_signgam;
142 __extension__ unsigned long long _rand_next;
143 struct _rand48 _r48;
144 _mbstate_t _mblen_state;
145 _mbstate_t _mbtowc_state;
146 _mbstate_t _wctomb_state;
147 char _l64a_buf[8];
148 char _signal_buf[24];
149 int _getdate_err;
150 _mbstate_t _mbrlen_state;
151 _mbstate_t _mbrtowc_state;
152 _mbstate_t _mbsrtowcs_state;
153 _mbstate_t _wcrtomb_state;
154 _mbstate_t _wcsrtombs_state;
155 int _h_errno;
156 } _reent;
157 struct
159 unsigned char * _nextf[30];
160 unsigned int _nmalloc[30];
161 } _unused;
162 } _new;
163 struct _atexit *_atexit;
164 struct _atexit _atexit0;
165 void (**(_sig_func))(int);
166 struct _glue __sglue;
167 __FILE __sf[3];
169 extern struct _reent *_impure_ptr ;
170 extern struct _reent *const _global_impure_ptr ;
171 void _reclaim_reent (struct _reent *);
172 typedef struct
174 int quot;
175 int rem;
176 } div_t;
177 typedef struct
179 long quot;
180 long rem;
181 } ldiv_t;
182 typedef struct
184 long long int quot;
185 long long int rem;
186 } lldiv_t;
187 typedef int (*__compar_fn_t) (const void *, const void *);
188 int __locale_mb_cur_max (void);
189 void abort (void) __attribute__ ((noreturn));
190 int abs (int);
191 int atexit (void (*__func)(void));
192 double atof (const char *__nptr);
193 float atoff (const char *__nptr);
194 int atoi (const char *__nptr);
195 int _atoi_r (struct _reent *, const char *__nptr);
196 long atol (const char *__nptr);
197 long _atol_r (struct _reent *, const char *__nptr);
198 void * bsearch (const void * __key, const void * __base, size_t __nmemb, size_t __size, __compar_fn_t _compar)
200 void * calloc (size_t __nmemb, size_t __size) ;
201 div_t div (int __numer, int __denom);
202 void exit (int __status) __attribute__ ((noreturn));
203 void free (void *) ;
204 char * getenv (const char *__string);
205 char * _getenv_r (struct _reent *, const char *__string);
206 char * _findenv (const char *, int *);
207 char * _findenv_r (struct _reent *, const char *, int *);
208 extern char *suboptarg;
209 int getsubopt (char **, char * const *, char **);
210 long labs (long);
211 ldiv_t ldiv (long __numer, long __denom);
212 void * malloc (size_t __size) ;
213 int mblen (const char *, size_t);
214 int _mblen_r (struct _reent *, const char *, size_t, _mbstate_t *);
215 int mbtowc (wchar_t *, const char *, size_t);
216 int _mbtowc_r (struct _reent *, wchar_t *, const char *, size_t, _mbstate_t *);
217 int wctomb (char *, wchar_t);
218 int _wctomb_r (struct _reent *, char *, wchar_t, _mbstate_t *);
219 size_t mbstowcs (wchar_t *, const char *, size_t);
220 size_t _mbstowcs_r (struct _reent *, wchar_t *, const char *, size_t, _mbstate_t *);
221 size_t wcstombs (char *, const wchar_t *, size_t);
222 size_t _wcstombs_r (struct _reent *, char *, const wchar_t *, size_t, _mbstate_t *);
223 char * mkdtemp (char *);
224 int mkostemp (char *, int);
225 int mkostemps (char *, int, int);
226 int mkstemp (char *);
227 int mkstemps (char *, int);
228 char * mktemp (char *) __attribute__ ((__warning__ ("the use of `mktemp' is dangerous; use `mkstemp' instead")));
229 char * _mkdtemp_r (struct _reent *, char *);
230 int _mkostemp_r (struct _reent *, char *, int);
231 int _mkostemps_r (struct _reent *, char *, int, int);
232 int _mkstemp_r (struct _reent *, char *);
233 int _mkstemps_r (struct _reent *, char *, int);
234 char * _mktemp_r (struct _reent *, char *) __attribute__ ((__warning__ ("the use of `mktemp' is dangerous; use `mkstemp' instead")));
235 void qsort (void * __base, size_t __nmemb, size_t __size, __compar_fn_t _compar);
236 int rand (void);
237 void * realloc (void * __r, size_t __size) ;
238 void * reallocf (void * __r, size_t __size);
239 void srand (unsigned __seed);
240 double strtod (const char *__n, char **__end_PTR);
241 double _strtod_r (struct _reent *,const char *__n, char **__end_PTR);
242 float strtof (const char *__n, char **__end_PTR);
243 long strtol (const char *__n, char **__end_PTR, int __base);
244 long _strtol_r (struct _reent *,const char *__n, char **__end_PTR, int __base);
245 unsigned long strtoul (const char *__n, char **__end_PTR, int __base);
246 unsigned long _strtoul_r (struct _reent *,const char *__n, char **__end_PTR, int __base);
247 int system (const char *__string);
248 long a64l (const char *__input);
249 char * l64a (long __input);
250 char * _l64a_r (struct _reent *,long __input);
251 int on_exit (void (*__func)(int, void *),void * __arg);
252 void _Exit (int __status) __attribute__ ((noreturn));
253 int putenv (char *__string);
254 int _putenv_r (struct _reent *, char *__string);
255 void * _reallocf_r (struct _reent *, void *, size_t);
256 int setenv (const char *__string, const char *__value, int __overwrite);
257 int _setenv_r (struct _reent *, const char *__string, const char *__value, int __overwrite);
258 char * gcvt (double,int,char *);
259 char * gcvtf (float,int,char *);
260 char * fcvt (double,int,int *,int *);
261 char * fcvtf (float,int,int *,int *);
262 char * ecvt (double,int,int *,int *);
263 char * ecvtbuf (double, int, int*, int*, char *);
264 char * fcvtbuf (double, int, int*, int*, char *);
265 char * ecvtf (float,int,int *,int *);
266 char * dtoa (double, int, int, int *, int*, char**);
267 int rand_r (unsigned *__seed);
268 double drand48 (void);
269 double _drand48_r (struct _reent *);
270 double erand48 (unsigned short [3]);
271 double _erand48_r (struct _reent *, unsigned short [3]);
272 long jrand48 (unsigned short [3]);
273 long _jrand48_r (struct _reent *, unsigned short [3]);
274 void lcong48 (unsigned short [7]);
275 void _lcong48_r (struct _reent *, unsigned short [7]);
276 long lrand48 (void);
277 long _lrand48_r (struct _reent *);
278 long mrand48 (void);
279 long _mrand48_r (struct _reent *);
280 long nrand48 (unsigned short [3]);
281 long _nrand48_r (struct _reent *, unsigned short [3]);
282 unsigned short *
283 seed48 (unsigned short [3]);
284 unsigned short *
285 _seed48_r (struct _reent *, unsigned short [3]);
286 void srand48 (long);
287 void _srand48_r (struct _reent *, long);
288 long long atoll (const char *__nptr);
289 long long _atoll_r (struct _reent *, const char *__nptr);
290 long long llabs (long long);
291 lldiv_t lldiv (long long __numer, long long __denom);
292 long long strtoll (const char *__n, char **__end_PTR, int __base);
293 long long _strtoll_r (struct _reent *, const char *__n, char **__end_PTR, int __base);
294 unsigned long long strtoull (const char *__n, char **__end_PTR, int __base);
295 unsigned long long _strtoull_r (struct _reent *, const char *__n, char **__end_PTR, int __base);
296 void cfree (void *);
297 int unsetenv (const char *__string);
298 int _unsetenv_r (struct _reent *, const char *__string);
299 char * _dtoa_r (struct _reent *, double, int, int, int *, int*, char**);
300 void * _malloc_r (struct _reent *, size_t) ;
301 void * _calloc_r (struct _reent *, size_t, size_t) ;
302 void _free_r (struct _reent *, void *) ;
303 void * _realloc_r (struct _reent *, void *, size_t) ;
304 void _mstats_r (struct _reent *, char *);
305 int _system_r (struct _reent *, const char *);
306 void __eprintf (const char *, const char *, unsigned int, const char *);
307 extern long double strtold (const char *, char **);
308 extern long double wcstold (const wchar_t *, wchar_t **);
309 typedef long int __off_t;
310 typedef int __pid_t;
311 __extension__ typedef long long int __loff_t;
312 struct stat;
313 struct tms;
314 struct timeval;
315 struct timezone;
316 extern int _close_r (struct _reent *, int);
317 extern int _execve_r (struct _reent *, const char *, char *const *, char *const *);
318 extern int _fcntl_r (struct _reent *, int, int, int);
319 extern int _fork_r (struct _reent *);
320 extern int _fstat_r (struct _reent *, int, struct stat *);
321 extern int _getpid_r (struct _reent *);
322 extern int _isatty_r (struct _reent *, int);
323 extern int _kill_r (struct _reent *, int, int);
324 extern int _link_r (struct _reent *, const char *, const char *);
325 extern _off_t _lseek_r (struct _reent *, int, _off_t, int);
326 extern int _mkdir_r (struct _reent *, const char *, int);
327 extern int _open_r (struct _reent *, const char *, int, int);
328 extern _ssize_t _read_r (struct _reent *, int, void *, size_t);
329 extern int _rename_r (struct _reent *, const char *, const char *);
330 extern void *_sbrk_r (struct _reent *, ptrdiff_t);
331 extern int _stat_r (struct _reent *, const char *, struct stat *);
332 extern unsigned long _times_r (struct _reent *, struct tms *);
333 extern int _unlink_r (struct _reent *, const char *);
334 extern int _wait_r (struct _reent *, int *);
335 extern _ssize_t _write_r (struct _reent *, int, const void *, size_t);
336 extern int _gettimeofday_r (struct _reent *, struct timeval *__tp, void *__tzp);
337 typedef signed char int8_t ;
338 typedef unsigned char uint8_t ;
339 typedef signed char int_least8_t;
340 typedef unsigned char uint_least8_t;
341 typedef signed short int16_t;
342 typedef unsigned short uint16_t;
343 typedef int16_t int_least16_t;
344 typedef uint16_t uint_least16_t;
345 typedef signed long int32_t;
346 typedef unsigned long uint32_t;
347 typedef int32_t int_least32_t;
348 typedef uint32_t uint_least32_t;
349 typedef signed long long int64_t;
350 typedef unsigned long long uint64_t;
351 typedef int64_t int_least64_t;
352 typedef uint64_t uint_least64_t;
353 typedef signed int int_fast8_t;
354 typedef unsigned int uint_fast8_t;
355 typedef signed int int_fast16_t;
356 typedef unsigned int uint_fast16_t;
357 typedef signed int int_fast32_t;
358 typedef unsigned int uint_fast32_t;
359 typedef int_least64_t int_fast64_t;
360 typedef uint_least64_t uint_fast64_t;
361 typedef long long int intmax_t;
362 typedef long long unsigned int uintmax_t;
363 typedef signed int intptr_t;
364 typedef unsigned int uintptr_t;
365 void * memchr (const void *, int, size_t);
366 int memcmp (const void *, const void *, size_t);
367 void * memcpy (void * , const void * , size_t);
368 void * memmove (void *, const void *, size_t);
369 void * memset (void *, int, size_t);
370 char *strcat (char *, const char *);
371 char *strchr (const char *, int);
372 int strcmp (const char *, const char *);
373 int strcoll (const char *, const char *);
374 char *strcpy (char *, const char *);
375 size_t strcspn (const char *, const char *);
376 char *strerror (int);
377 size_t strlen (const char *);
378 char *strncat (char *, const char *, size_t);
379 int strncmp (const char *, const char *, size_t);
380 char *strncpy (char *, const char *, size_t);
381 char *strpbrk (const char *, const char *);
382 char *strrchr (const char *, int);
383 size_t strspn (const char *, const char *);
384 char *strstr (const char *, const char *);
385 char *strtok (char *, const char *);
386 size_t strxfrm (char *, const char *, size_t);
387 char *strtok_r (char *, const char *, char **);
388 int bcmp (const void *, const void *, size_t);
389 void bcopy (const void *, void *, size_t);
390 void bzero (void *, size_t);
391 int ffs (int);
392 char *index (const char *, int);
393 void * memccpy (void * , const void * , int, size_t);
394 void * mempcpy (void *, const void *, size_t);
395 void * memmem (const void *, size_t, const void *, size_t);
396 void * memrchr (const void *, int, size_t);
397 void * rawmemchr (const void *, int);
398 char *rindex (const char *, int);
399 char *stpcpy (char *, const char *);
400 char *stpncpy (char *, const char *, size_t);
401 int strcasecmp (const char *, const char *);
402 char *strcasestr (const char *, const char *);
403 char *strchrnul (const char *, int);
404 char *strdup (const char *);
405 char *_strdup_r (struct _reent *, const char *);
406 char *strndup (const char *, size_t);
407 char *_strndup_r (struct _reent *, const char *, size_t);
408 int strerror_r (int, char *, size_t) __asm__ ("" "__xpg_strerror_r");
409 size_t strlcat (char *, const char *, size_t);
410 size_t strlcpy (char *, const char *, size_t);
411 int strncasecmp (const char *, const char *, size_t);
412 size_t strnlen (const char *, size_t);
413 char *strsep (char **, const char *);
414 char *strlwr (char *);
415 char *strupr (char *);
416 char *strsignal (int __signo);
417 char * _strerror_r (struct _reent *, int, int, int *);
418 typedef union
420 double value;
421 struct
423 unsigned int fraction1:32;
424 unsigned int fraction0:20;
425 unsigned int exponent :11;
426 unsigned int sign : 1;
427 } number;
428 struct
430 unsigned int function1:32;
431 unsigned int function0:19;
432 unsigned int quiet:1;
433 unsigned int exponent: 11;
434 unsigned int sign : 1;
435 } nan;
436 struct
438 unsigned long lsw;
439 unsigned long msw;
440 } parts;
441 long aslong[2];
442 } __ieee_double_shape_type;
443 typedef union
445 float value;
446 struct
448 unsigned int fraction0: 7;
449 unsigned int fraction1: 16;
450 unsigned int exponent: 8;
451 unsigned int sign : 1;
452 } number;
453 struct
455 unsigned int function1:16;
456 unsigned int function0:6;
457 unsigned int quiet:1;
458 unsigned int exponent:8;
459 unsigned int sign:1;
460 } nan;
461 long p1;
462 } __ieee_float_shape_type;
463 typedef int fp_rnd;
464 fp_rnd fpgetround (void);
465 fp_rnd fpsetround (fp_rnd);
466 typedef int fp_except;
467 fp_except fpgetmask (void);
468 fp_except fpsetmask (fp_except);
469 fp_except fpgetsticky (void);
470 fp_except fpsetsticky (fp_except);
471 typedef int fp_rdi;
472 fp_rdi fpgetroundtoi (void);
473 fp_rdi fpsetroundtoi (fp_rdi);
474 int isnan (double);
475 int isinf (double);
476 int finite (double);
477 int isnanf (float);
478 int isinff (float);
479 int finitef (float);
480 union __dmath
482 double d;
483 __ULong i[2];
485 union __fmath
487 float f;
488 __ULong i[1];
490 union __ldmath
492 long double ld;
493 __ULong i[4];
495 extern double atan (double);
496 extern double cos (double);
497 extern double sin (double);
498 extern double tan (double);
499 extern double tanh (double);
500 extern double frexp (double, int *);
501 extern double modf (double, double *);
502 extern double ceil (double);
503 extern double fabs (double);
504 extern double floor (double);
505 extern double acos (double);
506 extern double asin (double);
507 extern double atan2 (double, double);
508 extern double cosh (double);
509 extern double sinh (double);
510 extern double exp (double);
511 extern double ldexp (double, int);
512 extern double log (double);
513 extern double log10 (double);
514 extern double pow (double, double);
515 extern double sqrt (double);
516 extern double fmod (double, double);
517 typedef float float_t;
518 typedef double double_t;
519 extern int __isinff (float x);
520 extern int __isinfd (double x);
521 extern int __isnanf (float x);
522 extern int __isnand (double x);
523 extern int __fpclassifyf (float x);
524 extern int __fpclassifyd (double x);
525 extern int __signbitf (float x);
526 extern int __signbitd (double x);
527 extern double infinity (void);
528 extern double nan (const char *);
529 extern int finite (double);
530 extern double copysign (double, double);
531 extern double logb (double);
532 extern int ilogb (double);
533 extern double asinh (double);
534 extern double cbrt (double);
535 extern double nextafter (double, double);
536 extern double rint (double);
537 extern double scalbn (double, int);
538 extern double exp2 (double);
539 extern double scalbln (double, long int);
540 extern double tgamma (double);
541 extern double nearbyint (double);
542 extern long int lrint (double);
543 extern long long int llrint (double);
544 extern double round (double);
545 extern long int lround (double);
546 extern long long int llround (double);
547 extern double trunc (double);
548 extern double remquo (double, double, int *);
549 extern double fdim (double, double);
550 extern double fmax (double, double);
551 extern double fmin (double, double);
552 extern double fma (double, double, double);
553 extern double log1p (double);
554 extern double expm1 (double);
555 extern double acosh (double);
556 extern double atanh (double);
557 extern double remainder (double, double);
558 extern double gamma (double);
559 extern double lgamma (double);
560 extern double erf (double);
561 extern double erfc (double);
562 extern double log2 (double);
563 extern double hypot (double, double);
564 extern float atanf (float);
565 extern float cosf (float);
566 extern float sinf (float);
567 extern float tanf (float);
568 extern float tanhf (float);
569 extern float frexpf (float, int *);
570 extern float modff (float, float *);
571 extern float ceilf (float);
572 extern float fabsf (float);
573 extern float floorf (float);
574 extern float acosf (float);
575 extern float asinf (float);
576 extern float atan2f (float, float);
577 extern float coshf (float);
578 extern float sinhf (float);
579 extern float expf (float);
580 extern float ldexpf (float, int);
581 extern float logf (float);
582 extern float log10f (float);
583 extern float powf (float, float);
584 extern float sqrtf (float);
585 extern float fmodf (float, float);
586 extern float exp2f (float);
587 extern float scalblnf (float, long int);
588 extern float tgammaf (float);
589 extern float nearbyintf (float);
590 extern long int lrintf (float);
591 extern long long llrintf (float);
592 extern float roundf (float);
593 extern long int lroundf (float);
594 extern long long int llroundf (float);
595 extern float truncf (float);
596 extern float remquof (float, float, int *);
597 extern float fdimf (float, float);
598 extern float fmaxf (float, float);
599 extern float fminf (float, float);
600 extern float fmaf (float, float, float);
601 extern float infinityf (void);
602 extern float nanf (const char *);
603 extern int finitef (float);
604 extern float copysignf (float, float);
605 extern float logbf (float);
606 extern int ilogbf (float);
607 extern float asinhf (float);
608 extern float cbrtf (float);
609 extern float nextafterf (float, float);
610 extern float rintf (float);
611 extern float scalbnf (float, int);
612 extern float log1pf (float);
613 extern float expm1f (float);
614 extern float acoshf (float);
615 extern float atanhf (float);
616 extern float remainderf (float, float);
617 extern float gammaf (float);
618 extern float lgammaf (float);
619 extern float erff (float);
620 extern float erfcf (float);
621 extern float log2f (float);
622 extern float hypotf (float, float);
623 extern long double atanl (long double);
624 extern long double cosl (long double);
625 extern long double sinl (long double);
626 extern long double tanl (long double);
627 extern long double tanhl (long double);
628 extern long double frexpl (long double value, int *);
629 extern long double modfl (long double, long double *);
630 extern long double ceill (long double);
631 extern long double fabsl (long double);
632 extern long double floorl (long double);
633 extern long double log1pl (long double);
634 extern long double expm1l (long double);
635 extern long double acosl (long double);
636 extern long double asinl (long double);
637 extern long double atan2l (long double, long double);
638 extern long double coshl (long double);
639 extern long double sinhl (long double);
640 extern long double expl (long double);
641 extern long double ldexpl (long double, int);
642 extern long double logl (long double);
643 extern long double log10l (long double);
644 extern long double powl (long double, long double);
645 extern long double sqrtl (long double);
646 extern long double fmodl (long double, long double);
647 extern long double hypotl (long double, long double);
648 extern long double copysignl (long double, long double);
649 extern long double nanl (const char *);
650 extern int ilogbl (long double);
651 extern long double asinhl (long double);
652 extern long double cbrtl (long double);
653 extern long double nextafterl (long double, long double);
654 extern long double rintl (long double);
655 extern long double scalbnl (long double, int);
656 extern long double exp2l (long double);
657 extern long double scalblnl (long double, long);
658 extern long double tgammal (long double);
659 extern long double nearbyintl (long double);
660 extern long int lrintl (long double);
661 extern long long int llrintl (long double);
662 extern long double roundl (long double);
663 extern long lroundl (long double);
664 extern long long int llroundl (long double);
665 extern long double truncl (long double);
666 extern long double remquol (long double, long double, int *);
667 extern long double fdiml (long double, long double);
668 extern long double fmaxl (long double, long double);
669 extern long double fminl (long double, long double);
670 extern long double fmal (long double, long double, long double);
671 extern long double acoshl (long double);
672 extern long double atanhl (long double);
673 extern long double remainderl (long double, long double);
674 extern long double lgammal (long double);
675 extern long double erfl (long double);
676 extern long double erfcl (long double);
677 extern double drem (double, double);
678 extern void sincos (double, double *, double *);
679 extern double gamma_r (double, int *);
680 extern double lgamma_r (double, int *);
681 extern double y0 (double);
682 extern double y1 (double);
683 extern double yn (int, double);
684 extern double j0 (double);
685 extern double j1 (double);
686 extern double jn (int, double);
687 extern float dremf (float, float);
688 extern void sincosf (float, float *, float *);
689 extern float gammaf_r (float, int *);
690 extern float lgammaf_r (float, int *);
691 extern float y0f (float);
692 extern float y1f (float);
693 extern float ynf (int, float);
694 extern float j0f (float);
695 extern float j1f (float);
696 extern float jnf (int, float);
697 extern double exp10 (double);
698 extern double pow10 (double);
699 extern float exp10f (float);
700 extern float pow10f (float);
701 extern int *__signgam (void);
702 struct exception
704 int type;
705 char *name;
706 double arg1;
707 double arg2;
708 double retval;
709 int err;
711 extern int matherr (struct exception *e);
712 enum __fdlibm_version
714 __fdlibm_ieee = -1,
715 __fdlibm_svid,
716 __fdlibm_xopen,
717 __fdlibm_posix
719 extern enum __fdlibm_version __fdlib_version;
720 typedef int error_t;
721 extern int *__errno (void);
722 extern const char * const _sys_errlist[];
723 extern int _sys_nerr;
724 typedef unsigned char u_char;
725 typedef unsigned short u_short;
726 typedef unsigned int u_int;
727 typedef unsigned long u_long;
728 typedef unsigned short ushort;
729 typedef unsigned int uint;
730 typedef unsigned long ulong;
731 typedef unsigned long clock_t;
732 typedef long time_t;
733 struct timespec {
734 time_t tv_sec;
735 long tv_nsec;
737 struct itimerspec {
738 struct timespec it_interval;
739 struct timespec it_value;
741 typedef long daddr_t;
742 typedef char * caddr_t;
743 typedef unsigned short ino_t;
744 typedef _off_t off_t;
745 typedef __dev_t dev_t;
746 typedef __uid_t uid_t;
747 typedef __gid_t gid_t;
748 typedef int pid_t;
749 typedef long key_t;
750 typedef _ssize_t ssize_t;
751 typedef unsigned int mode_t __attribute__ ((__mode__ (__SI__)));
752 typedef unsigned short nlink_t;
753 typedef long fd_mask;
754 typedef struct _types_fd_set {
755 fd_mask fds_bits[(((64)+(((sizeof (fd_mask) * 8))-1))/((sizeof (fd_mask) * 8)))];
756 } _types_fd_set;
757 typedef unsigned long clockid_t;
758 typedef unsigned long timer_t;
759 typedef unsigned long useconds_t;
760 typedef long suseconds_t;
761 union double_union
763 double d;
764 __uint32_t i[2];
766 typedef __int32_t Long;
767 typedef union { double d; __ULong i[2]; } U;
768 typedef struct _Bigint _Bigint;
769 struct _reent ;
770 struct FPI;
771 double __ulp (double x);
772 double __b2d (_Bigint *a , int *e);
773 _Bigint * _Balloc (struct _reent *p, int k);
774 void _Bfree (struct _reent *p, _Bigint *v);
775 _Bigint * __multadd (struct _reent *p, _Bigint *, int, int);
776 _Bigint * __s2b (struct _reent *, const char*, int, int, __ULong);
777 _Bigint * __i2b (struct _reent *,int);
778 _Bigint * __multiply (struct _reent *, _Bigint *, _Bigint *);
779 _Bigint * __pow5mult (struct _reent *, _Bigint *, int k);
780 int __hi0bits (__ULong);
781 int __lo0bits (__ULong *);
782 _Bigint * __d2b (struct _reent *p, double d, int *e, int *bits);
783 _Bigint * __lshift (struct _reent *p, _Bigint *b, int k);
784 _Bigint * __mdiff (struct _reent *p, _Bigint *a, _Bigint *b);
785 int __mcmp (_Bigint *a, _Bigint *b);
786 int __gethex (struct _reent *p, const char **sp, const struct FPI *fpi, Long *exp, _Bigint **bp, int sign);
787 double __ratio (_Bigint *a, _Bigint *b);
788 __ULong __any_on (_Bigint *b, int k);
789 void __copybits (__ULong *c, int n, _Bigint *b);
790 int __hexnan (const char **sp, const struct FPI *fpi, __ULong *x0);
791 extern const double __mprec_tinytens[];
792 extern const double __mprec_bigtens[];
793 extern const double __mprec_tens[];
794 extern const unsigned char __hexdig[];
795 double _mprec_log10 (int);
796 static int
797 quorem(_Bigint * b , _Bigint * S)
799 int n;
800 long borrow, y;
801 __ULong carry, q, ys;
802 __ULong *bx, *bxe, *sx, *sxe;
803 long z;
804 __ULong si, zs;
805 n = S->_wds;
806 if (b->_wds < n)
807 return 0;
808 sx = S->_x;
809 sxe = sx + --n;
810 bx = b->_x;
811 bxe = bx + n;
812 q = *bxe / (*sxe + 1);
813 if (q)
815 borrow = 0;
816 carry = 0;
819 si = *sx++;
820 ys = (si & 0xffff) * q + carry;
821 zs = (si >> 16) * q + (ys >> 16);
822 carry = zs >> 16;
823 y = (*bx & 0xffff) - (ys & 0xffff) + borrow;
824 borrow = y >> 16;
826 z = (*bx >> 16) - (zs & 0xffff) + borrow;
827 borrow = z >> 16;
829 (*(bx)++ = ((z) << 16) | ((y) & 0xffff));
831 while (sx <= sxe);
832 if (!*bxe)
834 bx = b->_x;
835 while (--bxe > bx && !*bxe)
836 --n;
837 b->_wds = n;
840 if (__mcmp (b, S) >= 0)
842 q++;
843 borrow = 0;
844 carry = 0;
845 bx = b->_x;
846 sx = S->_x;
849 si = *sx++;
850 ys = (si & 0xffff) + carry;
851 zs = (si >> 16) + (ys >> 16);
852 carry = zs >> 16;
853 y = (*bx & 0xffff) - (ys & 0xffff) + borrow;
854 borrow = y >> 16;
856 z = (*bx >> 16) - (zs & 0xffff) + borrow;
857 borrow = z >> 16;
859 (*(bx)++ = ((z) << 16) | ((y) & 0xffff));
861 while (sx <= sxe);
862 bx = b->_x;
863 bxe = bx + n;
864 if (!*bxe)
866 while (--bxe > bx && !*bxe)
867 --n;
868 b->_wds = n;
871 return q;
873 char *
874 _dtoa_r(struct _reent *ptr , double _d , int mode , int ndigits , int *decpt , int *sign , char **rve)
876 int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1, j, j1, k, k0,
877 k_check, leftright, m2, m5, s2, s5, spec_case, try_quick;
878 union double_union d, d2, eps;
879 long L;
880 int denorm;
881 __ULong x;
882 _Bigint *b, *b1, *delta, *mlo = ((void *)0), *mhi, *S;
883 double ds;
884 char *s, *s0;
885 d.d = _d;
887 if (((ptr)->_result))
889 ((ptr)->_result)->_k = ((ptr)->_result_k);
890 ((ptr)->_result)->_maxwds = 1 << ((ptr)->_result_k);
891 _Bfree (ptr, ((ptr)->_result));
892 ((ptr)->_result) = 0;
894 if ((d.i[1]) & ((__uint32_t)0x80000000L))
896 *sign = 1;
897 (d.i[1]) &= ~((__uint32_t)0x80000000L);
899 else
900 *sign = 0;
901 if (((d.i[1]) & ((__uint32_t)0x7ff00000L)) == ((__uint32_t)0x7ff00000L))
903 *decpt = 9999;
905 !(d.i[0]) && !((d.i[1]) & 0xfffff) ? "Infinity" :
906 "NaN";
907 if (rve)
908 *rve =
909 s[3] ? s + 8 :
910 s + 3;
911 return s;
913 if (!d.d)
915 *decpt = 1;
916 s = "0";
917 if (rve)
918 *rve = s + 1;
919 return s;
921 b = __d2b (ptr, d.d, &be, &bbits);
922 if ((i = (int) ((d.i[1]) >> 20 & (((__uint32_t)0x7ff00000L) >> 20))) != 0)
924 d2.d = d.d;
925 (d2.i[1]) &= ((__uint32_t)0xfffffL);
926 (d2.i[1]) |= ((__uint32_t)0x3ff00000L);
927 i -= 1023;
928 denorm = 0;
930 else
932 i = bbits + be + (1023 + (53 - 1) - 1);
933 x = (i > 32) ? ((d.i[1]) << (64 - i)) | ((d.i[0]) >> (i - 32))
934 : ((d.i[0]) << (32 - i));
935 d2.d = x;
936 (d2.i[1]) -= 31 * ((__uint32_t)0x100000L);
937 i -= (1023 + (53 - 1) - 1) + 1;
938 denorm = 1;
940 ds = (d2.d - 1.5) * 0.289529654602168 + 0.1760912590558 + i * 0.301029995663981;
941 k = (int) ds;
942 if (ds < 0. && ds != k)
943 k--;
944 k_check = 1;
945 if (k >= 0 && k <= 22)
947 if (d.d < __mprec_tens[k])
948 k--;
949 k_check = 0;
951 j = bbits - i - 1;
952 if (j >= 0)
954 b2 = 0;
955 s2 = j;
957 else
959 b2 = -j;
960 s2 = 0;
962 if (k >= 0)
964 b5 = 0;
965 s5 = k;
966 s2 += k;
968 else
970 b2 -= k;
971 b5 = -k;
972 s5 = 0;
974 if (mode < 0 || mode > 9)
975 mode = 0;
976 try_quick = 1;
977 if (mode > 5)
979 mode -= 4;
980 try_quick = 0;
982 leftright = 1;
983 ilim = ilim1 = -1;
984 switch (mode)
986 case 0:
987 case 1:
988 i = 18;
989 ndigits = 0;
990 break;
991 case 2:
992 leftright = 0;
993 case 4:
994 if (ndigits <= 0)
995 ndigits = 1;
996 ilim = ilim1 = i = ndigits;
997 break;
998 case 3:
999 leftright = 0;
1000 case 5:
1001 i = ndigits + k + 1;
1002 ilim = i;
1003 ilim1 = i - 1;
1004 if (i <= 0)
1005 i = 1;
1007 j = sizeof (__ULong);
1008 for (((ptr)->_result_k) = 0; sizeof (_Bigint) - sizeof (__ULong) + j <= i;
1009 j <<= 1)
1010 ((ptr)->_result_k)++;
1011 ((ptr)->_result) = _Balloc (ptr, ((ptr)->_result_k));
1012 s = s0 = (char *) ((ptr)->_result);
1013 if (ilim >= 0 && ilim <= 14 && try_quick)
1015 i = 0;
1016 d2.d = d.d;
1017 k0 = k;
1018 ilim0 = ilim;
1019 ieps = 2;
1020 if (k > 0)
1022 ds = __mprec_tens[k & 0xf];
1023 j = k >> 4;
1024 if (j & 0x10)
1026 j &= 0x10 - 1;
1027 d.d /= __mprec_bigtens[5 - 1];
1028 ieps++;
1030 for (; j; j >>= 1, i++)
1031 if (j & 1)
1033 ieps++;
1034 ds *= __mprec_bigtens[i];
1036 d.d /= ds;
1038 else if ((j1 = -k) != 0)
1040 d.d *= __mprec_tens[j1 & 0xf];
1041 for (j = j1 >> 4; j; j >>= 1, i++)
1042 if (j & 1)
1044 ieps++;
1045 d.d *= __mprec_bigtens[i];
1048 if (k_check && d.d < 1. && ilim > 0)
1050 if (ilim1 <= 0)
1051 goto fast_failed;
1052 ilim = ilim1;
1053 k--;
1054 d.d *= 10.;
1055 ieps++;
1057 eps.d = ieps * d.d + 7.;
1058 (eps.i[1]) -= (53 - 1) * ((__uint32_t)0x100000L);
1059 if (ilim == 0)
1061 S = mhi = 0;
1062 d.d -= 5.;
1063 if (d.d > eps.d)
1064 goto one_digit;
1065 if (d.d < -eps.d)
1066 goto no_digits;
1067 goto fast_failed;
1069 if (leftright)
1071 eps.d = 0.5 / __mprec_tens[ilim - 1] - eps.d;
1072 for (i = 0;;)
1074 L = d.d;
1075 d.d -= L;
1076 *s++ = '0' + (int) L;
1077 if (d.d < eps.d)
1078 goto ret1;
1079 if (1. - d.d < eps.d)
1080 goto bump_up;
1081 if (++i >= ilim)
1082 break;
1083 eps.d *= 10.;
1084 d.d *= 10.;
1087 else
1089 eps.d *= __mprec_tens[ilim - 1];
1090 for (i = 1;; i++, d.d *= 10.)
1092 L = d.d;
1093 d.d -= L;
1094 *s++ = '0' + (int) L;
1095 if (i == ilim)
1097 if (d.d > 0.5 + eps.d)
1098 goto bump_up;
1099 else if (d.d < 0.5 - eps.d)
1101 while (*--s == '0');
1102 s++;
1103 goto ret1;
1105 break;
1109 fast_failed:
1110 s = s0;
1111 d.d = d2.d;
1112 k = k0;
1113 ilim = ilim0;
1115 if (be >= 0 && k <= 14)
1117 ds = __mprec_tens[k];
1118 if (ndigits < 0 && ilim <= 0)
1120 S = mhi = 0;
1121 if (ilim < 0 || d.d <= 5 * ds)
1122 goto no_digits;
1123 goto one_digit;
1125 for (i = 1;; i++)
1127 L = d.d / ds;
1128 d.d -= L * ds;
1129 *s++ = '0' + (int) L;
1130 if (i == ilim)
1132 d.d += d.d;
1133 if ((d.d > ds) || ((d.d == ds) && (L & 1)))
1135 bump_up:
1136 while (*--s == '9')
1137 if (s == s0)
1139 k++;
1140 *s = '0';
1141 break;
1143 ++*s++;
1145 break;
1147 if (!(d.d *= 10.))
1148 break;
1150 goto ret1;
1152 m2 = b2;
1153 m5 = b5;
1154 mhi = mlo = 0;
1155 if (leftright)
1157 if (mode < 2)
1160 denorm ? be + (1023 + (53 - 1) - 1 + 1) :
1161 1 + 53 - bbits;
1163 else
1165 j = ilim - 1;
1166 if (m5 >= j)
1167 m5 -= j;
1168 else
1170 s5 += j -= m5;
1171 b5 += j;
1172 m5 = 0;
1174 if ((i = ilim) < 0)
1176 m2 -= i;
1177 i = 0;
1180 b2 += i;
1181 s2 += i;
1182 mhi = __i2b (ptr, 1);
1184 if (m2 > 0 && s2 > 0)
1186 i = m2 < s2 ? m2 : s2;
1187 b2 -= i;
1188 m2 -= i;
1189 s2 -= i;
1191 if (b5 > 0)
1193 if (leftright)
1195 if (m5 > 0)
1197 mhi = __pow5mult (ptr, mhi, m5);
1198 b1 = __multiply (ptr, mhi, b);
1199 _Bfree (ptr, b);
1200 b = b1;
1202 if ((j = b5 - m5) != 0)
1203 b = __pow5mult (ptr, b, j);
1205 else
1206 b = __pow5mult (ptr, b, b5);
1208 S = __i2b (ptr, 1);
1209 if (s5 > 0)
1210 S = __pow5mult (ptr, S, s5);
1211 spec_case = 0;
1212 if (mode < 2)
1214 if (!(d.i[0]) && !((d.i[1]) & ((__uint32_t)0xfffffL))
1215 && (d.i[1]) & ((__uint32_t)0x7ff00000L)
1218 b2 += 1;
1219 s2 += 1;
1220 spec_case = 1;
1223 if ((i = ((s5 ? 32 - __hi0bits (S->_x[S->_wds - 1]) : 1) + s2) & 0x1f) != 0)
1224 i = 32 - i;
1225 if (i > 4)
1227 i -= 4;
1228 b2 += i;
1229 m2 += i;
1230 s2 += i;
1232 else if (i < 4)
1234 i += 28;
1235 b2 += i;
1236 m2 += i;
1237 s2 += i;
1239 if (b2 > 0)
1240 b = __lshift (ptr, b, b2);
1241 if (s2 > 0)
1242 S = __lshift (ptr, S, s2);
1243 if (k_check)
1245 if (__mcmp (b, S) < 0)
1247 k--;
1248 b = __multadd (ptr, b, 10, 0);
1249 if (leftright)
1250 mhi = __multadd (ptr, mhi, 10, 0);
1251 ilim = ilim1;
1254 if (ilim <= 0 && mode > 2)
1256 if (ilim < 0 || __mcmp (b, S = __multadd (ptr, S, 5, 0)) <= 0)
1258 no_digits:
1259 k = -1 - ndigits;
1260 goto ret;
1262 one_digit:
1263 *s++ = '1';
1264 k++;
1265 goto ret;
1267 if (leftright)
1269 if (m2 > 0)
1270 mhi = __lshift (ptr, mhi, m2);
1271 mlo = mhi;
1272 if (spec_case)
1274 mhi = _Balloc (ptr, mhi->_k);
1275 memcpy((char *)&mhi->_sign, (char *)&mlo->_sign, mlo->_wds*sizeof(long) + 2*sizeof(int));
1276 mhi = __lshift (ptr, mhi, 1);
1278 for (i = 1;; i++)
1280 dig = quorem (b, S) + '0';
1281 j = __mcmp (b, mlo);
1282 delta = __mdiff (ptr, S, mhi);
1283 j1 = delta->_sign ? 1 : __mcmp (b, delta);
1284 _Bfree (ptr, delta);
1285 if (j1 == 0 && !mode && !((d.i[0]) & 1))
1287 if (dig == '9')
1288 goto round_9_up;
1289 if (j > 0)
1290 dig++;
1291 *s++ = dig;
1292 goto ret;
1294 if ((j < 0) || ((j == 0) && !mode
1295 && !((d.i[0]) & 1)
1298 if (j1 > 0)
1300 b = __lshift (ptr, b, 1);
1301 j1 = __mcmp (b, S);
1302 if (((j1 > 0) || ((j1 == 0) && (dig & 1)))
1303 && dig++ == '9')
1304 goto round_9_up;
1306 *s++ = dig;
1307 goto ret;
1309 if (j1 > 0)
1311 if (dig == '9')
1313 round_9_up:
1314 *s++ = '9';
1315 goto roundoff;
1317 *s++ = dig + 1;
1318 goto ret;
1320 *s++ = dig;
1321 if (i == ilim)
1322 break;
1323 b = __multadd (ptr, b, 10, 0);
1324 if (mlo == mhi)
1325 mlo = mhi = __multadd (ptr, mhi, 10, 0);
1326 else
1328 mlo = __multadd (ptr, mlo, 10, 0);
1329 mhi = __multadd (ptr, mhi, 10, 0);
1333 else
1334 for (i = 1;; i++)
1336 *s++ = dig = quorem (b, S) + '0';
1337 if (i >= ilim)
1338 break;
1339 b = __multadd (ptr, b, 10, 0);
1341 b = __lshift (ptr, b, 1);
1342 j = __mcmp (b, S);
1343 if ((j > 0) || ((j == 0) && (dig & 1)))
1345 roundoff:
1346 while (*--s == '9')
1347 if (s == s0)
1349 k++;
1350 *s++ = '1';
1351 goto ret;
1353 ++*s++;
1355 else
1357 while (*--s == '0');
1358 s++;
1360 ret:
1361 _Bfree (ptr, S);
1362 if (mhi)
1364 if (mlo && mlo != mhi)
1365 _Bfree (ptr, mlo);
1366 _Bfree (ptr, mhi);
1368 ret1:
1369 _Bfree (ptr, b);
1370 *s = 0;
1371 *decpt = k + 1;
1372 if (rve)
1373 *rve = s;
1374 return s0;