1 /* { dg-do compile } */
2 /* { dg-skip-if "incompatible options" { ! { arm_thumb1_ok || arm_thumb2_ok } } } */
3 /* { dg-options "-mthumb -O2" } */
4 
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
31 {
32   int __count;
33   union
34   {
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
44 {
45   struct _Bigint *_next;
46   int _k, _maxwds, _sign, _wds;
47   __ULong _x[1];
48 };
49 struct __tm
50 {
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;
60 };
61 struct _on_exit_args {
62  void * _fnargs[32];
63  void * _dso_handle[32];
64  __ULong _fntypes;
65  __ULong _is_cxa;
66 };
67 struct _atexit {
68  struct _atexit *_next;
69  int _ind;
70  void (*_fns[32])(void);
71         struct _on_exit_args _on_exit_args;
72 };
73 struct __sbuf {
74  unsigned char *_base;
75  int _size;
76 };
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)
87                                           ;
88   int (* _write) (struct _reent *, void *, const char *, int)
89                                    ;
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;
104 };
105 typedef struct __sFILE __FILE;
106 struct _glue
107 {
108   struct _glue *_next;
109   int _niobs;
110   __FILE *_iobs;
111 };
112 struct _rand48 {
113   unsigned short _seed[3];
114   unsigned short _mult[3];
115   unsigned short _add;
116 };
117 struct _reent
118 {
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
134     {
135       struct
136         {
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
158         {
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];
168 };
169 extern struct _reent *_impure_ptr ;
170 extern struct _reent *const _global_impure_ptr ;
171 void _reclaim_reent (struct _reent *);
172 typedef struct
173 {
174   int quot;
175   int rem;
176 } div_t;
177 typedef struct
178 {
179   long quot;
180   long rem;
181 } ldiv_t;
182 typedef struct
183 {
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)
199                                 ;
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
419 {
420   double value;
421   struct
422   {
423     unsigned int fraction1:32;
424     unsigned int fraction0:20;
425     unsigned int exponent :11;
426     unsigned int sign : 1;
427   } number;
428   struct
429   {
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
437   {
438     unsigned long lsw;
439     unsigned long msw;
440   } parts;
441   long aslong[2];
442 } __ieee_double_shape_type;
443 typedef union
444 {
445   float value;
446   struct
447   {
448     unsigned int fraction0: 7;
449     unsigned int fraction1: 16;
450     unsigned int exponent: 8;
451     unsigned int sign : 1;
452   } number;
453   struct
454   {
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
481 {
482   double d;
483   __ULong i[2];
484 };
485 union __fmath
486 {
487   float f;
488   __ULong i[1];
489 };
490 union __ldmath
491 {
492   long double ld;
493   __ULong i[4];
494 };
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
703 {
704   int type;
705   char *name;
706   double arg1;
707   double arg2;
708   double retval;
709   int err;
710 };
711 extern int matherr (struct exception *e);
712 enum __fdlibm_version
713 {
714   __fdlibm_ieee = -1,
715   __fdlibm_svid,
716   __fdlibm_xopen,
717   __fdlibm_posix
718 };
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;
736 };
737 struct itimerspec {
738   struct timespec it_interval;
739   struct timespec it_value;
740 };
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
762 {
763   double d;
764   __uint32_t i[2];
765 };
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
quorem(_Bigint * b,_Bigint * S)797 quorem(_Bigint * b , _Bigint * S)
798 {
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)
814     {
815       borrow = 0;
816       carry = 0;
817       do
818  {
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;
825    ;
826    z = (*bx >> 16) - (zs & 0xffff) + borrow;
827    borrow = z >> 16;
828    ;
829    (*(bx)++ = ((z) << 16) | ((y) & 0xffff));
830  }
831       while (sx <= sxe);
832       if (!*bxe)
833  {
834    bx = b->_x;
835    while (--bxe > bx && !*bxe)
836      --n;
837    b->_wds = n;
838  }
839     }
840   if (__mcmp (b, S) >= 0)
841     {
842       q++;
843       borrow = 0;
844       carry = 0;
845       bx = b->_x;
846       sx = S->_x;
847       do
848  {
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;
855    ;
856    z = (*bx >> 16) - (zs & 0xffff) + borrow;
857    borrow = z >> 16;
858    ;
859    (*(bx)++ = ((z) << 16) | ((y) & 0xffff));
860  }
861       while (sx <= sxe);
862       bx = b->_x;
863       bxe = bx + n;
864       if (!*bxe)
865  {
866    while (--bxe > bx && !*bxe)
867      --n;
868    b->_wds = n;
869  }
870     }
871   return q;
872 }
873 char *
_dtoa_r(struct _reent * ptr,double _d,int mode,int ndigits,int * decpt,int * sign,char ** rve)874 _dtoa_r(struct _reent *ptr , double _d , int mode , int ndigits , int *decpt , int *sign , char **rve)
875 {
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;
886   ;
887   if (((ptr)->_result))
888     {
889       ((ptr)->_result)->_k = ((ptr)->_result_k);
890       ((ptr)->_result)->_maxwds = 1 << ((ptr)->_result_k);
891       _Bfree (ptr, ((ptr)->_result));
892       ((ptr)->_result) = 0;
893     }
894   if ((d.i[1]) & ((__uint32_t)0x80000000L))
895     {
896       *sign = 1;
897       (d.i[1]) &= ~((__uint32_t)0x80000000L);
898     }
899   else
900     *sign = 0;
901   if (((d.i[1]) & ((__uint32_t)0x7ff00000L)) == ((__uint32_t)0x7ff00000L))
902     {
903       *decpt = 9999;
904       s =
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;
912     }
913   if (!d.d)
914     {
915       *decpt = 1;
916       s = "0";
917       if (rve)
918  *rve = s + 1;
919       return s;
920     }
921   b = __d2b (ptr, d.d, &be, &bbits);
922   if ((i = (int) ((d.i[1]) >> 20 & (((__uint32_t)0x7ff00000L) >> 20))) != 0)
923     {
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;
929     }
930   else
931     {
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;
939     }
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)
946     {
947       if (d.d < __mprec_tens[k])
948  k--;
949       k_check = 0;
950     }
951   j = bbits - i - 1;
952   if (j >= 0)
953     {
954       b2 = 0;
955       s2 = j;
956     }
957   else
958     {
959       b2 = -j;
960       s2 = 0;
961     }
962   if (k >= 0)
963     {
964       b5 = 0;
965       s5 = k;
966       s2 += k;
967     }
968   else
969     {
970       b2 -= k;
971       b5 = -k;
972       s5 = 0;
973     }
974   if (mode < 0 || mode > 9)
975     mode = 0;
976   try_quick = 1;
977   if (mode > 5)
978     {
979       mode -= 4;
980       try_quick = 0;
981     }
982   leftright = 1;
983   ilim = ilim1 = -1;
984   switch (mode)
985     {
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;
1006     }
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)
1014     {
1015       i = 0;
1016       d2.d = d.d;
1017       k0 = k;
1018       ilim0 = ilim;
1019       ieps = 2;
1020       if (k > 0)
1021  {
1022    ds = __mprec_tens[k & 0xf];
1023    j = k >> 4;
1024    if (j & 0x10)
1025      {
1026        j &= 0x10 - 1;
1027        d.d /= __mprec_bigtens[5 - 1];
1028        ieps++;
1029      }
1030    for (; j; j >>= 1, i++)
1031      if (j & 1)
1032        {
1033   ieps++;
1034   ds *= __mprec_bigtens[i];
1035        }
1036    d.d /= ds;
1037  }
1038       else if ((j1 = -k) != 0)
1039  {
1040    d.d *= __mprec_tens[j1 & 0xf];
1041    for (j = j1 >> 4; j; j >>= 1, i++)
1042      if (j & 1)
1043        {
1044   ieps++;
1045   d.d *= __mprec_bigtens[i];
1046        }
1047  }
1048       if (k_check && d.d < 1. && ilim > 0)
1049  {
1050    if (ilim1 <= 0)
1051      goto fast_failed;
1052    ilim = ilim1;
1053    k--;
1054    d.d *= 10.;
1055    ieps++;
1056  }
1057       eps.d = ieps * d.d + 7.;
1058       (eps.i[1]) -= (53 - 1) * ((__uint32_t)0x100000L);
1059       if (ilim == 0)
1060  {
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;
1068  }
1069       if (leftright)
1070  {
1071    eps.d = 0.5 / __mprec_tens[ilim - 1] - eps.d;
1072    for (i = 0;;)
1073      {
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.;
1085      }
1086  }
1087       else
1088  {
1089    eps.d *= __mprec_tens[ilim - 1];
1090    for (i = 1;; i++, d.d *= 10.)
1091      {
1092        L = d.d;
1093        d.d -= L;
1094        *s++ = '0' + (int) L;
1095        if (i == ilim)
1096   {
1097     if (d.d > 0.5 + eps.d)
1098       goto bump_up;
1099     else if (d.d < 0.5 - eps.d)
1100       {
1101         while (*--s == '0');
1102         s++;
1103         goto ret1;
1104       }
1105     break;
1106   }
1107      }
1108  }
1109     fast_failed:
1110       s = s0;
1111       d.d = d2.d;
1112       k = k0;
1113       ilim = ilim0;
1114     }
1115   if (be >= 0 && k <= 14)
1116     {
1117       ds = __mprec_tens[k];
1118       if (ndigits < 0 && ilim <= 0)
1119  {
1120    S = mhi = 0;
1121    if (ilim < 0 || d.d <= 5 * ds)
1122      goto no_digits;
1123    goto one_digit;
1124  }
1125       for (i = 1;; i++)
1126  {
1127    L = d.d / ds;
1128    d.d -= L * ds;
1129    *s++ = '0' + (int) L;
1130    if (i == ilim)
1131      {
1132        d.d += d.d;
1133              if ((d.d > ds) || ((d.d == ds) && (L & 1)))
1134   {
1135   bump_up:
1136     while (*--s == '9')
1137       if (s == s0)
1138         {
1139    k++;
1140    *s = '0';
1141    break;
1142         }
1143     ++*s++;
1144   }
1145        break;
1146      }
1147    if (!(d.d *= 10.))
1148      break;
1149  }
1150       goto ret1;
1151     }
1152   m2 = b2;
1153   m5 = b5;
1154   mhi = mlo = 0;
1155   if (leftright)
1156     {
1157       if (mode < 2)
1158  {
1159    i =
1160      denorm ? be + (1023 + (53 - 1) - 1 + 1) :
1161      1 + 53 - bbits;
1162  }
1163       else
1164  {
1165    j = ilim - 1;
1166    if (m5 >= j)
1167      m5 -= j;
1168    else
1169      {
1170        s5 += j -= m5;
1171        b5 += j;
1172        m5 = 0;
1173      }
1174    if ((i = ilim) < 0)
1175      {
1176        m2 -= i;
1177        i = 0;
1178      }
1179  }
1180       b2 += i;
1181       s2 += i;
1182       mhi = __i2b (ptr, 1);
1183     }
1184   if (m2 > 0 && s2 > 0)
1185     {
1186       i = m2 < s2 ? m2 : s2;
1187       b2 -= i;
1188       m2 -= i;
1189       s2 -= i;
1190     }
1191   if (b5 > 0)
1192     {
1193       if (leftright)
1194  {
1195    if (m5 > 0)
1196      {
1197        mhi = __pow5mult (ptr, mhi, m5);
1198        b1 = __multiply (ptr, mhi, b);
1199        _Bfree (ptr, b);
1200        b = b1;
1201      }
1202          if ((j = b5 - m5) != 0)
1203      b = __pow5mult (ptr, b, j);
1204  }
1205       else
1206  b = __pow5mult (ptr, b, b5);
1207     }
1208   S = __i2b (ptr, 1);
1209   if (s5 > 0)
1210     S = __pow5mult (ptr, S, s5);
1211   spec_case = 0;
1212   if (mode < 2)
1213     {
1214       if (!(d.i[0]) && !((d.i[1]) & ((__uint32_t)0xfffffL))
1215    && (d.i[1]) & ((__uint32_t)0x7ff00000L)
1216  )
1217  {
1218    b2 += 1;
1219    s2 += 1;
1220    spec_case = 1;
1221  }
1222     }
1223   if ((i = ((s5 ? 32 - __hi0bits (S->_x[S->_wds - 1]) : 1) + s2) & 0x1f) != 0)
1224     i = 32 - i;
1225   if (i > 4)
1226     {
1227       i -= 4;
1228       b2 += i;
1229       m2 += i;
1230       s2 += i;
1231     }
1232   else if (i < 4)
1233     {
1234       i += 28;
1235       b2 += i;
1236       m2 += i;
1237       s2 += i;
1238     }
1239   if (b2 > 0)
1240     b = __lshift (ptr, b, b2);
1241   if (s2 > 0)
1242     S = __lshift (ptr, S, s2);
1243   if (k_check)
1244     {
1245       if (__mcmp (b, S) < 0)
1246  {
1247    k--;
1248    b = __multadd (ptr, b, 10, 0);
1249    if (leftright)
1250      mhi = __multadd (ptr, mhi, 10, 0);
1251    ilim = ilim1;
1252  }
1253     }
1254   if (ilim <= 0 && mode > 2)
1255     {
1256       if (ilim < 0 || __mcmp (b, S = __multadd (ptr, S, 5, 0)) <= 0)
1257  {
1258  no_digits:
1259    k = -1 - ndigits;
1260    goto ret;
1261  }
1262     one_digit:
1263       *s++ = '1';
1264       k++;
1265       goto ret;
1266     }
1267   if (leftright)
1268     {
1269       if (m2 > 0)
1270  mhi = __lshift (ptr, mhi, m2);
1271       mlo = mhi;
1272       if (spec_case)
1273  {
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);
1277  }
1278       for (i = 1;; i++)
1279  {
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))
1286      {
1287        if (dig == '9')
1288   goto round_9_up;
1289        if (j > 0)
1290   dig++;
1291        *s++ = dig;
1292        goto ret;
1293      }
1294          if ((j < 0) || ((j == 0) && !mode
1295        && !((d.i[0]) & 1)
1296            ))
1297      {
1298        if (j1 > 0)
1299   {
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;
1305   }
1306        *s++ = dig;
1307        goto ret;
1308      }
1309    if (j1 > 0)
1310      {
1311        if (dig == '9')
1312   {
1313   round_9_up:
1314     *s++ = '9';
1315     goto roundoff;
1316   }
1317        *s++ = dig + 1;
1318        goto ret;
1319      }
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
1327      {
1328        mlo = __multadd (ptr, mlo, 10, 0);
1329        mhi = __multadd (ptr, mhi, 10, 0);
1330      }
1331  }
1332     }
1333   else
1334     for (i = 1;; i++)
1335       {
1336  *s++ = dig = quorem (b, S) + '0';
1337  if (i >= ilim)
1338    break;
1339  b = __multadd (ptr, b, 10, 0);
1340       }
1341   b = __lshift (ptr, b, 1);
1342   j = __mcmp (b, S);
1343   if ((j > 0) || ((j == 0) && (dig & 1)))
1344     {
1345     roundoff:
1346       while (*--s == '9')
1347  if (s == s0)
1348    {
1349      k++;
1350      *s++ = '1';
1351      goto ret;
1352    }
1353       ++*s++;
1354     }
1355   else
1356     {
1357       while (*--s == '0');
1358       s++;
1359     }
1360 ret:
1361   _Bfree (ptr, S);
1362   if (mhi)
1363     {
1364       if (mlo && mlo != mhi)
1365  _Bfree (ptr, mlo);
1366       _Bfree (ptr, mhi);
1367     }
1368 ret1:
1369   _Bfree (ptr, b);
1370   *s = 0;
1371   *decpt = k + 1;
1372   if (rve)
1373     *rve = s;
1374   return s0;
1375 }
1376