diff options
author | Stelios Koroneos <skoroneos@digital-opsis.com> | 2007-03-12 12:42:28 +0000 |
---|---|---|
committer | Stelios Koroneos <skoroneos@digital-opsis.com> | 2007-03-12 12:42:28 +0000 |
commit | 242ff6b8bc003c6529e9e50af75294ba4b862906 (patch) | |
tree | d7501424844077fd05939a58f113d8dffed3ded0 /packages/gcc/gcc-4.1.1/ppc-sfp-long-double-gcc411-7.patch | |
parent | 8a99edb6e1f3eea465d389761eda63fcf31f7d85 (diff) |
packages/gcc/gcc_4.1.1.bb :The following set of 2 patches adds support for soft-float and mlong-128 to powerpc
targets without fpu for gcc 4.1.1/glibc 2.5
Diffstat (limited to 'packages/gcc/gcc-4.1.1/ppc-sfp-long-double-gcc411-7.patch')
-rw-r--r-- | packages/gcc/gcc-4.1.1/ppc-sfp-long-double-gcc411-7.patch | 4271 |
1 files changed, 4271 insertions, 0 deletions
diff --git a/packages/gcc/gcc-4.1.1/ppc-sfp-long-double-gcc411-7.patch b/packages/gcc/gcc-4.1.1/ppc-sfp-long-double-gcc411-7.patch new file mode 100644 index 0000000000..e3a87c87d0 --- /dev/null +++ b/packages/gcc/gcc-4.1.1/ppc-sfp-long-double-gcc411-7.patch @@ -0,0 +1,4271 @@ + * config/rs6000/darwin-ldouble.c: Build file for SOFT_FLOAT. + (strong_alias): Define. + (__gcc_qmul): Provide non-FMA for soft-float. + (__gcc_qdiv): Same. + (__gcc_qneg): New. + (__gcc_qeq): New. + (__gcc_qle): New. + (__gcc_qge): New. + (__gcc_qunord): New. + (__gcc_stoq): New. + (__gcc_dtoq): New. + (__gcc_qtos): New. + (__gcc_qtod): New. + (__gcc_qtoi): New. + (__gcc_qtou): New. + (__gcc_itoq): New. + (__gcc_utoq): New. + (fmsub): New. + * config/rs6000/rs6000.c (rs6000_emit_move): Handle TFmode + constant for soft-float. + (rs6000_init_libfuncs): Initialize soft-float functions. + * config/rs6000/libgcc-ppc-glibc.ver: Version soft-float symbols. + * config/rs6000/rs6000.md (movtf): Allow soft-float. + (movtf_softfloat): New. + * config/rs6000/t-ppccomm (TARGET_LIBGCC2_CFLAGS): Add + -mlong-double-128. + (ldblspecs): Remove. + * config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Do not warn + about long double soft float. + +diff -urN gcc-4.1.1/gcc/config/rs6000/darwin-ldouble.c gcc-4.1.1-patched/gcc/config/rs6000/darwin-ldouble.c +--- gcc-4.1.1/gcc/config/rs6000/darwin-ldouble.c 2006-03-23 16:23:58.000000000 -0600 ++++ gcc-4.1.1-patched/gcc/config/rs6000/darwin-ldouble.c 2006-09-12 14:30:16.000000000 -0500 +@@ -49,7 +49,8 @@ + + This code currently assumes big-endian. */ + +-#if (!defined (__NO_FPRS__) && !defined (__LITTLE_ENDIAN__) \ ++#if ((!defined (__NO_FPRS__) || defined (_SOFT_FLOAT)) \ ++ && !defined (__LITTLE_ENDIAN__) \ + && (defined (__MACH__) || defined (__powerpc__) || defined (_AIX))) + + #define fabs(x) __builtin_fabs(x) +@@ -60,14 +61,19 @@ + + #define nonfinite(a) unlikely (! isless (fabs (a), inf ())) + ++/* Define ALIASNAME as a strong alias for NAME. */ ++# define strong_alias(name, aliasname) _strong_alias(name, aliasname) ++# define _strong_alias(name, aliasname) \ ++ extern __typeof (name) aliasname __attribute__ ((alias (#name))); ++ + /* All these routines actually take two long doubles as parameters, + but GCC currently generates poor code when a union is used to turn + a long double into a pair of doubles. */ + +-extern long double __gcc_qadd (double, double, double, double); +-extern long double __gcc_qsub (double, double, double, double); +-extern long double __gcc_qmul (double, double, double, double); +-extern long double __gcc_qdiv (double, double, double, double); ++long double __gcc_qadd (double, double, double, double); ++long double __gcc_qsub (double, double, double, double); ++long double __gcc_qmul (double, double, double, double); ++long double __gcc_qdiv (double, double, double, double); + + #if defined __ELF__ && defined SHARED \ + && (defined __powerpc64__ || !(defined __linux__ || defined __gnu_hurd__)) +@@ -139,6 +145,10 @@ + return __gcc_qadd (a, b, -c, -d); + } + ++#ifdef _SOFT_FLOAT ++static double fmsub (double, double, double); ++#endif ++ + long double + __gcc_qmul (double a, double b, double c, double d) + { +@@ -154,7 +164,11 @@ + /* Sum terms of two highest orders. */ + + /* Use fused multiply-add to get low part of a * c. */ ++#ifndef _SOFT_FLOAT + asm ("fmsub %0,%1,%2,%3" : "=f"(tau) : "f"(a), "f"(c), "f"(t)); ++#else ++ tau = fmsub (a, c, t); ++#endif + v = a*d; + w = b*c; + tau += v + w; /* Add in other second-order terms. */ +@@ -187,7 +201,11 @@ + numerically necessary. */ + + /* Use fused multiply-add to get low part of c * t. */ ++#ifndef _SOFT_FLOAT + asm ("fmsub %0,%1,%2,%3" : "=f"(sigma) : "f"(c), "f"(t), "f"(s)); ++#else ++ sigma = fmsub (c, t, s); ++#endif + v = a - s; + + tau = ((v-sigma)+w)/c; /* Correction to t. */ +@@ -201,4 +219,3959 @@ + return z.ldval; + } + ++#ifdef _SOFT_FLOAT ++ ++long double __gcc_qneg (double, double); ++int __gcc_qeq (double, double, double, double); ++int __gcc_qne (double, double, double, double); ++int __gcc_qge (double, double, double, double); ++int __gcc_qle (double, double, double, double); ++int __gcc_qunord (double, double, double, double); ++long double __gcc_stoq (float); ++long double __gcc_dtoq (double); ++float __gcc_qtos (double, double); ++double __gcc_qtod (double, double); ++int __gcc_qtoi (double, double); ++unsigned int __gcc_qtou (double, double); ++long double __gcc_itoq (int); ++long double __gcc_utoq (unsigned int); ++ ++extern int __eqdf2 (double, double); ++extern int __ledf2 (double, double); ++extern int __gedf2 (double, double); ++extern int __unorddf2 (double, double); ++ ++/* Negate 'long double' value and return the result. */ ++long double ++__gcc_qneg (double a, double aa) ++{ ++ longDblUnion x; ++ ++ x.dval[0] = -a; ++ x.dval[1] = -aa; ++ return x.ldval; ++} ++ ++/* Compare two 'long double' values for equality. */ ++int ++__gcc_qeq (double a, double aa, double c, double cc) ++{ ++ if (__eqdf2 (a, c) == 0) ++ return __eqdf2 (aa, cc); ++ return 1; ++} ++ ++strong_alias (__gcc_qeq, __gcc_qne); ++ ++/* Compare two 'long double' values for less than or equal. */ ++int ++__gcc_qle (double a, double aa, double c, double cc) ++{ ++ if (__eqdf2 (a, c) == 0) ++ return __ledf2 (aa, cc); ++ return __ledf2 (a, c); ++} ++ ++strong_alias (__gcc_qle, __gcc_qlt); ++ ++/* Compare two 'long double' values for greater than or equal. */ ++int ++__gcc_qge (double a, double aa, double c, double cc) ++{ ++ if (__eqdf2 (a, c) == 0) ++ return __gedf2 (aa, cc); ++ return __gedf2 (a, c); ++} ++ ++strong_alias (__gcc_qge, __gcc_qgt); ++ ++/* Compare two 'long double' values for unordered. */ ++int ++__gcc_qunord (double a, double aa, double c, double cc) ++{ ++ if (__eqdf2 (a, c) == 0) ++ return __unorddf2 (aa, cc); ++ return __unorddf2 (a, c); ++} ++ ++/* Convert single to long double. */ ++long double ++__gcc_stoq (float a) ++{ ++ longDblUnion x; ++ ++ x.dval[0] = (double) a; ++ x.dval[1] = 0.0; ++ ++ return x.ldval; ++} ++ ++/* Convert double to long double. */ ++long double ++__gcc_dtoq (double a) ++{ ++ longDblUnion x; ++ ++ x.dval[0] = a; ++ x.dval[1] = 0.0; ++ ++ return x.ldval; ++} ++ ++/* Convert long double to single. */ ++float ++__gcc_qtos (double a, double aa __attribute__ ((__unused__))) ++{ ++ return (float) a; ++} ++ ++/* Convert long double to double. */ ++double ++__gcc_qtod (double a, double aa __attribute__ ((__unused__))) ++{ ++ return a; ++} ++ ++/* Convert long double to int. */ ++int ++__gcc_qtoi (double a, double aa) ++{ ++ double z = a + aa; ++ return (int) z; ++} ++ ++/* Convert long double to unsigned int. */ ++unsigned int ++__gcc_qtou (double a, double aa) ++{ ++ double z = a + aa; ++ return (unsigned int) z; ++} ++ ++/* Convert int to long double. */ ++long double ++__gcc_itoq (int a) ++{ ++ return __gcc_dtoq ((double) a); ++} ++ ++/* Convert unsigned int to long double. */ ++long double ++__gcc_utoq (unsigned int a) ++{ ++ return __gcc_dtoq ((double) a); ++} ++ ++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))); ++extern const UQItype __clz_tab[256]; ++extern void abort (void); ++typedef float DFtype __attribute__ ((mode (DF))); ++ ++union _FP_UNION_D ++{ ++ DFtype flt; ++ struct ++ { ++ ++ unsigned sign:1; ++ unsigned exp:11; ++ unsigned frac1:53 - (((unsigned long) 1 << (53 - 1) % 32) != 0) - 32; ++ unsigned frac0:32; ++ } bits __attribute__ ((packed)); ++}; ++typedef float TFtype __attribute__ ((mode (TF))); ++ ++union _FP_UNION_Q ++{ ++ TFtype flt; ++ struct ++ { ++ ++ unsigned sign:1; ++ unsigned exp:15; ++ unsigned long frac3:113 - (((unsigned long) 1 << (113 - 1) % 32) != ++ 0) - (32 * 3); ++ unsigned long frac2:32; ++ unsigned long frac1:32; ++ unsigned long frac0:32; ++ } bits __attribute__ ((packed)); ++}; ++ ++static double ++fmsub (double a, double b, double c) ++{ ++ int _fex = 0; ++ long A_c __attribute__ ((unused)), A_s, A_e; ++ unsigned long A_f0, A_f1; ++ long B_c __attribute__ ((unused)), B_s, B_e; ++ unsigned long B_f0, B_f1; ++ long C_c __attribute__ ((unused)), C_s, C_e; ++ unsigned long C_f0, C_f1; ++ long X_c __attribute__ ((unused)), X_s, X_e; ++ unsigned long X_f[4]; ++ long Y_c __attribute__ ((unused)), Y_s, Y_e; ++ unsigned long Y_f[4]; ++ long Z_c __attribute__ ((unused)), Z_s, Z_e; ++ unsigned long Z_f[4]; ++ long U_c __attribute__ ((unused)), U_s, U_e; ++ unsigned long U_f[4]; ++ long V_c __attribute__ ((unused)), V_s, V_e; ++ unsigned long V_f[4]; ++ long R_c __attribute__ ((unused)), R_s, R_e; ++ unsigned long R_f0, R_f1; ++ double r; ++ long double u, v, x, y, z; ++ ++/* FP_INIT_ROUNDMODE */ ++ do ++ { ++ } ++ while (0); ++ ++/* FP_UNPACK_RAW_D (A, a) */ ++ do ++ { ++ union _FP_UNION_D _flo; ++ _flo.flt = (a); ++ A_f0 = _flo.bits.frac0; ++ A_f1 = _flo.bits.frac1; ++ A_e = _flo.bits.exp; ++ A_s = _flo.bits.sign; ++ } ++ while (0); ++ ++/* FP_UNPACK_RAW_D (B, b) */ ++ do ++ { ++ union _FP_UNION_D _flo; ++ _flo.flt = (b); ++ B_f0 = _flo.bits.frac0; ++ B_f1 = _flo.bits.frac1; ++ B_e = _flo.bits.exp; ++ B_s = _flo.bits.sign; ++ } ++ while (0); ++ ++/* FP_UNPACK_RAW_D (C, c) */ ++ do ++ { ++ union _FP_UNION_D _flo; ++ _flo.flt = (c); ++ C_f0 = _flo.bits.frac0; ++ C_f1 = _flo.bits.frac1; ++ C_e = _flo.bits.exp; ++ C_s = _flo.bits.sign; ++ } ++ while (0); ++ ++ /* Extend double to quad. */ ++/* FP_EXTEND(Q,D,4,2,X,A) */ ++ do ++ { ++ if (113 < 53 || (32767 - 16383 < 2047 - 1023) || 16383 < 1023 + 53 - 1) ++ abort (); ++ X_s = A_s; ++ do ++ { ++ X_f[0] = A_f0; ++ X_f[1] = A_f1; ++ X_f[2] = X_f[3] = 0; ++ } ++ while (0); ++ if ((((A_e + 1) & 2047) > 1)) ++ { ++ X_e = A_e + 16383 - 1023; ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = ((113 - 53)) / 32; ++ _up = ((113 - 53)) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ X_f[_i] = X_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ X_f[_i] = ++ X_f[_i - _skip] << _up | X_f[_i - _skip - 1] >> _down; ++ X_f[_i--] = X_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ X_f[_i] = 0; ++ } ++ while (0); ++ } ++ else ++ { ++ if (A_e == 0) ++ { ++ if (((A_f1 | A_f0) == 0)) ++ X_e = 0; ++ else ++ { ++ int _lz; ++ _fex |= (0); ++ do ++ { ++ if (A_f1) ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _lz = __builtin_clz (A_f1); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _lz = __builtin_clzl (A_f1); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _lz = __builtin_clzll (A_f1); ++ else ++ abort (); ++ } ++ while (0); ++ else ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _lz = __builtin_clz (A_f0); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _lz = __builtin_clzl (A_f0); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _lz = __builtin_clzll (A_f0); ++ else ++ abort (); ++ } ++ while (0); ++ _lz += 32; ++ } ++ } ++ while (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (_lz + 113 - (2 * 32)) / 32; ++ _up = (_lz + 113 - (2 * 32)) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ X_f[_i] = X_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ X_f[_i] = ++ X_f[_i - _skip] << _up | X_f[_i - _skip - ++ 1] >> _down; ++ X_f[_i--] = X_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ X_f[_i] = 0; ++ } ++ while (0); ++ X_e = (16383 - 1023 + 1 + ((2 * 32) - 53) - _lz); ++ } ++ } ++ else ++ { ++ X_e = 32767; ++ if (!((A_f1 | A_f0) == 0)) ++ { ++ if (!((A_f1) & ((unsigned long) 1 << (53 - 2) % 32))) ++ _fex |= (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = ((113 - 53)) / 32; ++ _up = ((113 - 53)) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ X_f[_i] = X_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ X_f[_i] = ++ X_f[_i - _skip] << _up | X_f[_i - _skip - ++ 1] >> _down; ++ X_f[_i--] = X_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ X_f[_i] = 0; ++ } ++ while (0); ++ } ++ } ++ } ++ } ++ while (0); ++ ++/* FP_EXTEND(Q,D,4,2,Y,B) */ ++ do ++ { ++ if (113 < 53 || (32767 - 16383 < 2047 - 1023) || 16383 < 1023 + 53 - 1) ++ abort (); ++ Y_s = B_s; ++ do ++ { ++ Y_f[0] = B_f0; ++ Y_f[1] = B_f1; ++ Y_f[2] = Y_f[3] = 0; ++ } ++ while (0); ++ if ((((B_e + 1) & 2047) > 1)) ++ { ++ Y_e = B_e + 16383 - 1023; ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = ((113 - 53)) / 32; ++ _up = ((113 - 53)) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ Y_f[_i] = Y_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ Y_f[_i] = ++ Y_f[_i - _skip] << _up | Y_f[_i - _skip - 1] >> _down; ++ Y_f[_i--] = Y_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ Y_f[_i] = 0; ++ } ++ while (0); ++ } ++ else ++ { ++ if (B_e == 0) ++ { ++ if (((B_f1 | B_f0) == 0)) ++ Y_e = 0; ++ else ++ { ++ int _lz; ++ _fex |= (0); ++ do ++ { ++ if (B_f1) ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _lz = __builtin_clz (B_f1); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _lz = __builtin_clzl (B_f1); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _lz = __builtin_clzll (B_f1); ++ else ++ abort (); ++ } ++ while (0); ++ else ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _lz = __builtin_clz (B_f0); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _lz = __builtin_clzl (B_f0); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _lz = __builtin_clzll (B_f0); ++ else ++ abort (); ++ } ++ while (0); ++ _lz += 32; ++ } ++ } ++ while (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (_lz + 113 - (2 * 32)) / 32; ++ _up = (_lz + 113 - (2 * 32)) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ Y_f[_i] = Y_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ Y_f[_i] = ++ Y_f[_i - _skip] << _up | Y_f[_i - _skip - ++ 1] >> _down; ++ Y_f[_i--] = Y_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ Y_f[_i] = 0; ++ } ++ while (0); ++ Y_e = (16383 - 1023 + 1 + ((2 * 32) - 53) - _lz); ++ } ++ } ++ else ++ { ++ Y_e = 32767; ++ if (!((B_f1 | B_f0) == 0)) ++ { ++ if (!((B_f1) & ((unsigned long) 1 << (53 - 2) % 32))) ++ _fex |= (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = ((113 - 53)) / 32; ++ _up = ((113 - 53)) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ Y_f[_i] = Y_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ Y_f[_i] = ++ Y_f[_i - _skip] << _up | Y_f[_i - _skip - ++ 1] >> _down; ++ Y_f[_i--] = Y_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ Y_f[_i] = 0; ++ } ++ while (0); ++ } ++ } ++ } ++ } ++ while (0); ++ ++/* FP_EXTEND(Q,D,4,2,Z,C) */ ++ do ++ { ++ if (113 < 53 || (32767 - 16383 < 2047 - 1023) || 16383 < 1023 + 53 - 1) ++ abort (); ++ Z_s = C_s; ++ do ++ { ++ Z_f[0] = C_f0; ++ Z_f[1] = C_f1; ++ Z_f[2] = Z_f[3] = 0; ++ } ++ while (0); ++ if ((((C_e + 1) & 2047) > 1)) ++ { ++ Z_e = C_e + 16383 - 1023; ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = ((113 - 53)) / 32; ++ _up = ((113 - 53)) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ Z_f[_i] = Z_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ Z_f[_i] = ++ Z_f[_i - _skip] << _up | Z_f[_i - _skip - 1] >> _down; ++ Z_f[_i--] = Z_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ Z_f[_i] = 0; ++ } ++ while (0); ++ } ++ else ++ { ++ if (C_e == 0) ++ { ++ if (((C_f1 | C_f0) == 0)) ++ Z_e = 0; ++ else ++ { ++ int _lz; ++ _fex |= (0); ++ do ++ { ++ if (C_f1) ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _lz = __builtin_clz (C_f1); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _lz = __builtin_clzl (C_f1); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _lz = __builtin_clzll (C_f1); ++ else ++ abort (); ++ } ++ while (0); ++ else ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _lz = __builtin_clz (C_f0); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _lz = __builtin_clzl (C_f0); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _lz = __builtin_clzll (C_f0); ++ else ++ abort (); ++ } ++ while (0); ++ _lz += 32; ++ } ++ } ++ while (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (_lz + 113 - (2 * 32)) / 32; ++ _up = (_lz + 113 - (2 * 32)) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ Z_f[_i] = Z_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ Z_f[_i] = ++ Z_f[_i - _skip] << _up | Z_f[_i - _skip - ++ 1] >> _down; ++ Z_f[_i--] = Z_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ Z_f[_i] = 0; ++ } ++ while (0); ++ Z_e = (16383 - 1023 + 1 + ((2 * 32) - 53) - _lz); ++ } ++ } ++ else ++ { ++ Z_e = 32767; ++ if (!((C_f1 | C_f0) == 0)) ++ { ++ if (!((C_f1) & ((unsigned long) 1 << (53 - 2) % 32))) ++ _fex |= (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = ((113 - 53)) / 32; ++ _up = ((113 - 53)) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ Z_f[_i] = Z_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ Z_f[_i] = ++ Z_f[_i - _skip] << _up | Z_f[_i - _skip - ++ 1] >> _down; ++ Z_f[_i--] = Z_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ Z_f[_i] = 0; ++ } ++ while (0); ++ } ++ } ++ } ++ } ++ while (0); ++ ++/* FP_PACK_RAW_Q(x,X) */ ++ do ++ { ++ union _FP_UNION_Q _flo; ++ _flo.bits.frac0 = X_f[0]; ++ _flo.bits.frac1 = X_f[1]; ++ _flo.bits.frac2 = X_f[2]; ++ _flo.bits.frac3 = X_f[3]; ++ _flo.bits.exp = X_e; ++ _flo.bits.sign = X_s; ++ (x) = _flo.flt; ++ } ++ while (0); ++ ++/* FP_PACK_RAW_Q(y,Y) */ ++ do ++ { ++ union _FP_UNION_Q _flo; ++ _flo.bits.frac0 = Y_f[0]; ++ _flo.bits.frac1 = Y_f[1]; ++ _flo.bits.frac2 = Y_f[2]; ++ _flo.bits.frac3 = Y_f[3]; ++ _flo.bits.exp = Y_e; ++ _flo.bits.sign = Y_s; ++ (y) = _flo.flt; ++ } ++ while (0); ++ ++/* FP_PACK_RAW_Q(z,Z) */ ++ do ++ { ++ union _FP_UNION_Q _flo; ++ _flo.bits.frac0 = Z_f[0]; ++ _flo.bits.frac1 = Z_f[1]; ++ _flo.bits.frac2 = Z_f[2]; ++ _flo.bits.frac3 = Z_f[3]; ++ _flo.bits.exp = Z_e; ++ _flo.bits.sign = Z_s; ++ (z) = _flo.flt; ++ } ++ while (0); ++ ++/* FP_HANDLE_EXCEPTIONS */ ++ do ++ { ++ } ++ while (0); ++ ++ /* Multiply. */ ++/* FP_INIT_ROUNDMODE */ ++ do ++ { ++ } ++ while (0); ++ ++/* FP_UNPACK_Q(X,x) */ ++ do ++ { ++ do ++ { ++ union _FP_UNION_Q _flo; ++ _flo.flt = (x); ++ X_f[0] = _flo.bits.frac0; ++ X_f[1] = _flo.bits.frac1; ++ X_f[2] = _flo.bits.frac2; ++ X_f[3] = _flo.bits.frac3; ++ X_e = _flo.bits.exp; ++ X_s = _flo.bits.sign; ++ } ++ while (0); ++ do ++ { ++ switch (X_e) ++ { ++ default: ++ (X_f[3]) |= ((unsigned long) 1 << (113 - 1) % 32); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _up = (3) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ X_f[_i] = X_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ X_f[_i] = ++ X_f[_i - _skip] << _up | X_f[_i - _skip - ++ 1] >> _down; ++ X_f[_i--] = X_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ X_f[_i] = 0; ++ } ++ while (0); ++ X_e -= 16383; ++ X_c = 0; ++ break; ++ case 0: ++ if (((X_f[0] | X_f[1] | X_f[2] | X_f[3]) == 0)) ++ X_c = 1; ++ else ++ { ++ long _shift; ++ do ++ { ++ if (X_f[3]) ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _shift = __builtin_clz (X_f[3]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _shift = __builtin_clzl (X_f[3]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _shift = __builtin_clzll (X_f[3]); ++ else ++ abort (); ++ } ++ while (0); ++ } ++ else if (X_f[2]) ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _shift = __builtin_clz (X_f[2]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _shift = __builtin_clzl (X_f[2]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _shift = __builtin_clzll (X_f[2]); ++ else ++ abort (); ++ } ++ while (0); ++ _shift += 32; ++ } ++ else if (X_f[1]) ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _shift = __builtin_clz (X_f[1]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _shift = __builtin_clzl (X_f[1]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _shift = __builtin_clzll (X_f[1]); ++ else ++ abort (); ++ } ++ while (0); ++ _shift += 32 * 2; ++ } ++ else ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _shift = __builtin_clz (X_f[0]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _shift = __builtin_clzl (X_f[0]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _shift = __builtin_clzll (X_f[0]); ++ else ++ abort (); ++ } ++ while (0); ++ _shift += 32 * 3; ++ } ++ } ++ while (0); ++ _shift -= ((4 * 32) - 113); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = ((_shift + 3)) / 32; ++ _up = ((_shift + 3)) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ X_f[_i] = X_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ X_f[_i] = ++ X_f[_i - _skip] << _up | X_f[_i - _skip - ++ 1] >> _down; ++ X_f[_i--] = X_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ X_f[_i] = 0; ++ } ++ while (0); ++ X_e -= 16383 - 1 + _shift; ++ X_c = 0; ++ _fex |= (0); ++ } ++ break; ++ case 32767: ++ if (((X_f[0] | X_f[1] | X_f[2] | X_f[3]) == 0)) ++ X_c = 2; ++ else ++ { ++ X_c = 3; ++ if (!((X_f[3]) & ((unsigned long) 1 << (113 - 2) % 32))) ++ _fex |= (0); ++ } break; ++ } ++ } ++ while (0); ++ } ++ while (0); ++ ++/* FP_UNPACK_Q(Y,y) */ ++ do ++ { ++ do ++ { ++ union _FP_UNION_Q _flo; ++ _flo.flt = (y); ++ Y_f[0] = _flo.bits.frac0; ++ Y_f[1] = _flo.bits.frac1; ++ Y_f[2] = _flo.bits.frac2; ++ Y_f[3] = _flo.bits.frac3; ++ Y_e = _flo.bits.exp; ++ Y_s = _flo.bits.sign; ++ } ++ while (0); ++ do ++ { ++ switch (Y_e) ++ { ++ default: ++ (Y_f[3]) |= ((unsigned long) 1 << (113 - 1) % 32); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _up = (3) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ Y_f[_i] = Y_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ Y_f[_i] = ++ Y_f[_i - _skip] << _up | Y_f[_i - _skip - ++ 1] >> _down; ++ Y_f[_i--] = Y_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ Y_f[_i] = 0; ++ } ++ while (0); ++ Y_e -= 16383; ++ Y_c = 0; ++ break; ++ case 0: ++ if (((Y_f[0] | Y_f[1] | Y_f[2] | Y_f[3]) == 0)) ++ Y_c = 1; ++ else ++ { ++ long _shift; ++ do ++ { ++ if (Y_f[3]) ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _shift = __builtin_clz (Y_f[3]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _shift = __builtin_clzl (Y_f[3]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _shift = __builtin_clzll (Y_f[3]); ++ else ++ abort (); ++ } ++ while (0); ++ } ++ else if (Y_f[2]) ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _shift = __builtin_clz (Y_f[2]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _shift = __builtin_clzl (Y_f[2]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _shift = __builtin_clzll (Y_f[2]); ++ else ++ abort (); ++ } ++ while (0); ++ _shift += 32; ++ } ++ else if (Y_f[1]) ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _shift = __builtin_clz (Y_f[1]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _shift = __builtin_clzl (Y_f[1]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _shift = __builtin_clzll (Y_f[1]); ++ else ++ abort (); ++ } ++ while (0); ++ _shift += 32 * 2; ++ } ++ else ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ _shift = __builtin_clz (Y_f[0]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ _shift = __builtin_clzl (Y_f[0]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ _shift = __builtin_clzll (Y_f[0]); ++ else ++ abort (); ++ } ++ while (0); ++ _shift += 32 * 3; ++ } ++ } ++ while (0); ++ _shift -= ((4 * 32) - 113); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = ((_shift + 3)) / 32; ++ _up = ((_shift + 3)) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ Y_f[_i] = Y_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ Y_f[_i] = ++ Y_f[_i - _skip] << _up | Y_f[_i - _skip - ++ 1] >> _down; ++ Y_f[_i--] = Y_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ Y_f[_i] = 0; ++ } ++ while (0); ++ Y_e -= 16383 - 1 + _shift; ++ Y_c = 0; ++ _fex |= (0); ++ } ++ break; ++ case 32767: ++ if (((Y_f[0] | Y_f[1] | Y_f[2] | Y_f[3]) == 0)) ++ Y_c = 2; ++ else ++ { ++ Y_c = 3; ++ if (!((Y_f[3]) & ((unsigned long) 1 << (113 - 2) % 32))) ++ _fex |= (0); ++ } break; ++ } ++ } ++ while (0); ++ } ++ while (0); ++ ++/* FP_MUL_Q(U,X,Y) */ ++ do ++ { ++ U_s = X_s ^ Y_s; ++ switch ((((X_c) << 2) | (Y_c))) ++ { ++ case (((0) << 2) | (0)): ++ U_c = 0; ++ U_e = X_e + Y_e + 1; ++ do ++ { ++ unsigned long _z_f[8]; ++ unsigned long _b_f0, _b_f1; ++ unsigned long _c_f0, _c_f1; ++ unsigned long _d_f0, _d_f1; ++ unsigned long _e_f0, _e_f1; ++ unsigned long _f_f0, _f_f1; ++ do ++ { ++ USItype __m0 = (X_f[0]), __m1 = (Y_f[0]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" ((_z_f[1])):"%r" (X_f[0]), ++ "r" (Y_f ++ [0])); ++ ((_z_f[0])) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[0]), __m1 = (Y_f[1]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_b_f1):"%r" (X_f[0]), ++ "r" (Y_f ++ [1])); ++ (_b_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[1]), __m1 = (Y_f[0]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_c_f1):"%r" (X_f[1]), ++ "r" (Y_f ++ [0])); ++ (_c_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[1]), __m1 = (Y_f[1]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_d_f1):"%r" (X_f[1]), ++ "r" (Y_f ++ [1])); ++ (_d_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[0]), __m1 = (Y_f[2]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_e_f1):"%r" (X_f[0]), ++ "r" (Y_f ++ [2])); ++ (_e_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[2]), __m1 = (Y_f[0]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_f_f1):"%r" (X_f[2]), ++ "r" (Y_f ++ [0])); ++ (_f_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[1]) = _b_f0 + (_z_f[1]); ++ _c1 = (_z_f[1]) < _b_f0; ++ (_z_f[2]) = _b_f1 + 0; ++ _c2 = (_z_f[2]) < _b_f1; ++ (_z_f[2]) += _c1; ++ _c2 |= (_z_f[2]) < _c1; ++ (_z_f[3]) = 0 + 0 + _c2; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[1]) = _c_f0 + (_z_f[1]); ++ _c1 = (_z_f[1]) < _c_f0; ++ (_z_f[2]) = _c_f1 + (_z_f[2]); ++ _c2 = (_z_f[2]) < _c_f1; ++ (_z_f[2]) += _c1; ++ _c2 |= (_z_f[2]) < _c1; ++ (_z_f[3]) = 0 + (_z_f[3]) + _c2; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[2]) = _d_f0 + (_z_f[2]); ++ _c1 = (_z_f[2]) < _d_f0; ++ (_z_f[3]) = _d_f1 + (_z_f[3]); ++ _c2 = (_z_f[3]) < _d_f1; ++ (_z_f[3]) += _c1; ++ _c2 |= (_z_f[3]) < _c1; ++ (_z_f[4]) = 0 + 0 + _c2; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[2]) = _e_f0 + (_z_f[2]); ++ _c1 = (_z_f[2]) < _e_f0; ++ (_z_f[3]) = _e_f1 + (_z_f[3]); ++ _c2 = (_z_f[3]) < _e_f1; ++ (_z_f[3]) += _c1; ++ _c2 |= (_z_f[3]) < _c1; ++ (_z_f[4]) = 0 + (_z_f[4]) + _c2; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[2]) = _f_f0 + (_z_f[2]); ++ _c1 = (_z_f[2]) < _f_f0; ++ (_z_f[3]) = _f_f1 + (_z_f[3]); ++ _c2 = (_z_f[3]) < _f_f1; ++ (_z_f[3]) += _c1; ++ _c2 |= (_z_f[3]) < _c1; ++ (_z_f[4]) = 0 + (_z_f[4]) + _c2; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[0]), __m1 = (Y_f[3]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_b_f1):"%r" (X_f[0]), ++ "r" (Y_f ++ [3])); ++ (_b_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[3]), __m1 = (Y_f[0]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_c_f1):"%r" (X_f[3]), ++ "r" (Y_f ++ [0])); ++ (_c_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[1]), __m1 = (Y_f[2]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_d_f1):"%r" (X_f[1]), ++ "r" (Y_f ++ [2])); ++ (_d_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[2]), __m1 = (Y_f[1]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_e_f1):"%r" (X_f[2]), ++ "r" (Y_f ++ [1])); ++ (_e_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[3]) = _b_f0 + (_z_f[3]); ++ _c1 = (_z_f[3]) < _b_f0; ++ (_z_f[4]) = _b_f1 + (_z_f[4]); ++ _c2 = (_z_f[4]) < _b_f1; ++ (_z_f[4]) += _c1; ++ _c2 |= (_z_f[4]) < _c1; ++ (_z_f[5]) = 0 + 0 + _c2; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[3]) = _c_f0 + (_z_f[3]); ++ _c1 = (_z_f[3]) < _c_f0; ++ (_z_f[4]) = _c_f1 + (_z_f[4]); ++ _c2 = (_z_f[4]) < _c_f1; ++ (_z_f[4]) += _c1; ++ _c2 |= (_z_f[4]) < _c1; ++ (_z_f[5]) = 0 + (_z_f[5]) + _c2; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[3]) = _d_f0 + (_z_f[3]); ++ _c1 = (_z_f[3]) < _d_f0; ++ (_z_f[4]) = _d_f1 + (_z_f[4]); ++ _c2 = (_z_f[4]) < _d_f1; ++ (_z_f[4]) += _c1; ++ _c2 |= (_z_f[4]) < _c1; ++ (_z_f[5]) = 0 + (_z_f[5]) + _c2; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[3]) = _e_f0 + (_z_f[3]); ++ _c1 = (_z_f[3]) < _e_f0; ++ (_z_f[4]) = _e_f1 + (_z_f[4]); ++ _c2 = (_z_f[4]) < _e_f1; ++ (_z_f[4]) += _c1; ++ _c2 |= (_z_f[4]) < _c1; ++ (_z_f[5]) = 0 + (_z_f[5]) + _c2; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[2]), __m1 = (Y_f[2]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_b_f1):"%r" (X_f[2]), ++ "r" (Y_f ++ [2])); ++ (_b_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[1]), __m1 = (Y_f[3]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_c_f1):"%r" (X_f[1]), ++ "r" (Y_f ++ [3])); ++ (_c_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[3]), __m1 = (Y_f[1]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_d_f1):"%r" (X_f[3]), ++ "r" (Y_f ++ [1])); ++ (_d_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[2]), __m1 = (Y_f[3]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_e_f1):"%r" (X_f[2]), ++ "r" (Y_f ++ [3])); ++ (_e_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[3]), __m1 = (Y_f[2]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_f_f1):"%r" (X_f[3]), ++ "r" (Y_f ++ [2])); ++ (_f_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[4]) = _b_f0 + (_z_f[4]); ++ _c1 = (_z_f[4]) < _b_f0; ++ (_z_f[5]) = _b_f1 + (_z_f[5]); ++ _c2 = (_z_f[5]) < _b_f1; ++ (_z_f[5]) += _c1; ++ _c2 |= (_z_f[5]) < _c1; ++ (_z_f[6]) = 0 + 0 + _c2; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[4]) = _c_f0 + (_z_f[4]); ++ _c1 = (_z_f[4]) < _c_f0; ++ (_z_f[5]) = _c_f1 + (_z_f[5]); ++ _c2 = (_z_f[5]) < _c_f1; ++ (_z_f[5]) += _c1; ++ _c2 |= (_z_f[5]) < _c1; ++ (_z_f[6]) = 0 + (_z_f[6]) + _c2; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[4]) = _d_f0 + (_z_f[4]); ++ _c1 = (_z_f[4]) < _d_f0; ++ (_z_f[5]) = _d_f1 + (_z_f[5]); ++ _c2 = (_z_f[5]) < _d_f1; ++ (_z_f[5]) += _c1; ++ _c2 |= (_z_f[5]) < _c1; ++ (_z_f[6]) = 0 + (_z_f[6]) + _c2; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[5]) = _e_f0 + (_z_f[5]); ++ _c1 = (_z_f[5]) < _e_f0; ++ (_z_f[6]) = _e_f1 + (_z_f[6]); ++ _c2 = (_z_f[6]) < _e_f1; ++ (_z_f[6]) += _c1; ++ _c2 |= (_z_f[6]) < _c1; ++ (_z_f[7]) = 0 + 0 + _c2; ++ } ++ while (0); ++ do ++ { ++ unsigned long _c1, _c2; ++ (_z_f[5]) = _f_f0 + (_z_f[5]); ++ _c1 = (_z_f[5]) < _f_f0; ++ (_z_f[6]) = _f_f1 + (_z_f[6]); ++ _c2 = (_z_f[6]) < _f_f1; ++ (_z_f[6]) += _c1; ++ _c2 |= (_z_f[6]) < _c1; ++ (_z_f[7]) = 0 + (_z_f[7]) + _c2; ++ } ++ while (0); ++ do ++ { ++ USItype __m0 = (X_f[3]), __m1 = (Y_f[3]); ++ __asm__ ("mulhwu %0,%1,%2": "=r" (_b_f1):"%r" (X_f[3]), ++ "r" (Y_f ++ [3])); ++ (_b_f0) = __m0 * __m1; ++ } ++ while (0); ++ do ++ { ++ if (__builtin_constant_p ((_z_f[7])) && ((_z_f[7])) == 0) ++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2": "=r" ((_z_f[7])), "=&r" ((_z_f[6])):"r" (_b_f1), "%r" (_b_f0), ++ "rI" ((_z_f ++ [6]))); ++ else if (__builtin_constant_p ((_z_f[7])) ++ && ((_z_f[7])) == ~(USItype) 0) ++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2": "=r" ((_z_f[7])), "=&r" ((_z_f[6])):"r" (_b_f1), "%r" (_b_f0), ++ "rI" ((_z_f ++ [6]))); ++ else ++ __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3": "=r" ((_z_f[7])), "=&r" ((_z_f[6])):"%r" (_b_f1), "r" ((_z_f[7])), "%r" (_b_f0), ++ "rI" ((_z_f ++ [6]))); ++ } ++ while (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ unsigned long _s; ++ _skip = ((3 + 113) - 1) / 32; ++ _down = ((3 + 113) - 1) % 32; ++ _up = 32 - _down; ++ for (_s = _i = 0; _i < _skip; ++_i) ++ _s |= _z_f[_i]; ++ if (!_down) ++ for (_i = 0; _i <= 7 - _skip; ++_i) ++ _z_f[_i] = _z_f[_i + _skip]; ++ else ++ { ++ _s |= _z_f[_i] << _up; ++ for (_i = 0; _i < 7 - _skip; ++_i) ++ _z_f[_i] = ++ _z_f[_i + _skip] >> _down | _z_f[_i + _skip + ++ 1] << _up; ++ _z_f[_i++] = _z_f[7] >> _down; ++ } ++ for (; _i < 8; ++_i) ++ _z_f[_i] = 0; ++ _z_f[0] |= (_s != 0); ++ } ++ while (0); ++ (U_f[3] = (_z_f[3]), U_f[2] = (_z_f[2]), U_f[1] = ++ (_z_f[1]), U_f[0] = (_z_f[0])); ++ } ++ while (0); ++ if (((U_f[3]) & ((unsigned long) 1 << ((3 + 113) % 32)))) ++ do ++ { ++ int _sticky; ++ do ++ { ++ long _up, _down, _skip, _i; ++ unsigned long _s; ++ _skip = (1) / 32; ++ _down = (1) % 32; ++ _up = 32 - _down; ++ for (_s = _i = 0; _i < _skip; ++_i) ++ _s |= U_f[_i]; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ U_f[_i] = U_f[_i + _skip]; ++ else ++ { ++ _s |= U_f[_i] << _up; ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ U_f[_i] = ++ U_f[_i + _skip] >> _down | U_f[_i + _skip + ++ 1] << _up; ++ U_f[_i++] = U_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ U_f[_i] = 0; ++ _sticky = (_s != 0); ++ } ++ while (0); ++ U_f[0] |= _sticky; ++ } ++ while (0); ++ else ++ U_e--; ++ break; ++ case (((3) << 2) | (3)): ++ do ++ { ++ if (((X_f[3]) & ((unsigned long) 1 << (113 - 2) % 32)) ++ && !((Y_f[3]) & ((unsigned long) 1 << (113 - 2) % 32))) ++ { ++ U_s = Y_s; ++ (U_f[0] = Y_f[0], U_f[1] = Y_f[1], U_f[2] = Y_f[2], U_f[3] = ++ Y_f[3]); ++ } ++ else ++ { ++ U_s = X_s; ++ (U_f[0] = X_f[0], U_f[1] = X_f[1], U_f[2] = X_f[2], U_f[3] = ++ X_f[3]); ++ } ++ U_c = 3; ++ } ++ while (0); ++ break; ++ case (((3) << 2) | (0)): ++ case (((3) << 2) | (2)): ++ case (((3) << 2) | (1)): ++ U_s = X_s; ++ case (((2) << 2) | (2)): ++ case (((2) << 2) | (0)): ++ case (((1) << 2) | (0)): ++ case (((1) << 2) | (1)): ++ (U_f[0] = X_f[0], U_f[1] = X_f[1], U_f[2] = X_f[2], U_f[3] = ++ X_f[3]); ++ U_c = X_c; ++ break; ++ case (((0) << 2) | (3)): ++ case (((2) << 2) | (3)): ++ case (((1) << 2) | (3)): ++ U_s = Y_s; ++ case (((0) << 2) | (2)): ++ case (((0) << 2) | (1)): ++ (U_f[0] = Y_f[0], U_f[1] = Y_f[1], U_f[2] = Y_f[2], U_f[3] = ++ Y_f[3]); ++ U_c = Y_c; ++ break; ++ case (((2) << 2) | (1)): ++ case (((1) << 2) | (2)): ++ U_s = 0; ++ U_c = 3; ++ (U_f[3] = ++ ((((unsigned long) 1 << (113 - 2) % 32) << 1) - 1), U_f[2] = ++ -1, U_f[1] = -1, U_f[0] = -1); ++ _fex |= (0); ++ break; ++ default: ++ abort (); ++ } ++ } ++ while (0); ++ ++/* FP_PACK_Q(u,U) */ ++ do ++ { ++ do ++ { ++ switch (U_c) ++ { ++ case 0: ++ U_e += 16383; ++ if (U_e > 0) ++ { ++ do ++ { ++ if ((U_f[0]) & 7) ++ _fex |= (0); ++ switch (0) ++ { ++ case 0: ++ do ++ { ++ if (((U_f[0]) & 15) != ((unsigned long) 1 << 2)) ++ do ++ { ++ unsigned long _t; ++ _t = ++ ((U_f[0] += ++ ((unsigned long) 1 << 2)) < ++ ((unsigned long) 1 << 2)); ++ U_f[1] += _t; ++ _t = (U_f[1] < _t); ++ U_f[2] += _t; ++ _t = (U_f[2] < _t); ++ U_f[3] += _t; ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ case 1: ++ (void) 0; ++ break; ++ case 2: ++ do ++ { ++ if (!U_s && ((U_f[0]) & 7)) ++ do ++ { ++ unsigned long _t; ++ _t = ++ ((U_f[0] += ++ ((unsigned long) 1 << 3)) < ++ ((unsigned long) 1 << 3)); ++ U_f[1] += _t; ++ _t = (U_f[1] < _t); ++ U_f[2] += _t; ++ _t = (U_f[2] < _t); ++ U_f[3] += _t; ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ case 3: ++ do ++ { ++ if (U_s && ((U_f[0]) & 7)) ++ do ++ { ++ unsigned long _t; ++ _t = ++ ((U_f[0] += ++ ((unsigned long) 1 << 3)) < ++ ((unsigned long) 1 << 3)); ++ U_f[1] += _t; ++ _t = (U_f[1] < _t); ++ U_f[2] += _t; ++ _t = (U_f[2] < _t); ++ U_f[3] += _t; ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ } ++ } ++ while (0); ++ if (((U_f[3]) & ((unsigned long) 1 << ((3 + 113) % 32)))) ++ { ++ ((U_f[3]) &= ~((unsigned long) 1 << ((3 + 113) % 32))); ++ U_e++; ++ } ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _down = (3) % 32; ++ _up = 32 - _down; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ U_f[_i] = U_f[_i + _skip]; ++ else ++ { ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ U_f[_i] = ++ U_f[_i + _skip] >> _down | U_f[_i + _skip + ++ 1] << _up; ++ U_f[_i++] = U_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ U_f[_i] = 0; ++ } ++ while (0); ++ if (U_e >= 32767) ++ { ++ switch (0) ++ { ++ case 0: ++ U_c = 2; ++ break; ++ case 2: ++ if (!U_s) ++ U_c = 2; ++ break; ++ case 3: ++ if (U_s) ++ U_c = 2; ++ break; ++ } ++ if (U_c == 2) ++ { ++ U_e = 32767; ++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 0); ++ } ++ else ++ { ++ U_e = 32767 - 1; ++ (U_f[3] = (~(signed long) 0), U_f[2] = ++ (~(signed long) 0), U_f[1] = ++ (~(signed long) 0), U_f[0] = (~(signed long) 0)); ++ } _fex |= (0); ++ _fex |= (0); ++ } ++ } ++ else ++ { ++ U_e = -U_e + 1; ++ if (U_e <= (3 + 113)) ++ { ++ do ++ { ++ int _sticky; ++ do ++ { ++ long _up, _down, _skip, _i; ++ unsigned long _s; ++ _skip = (U_e) / 32; ++ _down = (U_e) % 32; ++ _up = 32 - _down; ++ for (_s = _i = 0; _i < _skip; ++_i) ++ _s |= U_f[_i]; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ U_f[_i] = U_f[_i + _skip]; ++ else ++ { ++ _s |= U_f[_i] << _up; ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ U_f[_i] = ++ U_f[_i + _skip] >> _down | U_f[_i + ++ _skip + ++ 1] << ++ _up; ++ U_f[_i++] = U_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ U_f[_i] = 0; ++ _sticky = (_s != 0); ++ } ++ while (0); ++ U_f[0] |= _sticky; ++ } ++ while (0); ++ do ++ { ++ if ((U_f[0]) & 7) ++ _fex |= (0); ++ switch (0) ++ { ++ case 0: ++ do ++ { ++ if (((U_f[0]) & 15) != ++ ((unsigned long) 1 << 2)) ++ do ++ { ++ unsigned long _t; ++ _t = ++ ((U_f[0] += ++ ((unsigned long) 1 << 2)) < ++ ((unsigned long) 1 << 2)); ++ U_f[1] += _t; ++ _t = (U_f[1] < _t); ++ U_f[2] += _t; ++ _t = (U_f[2] < _t); ++ U_f[3] += _t; ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ case 1: ++ (void) 0; ++ break; ++ case 2: ++ do ++ { ++ if (!U_s && ((U_f[0]) & 7)) ++ do ++ { ++ unsigned long _t; ++ _t = ++ ((U_f[0] += ++ ((unsigned long) 1 << 3)) < ++ ((unsigned long) 1 << 3)); ++ U_f[1] += _t; ++ _t = (U_f[1] < _t); ++ U_f[2] += _t; ++ _t = (U_f[2] < _t); ++ U_f[3] += _t; ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ case 3: ++ do ++ { ++ if (U_s && ((U_f[0]) & 7)) ++ do ++ { ++ unsigned long _t; ++ _t = ++ ((U_f[0] += ++ ((unsigned long) 1 << 3)) < ++ ((unsigned long) 1 << 3)); ++ U_f[1] += _t; ++ _t = (U_f[1] < _t); ++ U_f[2] += _t; ++ _t = (U_f[2] < _t); ++ U_f[3] += _t; ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ } ++ } ++ while (0); ++ if ((U_f[3]) & ++ (((unsigned long) 1 << ((3 + 113) % 32)) >> 1)) ++ { ++ U_e = 1; ++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 0); ++ } ++ else ++ { ++ U_e = 0; ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _down = (3) % 32; ++ _up = 32 - _down; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ U_f[_i] = U_f[_i + _skip]; ++ else ++ { ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ U_f[_i] = ++ U_f[_i + _skip] >> _down | U_f[_i + ++ _skip + ++ 1] << ++ _up; ++ U_f[_i++] = U_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ U_f[_i] = 0; ++ } ++ while (0); ++ _fex |= (0); ++ } ++ } ++ else ++ { ++ U_e = 0; ++ if (!((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0)) ++ { ++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 1); ++ do ++ { ++ if ((U_f[0]) & 7) ++ _fex |= (0); ++ switch (0) ++ { ++ case 0: ++ do ++ { ++ if (((U_f[0]) & 15) != ++ ((unsigned long) 1 << 2)) ++ do ++ { ++ unsigned long _t; ++ _t = ++ ((U_f[0] += ++ ((unsigned long) 1 << 2)) < ++ ((unsigned long) 1 << 2)); ++ U_f[1] += _t; ++ _t = (U_f[1] < _t); ++ U_f[2] += _t; ++ _t = (U_f[2] < _t); ++ U_f[3] += _t; ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ case 1: ++ (void) 0; ++ break; ++ case 2: ++ do ++ { ++ if (!U_s && ((U_f[0]) & 7)) ++ do ++ { ++ unsigned long _t; ++ _t = ++ ((U_f[0] += ++ ((unsigned long) 1 << 3)) < ++ ((unsigned long) 1 << 3)); ++ U_f[1] += _t; ++ _t = (U_f[1] < _t); ++ U_f[2] += _t; ++ _t = (U_f[2] < _t); ++ U_f[3] += _t; ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ case 3: ++ do ++ { ++ if (U_s && ((U_f[0]) & 7)) ++ do ++ { ++ unsigned long _t; ++ _t = ++ ((U_f[0] += ++ ((unsigned long) 1 << 3)) < ++ ((unsigned long) 1 << 3)); ++ U_f[1] += _t; ++ _t = (U_f[1] < _t); ++ U_f[2] += _t; ++ _t = (U_f[2] < _t); ++ U_f[3] += _t; ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ } ++ } ++ while (0); ++ (U_f[0]) >>= (3); ++ } ++ _fex |= (0); ++ } ++ } ++ break; ++ case 1: ++ U_e = 0; ++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 0); ++ break; ++ case 2: ++ U_e = 32767; ++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 0); ++ break; ++ case 3: ++ U_e = 32767; ++ if (!1) ++ { ++ (U_f[3] = ++ ((((unsigned long) 1 << (113 - 2) % 32) << 1) - 1), ++ U_f[2] = -1, U_f[1] = -1, U_f[0] = -1); ++ U_s = 0; ++ } ++ else ++ (U_f[3]) |= ((unsigned long) 1 << (113 - 2) % 32); ++ break; ++ } ++ } ++ while (0); ++ do ++ { ++ union _FP_UNION_Q _flo; ++ _flo.bits.frac0 = U_f[0]; ++ _flo.bits.frac1 = U_f[1]; ++ _flo.bits.frac2 = U_f[2]; ++ _flo.bits.frac3 = U_f[3]; ++ _flo.bits.exp = U_e; ++ _flo.bits.sign = U_s; ++ (u) = _flo.flt; ++ } ++ while (0); ++ } ++ while (0); ++ ++/* FP_HANDLE_EXCEPTIONS */ ++ do ++ { ++ } ++ while (0); ++ ++ /* Subtract. */ ++/* FP_INIT_ROUNDMODE */ ++ do ++ { ++ } ++ while (0); ++ ++/* FP_UNPACK_SEMIRAW_Q(U,u) */ ++ do ++ { ++ do ++ { ++ union _FP_UNION_Q _flo; ++ _flo.flt = (u); ++ U_f[0] = _flo.bits.frac0; ++ U_f[1] = _flo.bits.frac1; ++ U_f[2] = _flo.bits.frac2; ++ U_f[3] = _flo.bits.frac3; ++ U_e = _flo.bits.exp; ++ U_s = _flo.bits.sign; ++ } ++ while (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _up = (3) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ U_f[_i] = U_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ U_f[_i] = ++ U_f[_i - _skip] << _up | U_f[_i - _skip - 1] >> _down; ++ U_f[_i--] = U_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ U_f[_i] = 0; ++ } ++ while (0); ++ } ++ while (0); ++ ++/* FP_UNPACK_SEMIRAW_Q(Z,z) */ ++ do ++ { ++ do ++ { ++ union _FP_UNION_Q _flo; ++ _flo.flt = (z); ++ Z_f[0] = _flo.bits.frac0; ++ Z_f[1] = _flo.bits.frac1; ++ Z_f[2] = _flo.bits.frac2; ++ Z_f[3] = _flo.bits.frac3; ++ Z_e = _flo.bits.exp; ++ Z_s = _flo.bits.sign; ++ } ++ while (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _up = (3) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ Z_f[_i] = Z_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ Z_f[_i] = ++ Z_f[_i - _skip] << _up | Z_f[_i - _skip - 1] >> _down; ++ Z_f[_i--] = Z_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ Z_f[_i] = 0; ++ } ++ while (0); ++ } ++ while (0); ++ ++/* FP_SUB_Q(V,U,Z) */ ++ do ++ { ++ if (!(Z_e == 32767 && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0))) ++ Z_s ^= 1; ++ do ++ { ++ if (U_s == Z_s) ++ { ++ V_s = U_s; ++ int ediff = U_e - Z_e; ++ if (ediff > 0) ++ { ++ V_e = U_e; ++ if (Z_e == 0) ++ { ++ if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)) ++ { ++ do ++ { ++ if (U_e == 32767 ++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == ++ 0) ++ && !((U_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) % ++ 32))) ++ _fex |= (0); ++ } ++ while (0); ++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] = ++ U_f[2], V_f[3] = U_f[3]); ++ goto add_done; ++ } ++ else ++ { ++ _fex |= (0); ++ ediff--; ++ if (ediff == 0) ++ { ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = U_f[0] + Z_f[0]; ++ _c1 = V_f[0] < U_f[0]; ++ V_f[1] = U_f[1] + Z_f[1]; ++ _c2 = V_f[1] < U_f[1]; ++ V_f[1] += _c1; ++ _c2 |= V_f[1] < _c1; ++ V_f[2] = U_f[2] + Z_f[2]; ++ _c3 = V_f[2] < U_f[2]; ++ V_f[2] += _c2; ++ _c3 |= V_f[2] < _c2; ++ V_f[3] = U_f[3] + Z_f[3] + _c3; ++ } ++ while (0); ++ goto add3; ++ } ++ if (U_e == 32767) ++ { ++ do ++ { ++ if (U_e == 32767 ++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) ++ == 0) ++ && !((U_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) ++ % 32))) ++ _fex |= (0); ++ } ++ while (0); ++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] = ++ U_f[2], V_f[3] = U_f[3]); ++ goto add_done; ++ } ++ goto add1; ++ } ++ } ++ else if (U_e == 32767) ++ { ++ do ++ { ++ if (U_e == 32767 ++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0) ++ && !((U_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) % 32))) ++ _fex |= (0); ++ } ++ while (0); ++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] = ++ U_f[2], V_f[3] = U_f[3]); ++ goto add_done; ++ } ++ (Z_f[3]) |= ((unsigned long) 1 << (113 - 1 + 3) % 32); ++ add1:if (ediff <= (3 + 113)) ++ do ++ { ++ int _sticky; ++ do ++ { ++ long _up, _down, _skip, _i; ++ unsigned long _s; ++ _skip = (ediff) / 32; ++ _down = (ediff) % 32; ++ _up = 32 - _down; ++ for (_s = _i = 0; _i < _skip; ++_i) ++ _s |= Z_f[_i]; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ Z_f[_i] = Z_f[_i + _skip]; ++ else ++ { ++ _s |= Z_f[_i] << _up; ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ Z_f[_i] = ++ Z_f[_i + _skip] >> _down | Z_f[_i + ++ _skip + ++ 1] << _up; ++ Z_f[_i++] = Z_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ Z_f[_i] = 0; ++ _sticky = (_s != 0); ++ } ++ while (0); ++ Z_f[0] |= _sticky; ++ } ++ while (0); ++ else if (!((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)) ++ (Z_f[3] = 0, Z_f[2] = 0, Z_f[1] = 0, Z_f[0] = 1); ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = U_f[0] + Z_f[0]; ++ _c1 = V_f[0] < U_f[0]; ++ V_f[1] = U_f[1] + Z_f[1]; ++ _c2 = V_f[1] < U_f[1]; ++ V_f[1] += _c1; ++ _c2 |= V_f[1] < _c1; ++ V_f[2] = U_f[2] + Z_f[2]; ++ _c3 = V_f[2] < U_f[2]; ++ V_f[2] += _c2; ++ _c3 |= V_f[2] < _c2; ++ V_f[3] = U_f[3] + Z_f[3] + _c3; ++ } ++ while (0); ++ } ++ else if (ediff < 0) ++ { ++ ediff = -ediff; ++ V_e = Z_e; ++ if (U_e == 0) ++ { ++ if (((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0)) ++ { ++ do ++ { ++ if (Z_e == 32767 ++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == ++ 0) ++ && !((Z_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) % ++ 32))) ++ _fex |= (0); ++ } ++ while (0); ++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] = ++ Z_f[2], V_f[3] = Z_f[3]); ++ goto add_done; ++ } ++ else ++ { ++ _fex |= (0); ++ ediff--; ++ if (ediff == 0) ++ { ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = Z_f[0] + U_f[0]; ++ _c1 = V_f[0] < Z_f[0]; ++ V_f[1] = Z_f[1] + U_f[1]; ++ _c2 = V_f[1] < Z_f[1]; ++ V_f[1] += _c1; ++ _c2 |= V_f[1] < _c1; ++ V_f[2] = Z_f[2] + U_f[2]; ++ _c3 = V_f[2] < Z_f[2]; ++ V_f[2] += _c2; ++ _c3 |= V_f[2] < _c2; ++ V_f[3] = Z_f[3] + U_f[3] + _c3; ++ } ++ while (0); ++ goto add3; ++ } ++ if (Z_e == 32767) ++ { ++ do ++ { ++ if (Z_e == 32767 ++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) ++ == 0) ++ && !((Z_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) ++ % 32))) ++ _fex |= (0); ++ } ++ while (0); ++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] = ++ Z_f[2], V_f[3] = Z_f[3]); ++ goto add_done; ++ } ++ goto add2; ++ } ++ } ++ else if (Z_e == 32767) ++ { ++ do ++ { ++ if (Z_e == 32767 ++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0) ++ && !((Z_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) % 32))) ++ _fex |= (0); ++ } ++ while (0); ++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] = ++ Z_f[2], V_f[3] = Z_f[3]); ++ goto add_done; ++ } ++ (U_f[3]) |= ((unsigned long) 1 << (113 - 1 + 3) % 32); ++ add2:if (ediff <= (3 + 113)) ++ do ++ { ++ int _sticky; ++ do ++ { ++ long _up, _down, _skip, _i; ++ unsigned long _s; ++ _skip = (ediff) / 32; ++ _down = (ediff) % 32; ++ _up = 32 - _down; ++ for (_s = _i = 0; _i < _skip; ++_i) ++ _s |= U_f[_i]; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ U_f[_i] = U_f[_i + _skip]; ++ else ++ { ++ _s |= U_f[_i] << _up; ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ U_f[_i] = ++ U_f[_i + _skip] >> _down | U_f[_i + ++ _skip + ++ 1] << _up; ++ U_f[_i++] = U_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ U_f[_i] = 0; ++ _sticky = (_s != 0); ++ } ++ while (0); ++ U_f[0] |= _sticky; ++ } ++ while (0); ++ else if (!((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0)) ++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 1); ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = Z_f[0] + U_f[0]; ++ _c1 = V_f[0] < Z_f[0]; ++ V_f[1] = Z_f[1] + U_f[1]; ++ _c2 = V_f[1] < Z_f[1]; ++ V_f[1] += _c1; ++ _c2 |= V_f[1] < _c1; ++ V_f[2] = Z_f[2] + U_f[2]; ++ _c3 = V_f[2] < Z_f[2]; ++ V_f[2] += _c2; ++ _c3 |= V_f[2] < _c2; ++ V_f[3] = Z_f[3] + U_f[3] + _c3; ++ } ++ while (0); ++ } ++ else ++ { ++ if (!(((U_e + 1) & 32767) > 1)) ++ { ++ if (U_e == 0) ++ { ++ V_e = 0; ++ if (((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0)) ++ { ++ if (!((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)) ++ _fex |= (0); ++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] = ++ Z_f[2], V_f[3] = Z_f[3]); ++ goto add_done; ++ } ++ else if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)) ++ { ++ _fex |= (0); ++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] = ++ U_f[2], V_f[3] = U_f[3]); ++ goto add_done; ++ } ++ else ++ { ++ _fex |= (0); ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = U_f[0] + Z_f[0]; ++ _c1 = V_f[0] < U_f[0]; ++ V_f[1] = U_f[1] + Z_f[1]; ++ _c2 = V_f[1] < U_f[1]; ++ V_f[1] += _c1; ++ _c2 |= V_f[1] < _c1; ++ V_f[2] = U_f[2] + Z_f[2]; ++ _c3 = V_f[2] < U_f[2]; ++ V_f[2] += _c2; ++ _c3 |= V_f[2] < _c2; ++ V_f[3] = U_f[3] + Z_f[3] + _c3; ++ } ++ while (0); ++ if ((V_f[3]) & ++ ((unsigned long) 1 << (113 - 1 + 3) % 32)) ++ { ++ (V_f[3]) &= ++ ~(unsigned long) ((unsigned long) 1 << ++ (113 - 1 + 3) % 32); ++ V_e = 1; ++ } ++ goto add_done; ++ } ++ } ++ else ++ { ++ do ++ { ++ if (U_e == 32767 ++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == ++ 0) ++ && !((U_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) % ++ 32))) ++ _fex |= (0); ++ } ++ while (0); ++ do ++ { ++ if (Z_e == 32767 ++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == ++ 0) ++ && !((Z_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) % ++ 32))) ++ _fex |= (0); ++ } ++ while (0); ++ V_e = 32767; ++ if (((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0)) ++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] = ++ Z_f[2], V_f[3] = Z_f[3]); ++ else if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)) ++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] = ++ U_f[2], V_f[3] = U_f[3]); ++ else ++ do ++ { ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _down = (3) % 32; ++ _up = 32 - _down; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ U_f[_i] = U_f[_i + _skip]; ++ else ++ { ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ U_f[_i] = ++ U_f[_i + ++ _skip] >> _down | U_f[_i + ++ _skip + ++ 1] << ++ _up; ++ U_f[_i++] = U_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ U_f[_i] = 0; ++ } ++ while (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _down = (3) % 32; ++ _up = 32 - _down; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ Z_f[_i] = Z_f[_i + _skip]; ++ else ++ { ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ Z_f[_i] = ++ Z_f[_i + ++ _skip] >> _down | Z_f[_i + ++ _skip + ++ 1] << ++ _up; ++ Z_f[_i++] = Z_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ Z_f[_i] = 0; ++ } ++ while (0); ++ do ++ { ++ if (((U_f[3]) & ++ ((unsigned long) 1 << (113 - 2) % ++ 32)) ++ && !((Z_f[3]) & ++ ((unsigned long) 1 << (113 - 2) % ++ 32))) ++ { ++ V_s = Z_s; ++ (V_f[0] = Z_f[0], V_f[1] = ++ Z_f[1], V_f[2] = Z_f[2], V_f[3] = ++ Z_f[3]); ++ } ++ else ++ { ++ V_s = U_s; ++ (V_f[0] = U_f[0], V_f[1] = ++ U_f[1], V_f[2] = U_f[2], V_f[3] = ++ U_f[3]); ++ } ++ V_c = 3; ++ } ++ while (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _up = (3) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ V_f[_i] = V_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ V_f[_i] = ++ V_f[_i - _skip] << _up | V_f[_i - ++ _skip ++ - ++ 1] >> ++ _down; ++ V_f[_i--] = V_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ V_f[_i] = 0; ++ } ++ while (0); ++ } ++ while (0); ++ goto add_done; ++ } ++ } ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = U_f[0] + Z_f[0]; ++ _c1 = V_f[0] < U_f[0]; ++ V_f[1] = U_f[1] + Z_f[1]; ++ _c2 = V_f[1] < U_f[1]; ++ V_f[1] += _c1; ++ _c2 |= V_f[1] < _c1; ++ V_f[2] = U_f[2] + Z_f[2]; ++ _c3 = V_f[2] < U_f[2]; ++ V_f[2] += _c2; ++ _c3 |= V_f[2] < _c2; ++ V_f[3] = U_f[3] + Z_f[3] + _c3; ++ } ++ while (0); ++ V_e = U_e + 1; ++ do ++ { ++ int _sticky; ++ do ++ { ++ long _up, _down, _skip, _i; ++ unsigned long _s; ++ _skip = (1) / 32; ++ _down = (1) % 32; ++ _up = 32 - _down; ++ for (_s = _i = 0; _i < _skip; ++_i) ++ _s |= V_f[_i]; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ V_f[_i] = V_f[_i + _skip]; ++ else ++ { ++ _s |= V_f[_i] << _up; ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ V_f[_i] = ++ V_f[_i + _skip] >> _down | V_f[_i + _skip + ++ 1] << _up; ++ V_f[_i++] = V_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ V_f[_i] = 0; ++ _sticky = (_s != 0); ++ } ++ while (0); ++ V_f[0] |= _sticky; ++ } ++ while (0); ++ if (V_e == 32767) ++ do ++ { ++ if (0 == 0 || (0 == 2 && !V_s) || (0 == 3 && V_s)) ++ { ++ V_e = 32767; ++ (V_f[3] = 0, V_f[2] = 0, V_f[1] = 0, V_f[0] = 0); ++ } ++ else ++ { ++ V_e = 32767 - 1; ++ _fex |= (0); ++ _fex |= (0); ++ (V_f[3] = (~(signed long) 0), V_f[2] = ++ (~(signed long) 0), V_f[1] = ++ (~(signed long) 0), V_f[0] = (~(signed long) 0)); ++ } ++ } ++ while (0); ++ goto add_done; ++ } ++ add3:if ((V_f[3]) & ++ ((unsigned long) 1 << (113 - 1 + 3) % 32)) ++ { ++ (V_f[3]) &= ++ ~(unsigned long) ((unsigned long) 1 << (113 - 1 + 3) % ++ 32); ++ V_e++; ++ do ++ { ++ int _sticky; ++ do ++ { ++ long _up, _down, _skip, _i; ++ unsigned long _s; ++ _skip = (1) / 32; ++ _down = (1) % 32; ++ _up = 32 - _down; ++ for (_s = _i = 0; _i < _skip; ++_i) ++ _s |= V_f[_i]; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ V_f[_i] = V_f[_i + _skip]; ++ else ++ { ++ _s |= V_f[_i] << _up; ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ V_f[_i] = ++ V_f[_i + _skip] >> _down | V_f[_i + _skip + ++ 1] << _up; ++ V_f[_i++] = V_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ V_f[_i] = 0; ++ _sticky = (_s != 0); ++ } ++ while (0); ++ V_f[0] |= _sticky; ++ } ++ while (0); ++ if (V_e == 32767) ++ do ++ { ++ if (0 == 0 || (0 == 2 && !V_s) || (0 == 3 && V_s)) ++ { ++ V_e = 32767; ++ (V_f[3] = 0, V_f[2] = 0, V_f[1] = 0, V_f[0] = 0); ++ } ++ else ++ { ++ V_e = 32767 - 1; ++ _fex |= (0); ++ _fex |= (0); ++ (V_f[3] = (~(signed long) 0), V_f[2] = ++ (~(signed long) 0), V_f[1] = ++ (~(signed long) 0), V_f[0] = (~(signed long) 0)); ++ } ++ } ++ while (0); ++ } ++ add_done:; ++ } ++ else ++ { ++ int ediff = U_e - Z_e; ++ if (ediff > 0) ++ { ++ V_e = U_e; ++ V_s = U_s; ++ if (Z_e == 0) ++ { ++ if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)) ++ { ++ do ++ { ++ if (U_e == 32767 ++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == ++ 0) ++ && !((U_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) % ++ 32))) ++ _fex |= (0); ++ } ++ while (0); ++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] = ++ U_f[2], V_f[3] = U_f[3]); ++ goto sub_done; ++ } ++ else ++ { ++ _fex |= (0); ++ ediff--; ++ if (ediff == 0) ++ { ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = U_f[0] - Z_f[0]; ++ _c1 = V_f[0] > U_f[0]; ++ V_f[1] = U_f[1] - Z_f[1]; ++ _c2 = V_f[1] > U_f[1]; ++ V_f[1] -= _c1; ++ _c2 |= _c1 && (Z_f[1] == U_f[1]); ++ V_f[2] = U_f[2] - Z_f[2]; ++ _c3 = V_f[2] > U_f[2]; ++ V_f[2] -= _c2; ++ _c3 |= _c2 && (Z_f[2] == U_f[2]); ++ V_f[3] = U_f[3] - Z_f[3] - _c3; ++ } ++ while (0); ++ goto sub3; ++ } ++ if (U_e == 32767) ++ { ++ do ++ { ++ if (U_e == 32767 ++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) ++ == 0) ++ && !((U_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) ++ % 32))) ++ _fex |= (0); ++ } ++ while (0); ++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] = ++ U_f[2], V_f[3] = U_f[3]); ++ goto sub_done; ++ } ++ goto sub1; ++ } ++ } ++ else if (U_e == 32767) ++ { ++ do ++ { ++ if (U_e == 32767 ++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0) ++ && !((U_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) % 32))) ++ _fex |= (0); ++ } ++ while (0); ++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] = ++ U_f[2], V_f[3] = U_f[3]); ++ goto sub_done; ++ } ++ (Z_f[3]) |= ((unsigned long) 1 << (113 - 1 + 3) % 32); ++ sub1:if (ediff <= (3 + 113)) ++ do ++ { ++ int _sticky; ++ do ++ { ++ long _up, _down, _skip, _i; ++ unsigned long _s; ++ _skip = (ediff) / 32; ++ _down = (ediff) % 32; ++ _up = 32 - _down; ++ for (_s = _i = 0; _i < _skip; ++_i) ++ _s |= Z_f[_i]; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ Z_f[_i] = Z_f[_i + _skip]; ++ else ++ { ++ _s |= Z_f[_i] << _up; ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ Z_f[_i] = ++ Z_f[_i + _skip] >> _down | Z_f[_i + ++ _skip + ++ 1] << _up; ++ Z_f[_i++] = Z_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ Z_f[_i] = 0; ++ _sticky = (_s != 0); ++ } ++ while (0); ++ Z_f[0] |= _sticky; ++ } ++ while (0); ++ else if (!((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)) ++ (Z_f[3] = 0, Z_f[2] = 0, Z_f[1] = 0, Z_f[0] = 1); ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = U_f[0] - Z_f[0]; ++ _c1 = V_f[0] > U_f[0]; ++ V_f[1] = U_f[1] - Z_f[1]; ++ _c2 = V_f[1] > U_f[1]; ++ V_f[1] -= _c1; ++ _c2 |= _c1 && (Z_f[1] == U_f[1]); ++ V_f[2] = U_f[2] - Z_f[2]; ++ _c3 = V_f[2] > U_f[2]; ++ V_f[2] -= _c2; ++ _c3 |= _c2 && (Z_f[2] == U_f[2]); ++ V_f[3] = U_f[3] - Z_f[3] - _c3; ++ } ++ while (0); ++ } ++ else if (ediff < 0) ++ { ++ ediff = -ediff; ++ V_e = Z_e; ++ V_s = Z_s; ++ if (U_e == 0) ++ { ++ if (((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0)) ++ { ++ do ++ { ++ if (Z_e == 32767 ++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == ++ 0) ++ && !((Z_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) % ++ 32))) ++ _fex |= (0); ++ } ++ while (0); ++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] = ++ Z_f[2], V_f[3] = Z_f[3]); ++ goto sub_done; ++ } ++ else ++ { ++ _fex |= (0); ++ ediff--; ++ if (ediff == 0) ++ { ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = Z_f[0] - U_f[0]; ++ _c1 = V_f[0] > Z_f[0]; ++ V_f[1] = Z_f[1] - U_f[1]; ++ _c2 = V_f[1] > Z_f[1]; ++ V_f[1] -= _c1; ++ _c2 |= _c1 && (U_f[1] == Z_f[1]); ++ V_f[2] = Z_f[2] - U_f[2]; ++ _c3 = V_f[2] > Z_f[2]; ++ V_f[2] -= _c2; ++ _c3 |= _c2 && (U_f[2] == Z_f[2]); ++ V_f[3] = Z_f[3] - U_f[3] - _c3; ++ } ++ while (0); ++ goto sub3; ++ } ++ if (Z_e == 32767) ++ { ++ do ++ { ++ if (Z_e == 32767 ++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) ++ == 0) ++ && !((Z_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) ++ % 32))) ++ _fex |= (0); ++ } ++ while (0); ++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] = ++ Z_f[2], V_f[3] = Z_f[3]); ++ goto sub_done; ++ } ++ goto sub2; ++ } ++ } ++ else if (Z_e == 32767) ++ { ++ do ++ { ++ if (Z_e == 32767 ++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0) ++ && !((Z_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) % 32))) ++ _fex |= (0); ++ } ++ while (0); ++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] = ++ Z_f[2], V_f[3] = Z_f[3]); ++ goto sub_done; ++ } ++ (U_f[3]) |= ((unsigned long) 1 << (113 - 1 + 3) % 32); ++ sub2:if (ediff <= (3 + 113)) ++ do ++ { ++ int _sticky; ++ do ++ { ++ long _up, _down, _skip, _i; ++ unsigned long _s; ++ _skip = (ediff) / 32; ++ _down = (ediff) % 32; ++ _up = 32 - _down; ++ for (_s = _i = 0; _i < _skip; ++_i) ++ _s |= U_f[_i]; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ U_f[_i] = U_f[_i + _skip]; ++ else ++ { ++ _s |= U_f[_i] << _up; ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ U_f[_i] = ++ U_f[_i + _skip] >> _down | U_f[_i + ++ _skip + ++ 1] << _up; ++ U_f[_i++] = U_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ U_f[_i] = 0; ++ _sticky = (_s != 0); ++ } ++ while (0); ++ U_f[0] |= _sticky; ++ } ++ while (0); ++ else if (!((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0)) ++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 1); ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = Z_f[0] - U_f[0]; ++ _c1 = V_f[0] > Z_f[0]; ++ V_f[1] = Z_f[1] - U_f[1]; ++ _c2 = V_f[1] > Z_f[1]; ++ V_f[1] -= _c1; ++ _c2 |= _c1 && (U_f[1] == Z_f[1]); ++ V_f[2] = Z_f[2] - U_f[2]; ++ _c3 = V_f[2] > Z_f[2]; ++ V_f[2] -= _c2; ++ _c3 |= _c2 && (U_f[2] == Z_f[2]); ++ V_f[3] = Z_f[3] - U_f[3] - _c3; ++ } ++ while (0); ++ } ++ else ++ { ++ if (!(((U_e + 1) & 32767) > 1)) ++ { ++ if (U_e == 0) ++ { ++ V_e = 0; ++ if (((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0)) ++ { ++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] = ++ Z_f[2], V_f[3] = Z_f[3]); ++ if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)) ++ V_s = (0 == 3); ++ else ++ { ++ _fex |= (0); ++ V_s = Z_s; ++ } ++ goto sub_done; ++ } ++ else if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)) ++ { ++ _fex |= (0); ++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] = ++ U_f[2], V_f[3] = U_f[3]); ++ V_s = U_s; ++ goto sub_done; ++ } ++ else ++ { ++ _fex |= (0); ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = U_f[0] - Z_f[0]; ++ _c1 = V_f[0] > U_f[0]; ++ V_f[1] = U_f[1] - Z_f[1]; ++ _c2 = V_f[1] > U_f[1]; ++ V_f[1] -= _c1; ++ _c2 |= _c1 && (Z_f[1] == U_f[1]); ++ V_f[2] = U_f[2] - Z_f[2]; ++ _c3 = V_f[2] > U_f[2]; ++ V_f[2] -= _c2; ++ _c3 |= _c2 && (Z_f[2] == U_f[2]); ++ V_f[3] = U_f[3] - Z_f[3] - _c3; ++ } ++ while (0); ++ V_s = U_s; ++ if ((V_f[3]) & ++ ((unsigned long) 1 << (113 - 1 + 3) % 32)) ++ { ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = Z_f[0] - U_f[0]; ++ _c1 = V_f[0] > Z_f[0]; ++ V_f[1] = Z_f[1] - U_f[1]; ++ _c2 = V_f[1] > Z_f[1]; ++ V_f[1] -= _c1; ++ _c2 |= _c1 && (U_f[1] == Z_f[1]); ++ V_f[2] = Z_f[2] - U_f[2]; ++ _c3 = V_f[2] > Z_f[2]; ++ V_f[2] -= _c2; ++ _c3 |= _c2 && (U_f[2] == Z_f[2]); ++ V_f[3] = Z_f[3] - U_f[3] - _c3; ++ } ++ while (0); ++ V_s = Z_s; ++ } ++ else ++ if (((V_f[0] | V_f[1] | V_f[2] | V_f[3]) == ++ 0)) ++ V_s = (0 == 3); ++ goto sub_done; ++ } ++ } ++ else ++ { ++ do ++ { ++ if (U_e == 32767 ++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == ++ 0) ++ && !((U_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) % ++ 32))) ++ _fex |= (0); ++ } ++ while (0); ++ do ++ { ++ if (Z_e == 32767 ++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == ++ 0) ++ && !((Z_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) % ++ 32))) ++ _fex |= (0); ++ } ++ while (0); ++ V_e = 32767; ++ if (((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0)) ++ { ++ if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)) ++ { ++ V_s = 0; ++ (V_f[3] = ++ ((((unsigned long) 1 << (113 - 2) % ++ 32) << 1) - 1), V_f[2] = -1, V_f[1] = ++ -1, V_f[0] = -1); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _up = (3) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ V_f[_i] = V_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ V_f[_i] = ++ V_f[_i - ++ _skip] << _up | V_f[_i - ++ _skip - ++ 1] >> ++ _down; ++ V_f[_i--] = V_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ V_f[_i] = 0; ++ } ++ while (0); ++ _fex |= (0); ++ } ++ else ++ { ++ V_s = Z_s; ++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] = ++ Z_f[2], V_f[3] = Z_f[3]); ++ } ++ } ++ else ++ { ++ if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)) ++ { ++ V_s = U_s; ++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] = ++ U_f[2], V_f[3] = U_f[3]); ++ } ++ else ++ { ++ do ++ { ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _down = (3) % 32; ++ _up = 32 - _down; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++ ++_i) ++ U_f[_i] = U_f[_i + _skip]; ++ else ++ { ++ for (_i = 0; _i < 3 - _skip; ++ ++_i) ++ U_f[_i] = ++ U_f[_i + ++ _skip] >> _down | U_f[_i ++ + ++ _skip ++ + ++ 1] ++ << _up; ++ U_f[_i++] = U_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ U_f[_i] = 0; ++ } ++ while (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _down = (3) % 32; ++ _up = 32 - _down; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++ ++_i) ++ Z_f[_i] = Z_f[_i + _skip]; ++ else ++ { ++ for (_i = 0; _i < 3 - _skip; ++ ++_i) ++ Z_f[_i] = ++ Z_f[_i + ++ _skip] >> _down | Z_f[_i ++ + ++ _skip ++ + ++ 1] ++ << _up; ++ Z_f[_i++] = Z_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ Z_f[_i] = 0; ++ } ++ while (0); ++ do ++ { ++ if (((U_f[3]) & ++ ((unsigned long) 1 << (113 - 2) ++ % 32)) ++ && !((Z_f[3]) & ++ ((unsigned long) 1 << ++ (113 - 2) % 32))) ++ { ++ V_s = Z_s; ++ (V_f[0] = Z_f[0], V_f[1] = ++ Z_f[1], V_f[2] = ++ Z_f[2], V_f[3] = Z_f[3]); ++ } ++ else ++ { ++ V_s = U_s; ++ (V_f[0] = U_f[0], V_f[1] = ++ U_f[1], V_f[2] = ++ U_f[2], V_f[3] = U_f[3]); ++ } ++ V_c = 3; ++ } ++ while (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _up = (3) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ V_f[_i] = V_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ V_f[_i] = ++ V_f[_i - ++ _skip] << _up | V_f[_i - ++ _skip ++ - ++ 1] ++ >> _down; ++ V_f[_i--] = V_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ V_f[_i] = 0; ++ } ++ while (0); ++ } ++ while (0); ++ } ++ } ++ goto sub_done; ++ } ++ } ++ V_e = U_e; ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = U_f[0] - Z_f[0]; ++ _c1 = V_f[0] > U_f[0]; ++ V_f[1] = U_f[1] - Z_f[1]; ++ _c2 = V_f[1] > U_f[1]; ++ V_f[1] -= _c1; ++ _c2 |= _c1 && (Z_f[1] == U_f[1]); ++ V_f[2] = U_f[2] - Z_f[2]; ++ _c3 = V_f[2] > U_f[2]; ++ V_f[2] -= _c2; ++ _c3 |= _c2 && (Z_f[2] == U_f[2]); ++ V_f[3] = U_f[3] - Z_f[3] - _c3; ++ } ++ while (0); ++ V_s = U_s; ++ if ((V_f[3]) & ((unsigned long) 1 << (113 - 1 + 3) % 32)) ++ { ++ do ++ { ++ unsigned long _c1, _c2, _c3; ++ V_f[0] = Z_f[0] - U_f[0]; ++ _c1 = V_f[0] > Z_f[0]; ++ V_f[1] = Z_f[1] - U_f[1]; ++ _c2 = V_f[1] > Z_f[1]; ++ V_f[1] -= _c1; ++ _c2 |= _c1 && (U_f[1] == Z_f[1]); ++ V_f[2] = Z_f[2] - U_f[2]; ++ _c3 = V_f[2] > Z_f[2]; ++ V_f[2] -= _c2; ++ _c3 |= _c2 && (U_f[2] == Z_f[2]); ++ V_f[3] = Z_f[3] - U_f[3] - _c3; ++ } ++ while (0); ++ V_s = Z_s; ++ } ++ else if (((V_f[0] | V_f[1] | V_f[2] | V_f[3]) == 0)) ++ { ++ V_e = 0; ++ V_s = (0 == 3); ++ goto sub_done; ++ } ++ goto norm; ++ } ++ sub3:if ((V_f[3]) & ++ ((unsigned long) 1 << (113 - 1 + 3) % 32)) ++ { ++ int diff; ++ (V_f[3]) &= ((unsigned long) 1 << (113 - 1 + 3) % 32) - 1; ++ norm:do ++ { ++ if (V_f[3]) ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ diff = __builtin_clz (V_f[3]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ diff = __builtin_clzl (V_f[3]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ diff = __builtin_clzll (V_f[3]); ++ else ++ abort (); ++ } ++ while (0); ++ } ++ else if (V_f[2]) ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ diff = __builtin_clz (V_f[2]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ diff = __builtin_clzl (V_f[2]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ diff = __builtin_clzll (V_f[2]); ++ else ++ abort (); ++ } ++ while (0); ++ diff += 32; ++ } ++ else if (V_f[1]) ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ diff = __builtin_clz (V_f[1]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ diff = __builtin_clzl (V_f[1]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ diff = __builtin_clzll (V_f[1]); ++ else ++ abort (); ++ } ++ while (0); ++ diff += 32 * 2; ++ } ++ else ++ { ++ do ++ { ++ if (sizeof (unsigned long) == ++ sizeof (unsigned int)) ++ diff = __builtin_clz (V_f[0]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long)) ++ diff = __builtin_clzl (V_f[0]); ++ else if (sizeof (unsigned long) == ++ sizeof (unsigned long long)) ++ diff = __builtin_clzll (V_f[0]); ++ else ++ abort (); ++ } ++ while (0); ++ diff += 32 * 3; ++ } ++ } ++ while (0); ++ diff -= ((4 * 32) - (3 + 113)); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (diff) / 32; ++ _up = (diff) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ V_f[_i] = V_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ V_f[_i] = ++ V_f[_i - _skip] << _up | V_f[_i - _skip - ++ 1] >> _down; ++ V_f[_i--] = V_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ V_f[_i] = 0; ++ } ++ while (0); ++ if (V_e <= diff) ++ { ++ diff = diff - V_e + 1; ++ do ++ { ++ int _sticky; ++ do ++ { ++ long _up, _down, _skip, _i; ++ unsigned long _s; ++ _skip = (diff) / 32; ++ _down = (diff) % 32; ++ _up = 32 - _down; ++ for (_s = _i = 0; _i < _skip; ++_i) ++ _s |= V_f[_i]; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ V_f[_i] = V_f[_i + _skip]; ++ else ++ { ++ _s |= V_f[_i] << _up; ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ V_f[_i] = ++ V_f[_i + _skip] >> _down | V_f[_i + ++ _skip + ++ 1] << ++ _up; ++ V_f[_i++] = V_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ V_f[_i] = 0; ++ _sticky = (_s != 0); ++ } ++ while (0); ++ V_f[0] |= _sticky; ++ } ++ while (0); ++ V_e = 0; ++ } ++ else ++ { ++ V_e -= diff; ++ (V_f[3]) &= ++ ~(unsigned long) ((unsigned long) 1 << (113 - 1 + 3) % ++ 32); ++ } ++ } ++ sub_done:; ++ } ++ } ++ while (0); ++ } ++ while (0); ++ ++/* FP_PACK_SEMIRAW_Q(v,V) */ ++ do ++ { ++ do ++ { ++ do ++ { ++ if ((V_f[0]) & 7) ++ _fex |= (0); ++ switch (0) ++ { ++ case 0: ++ do ++ { ++ if (((V_f[0]) & 15) != ((unsigned long) 1 << 2)) ++ do ++ { ++ unsigned long _t; ++ _t = ++ ((V_f[0] += ++ ((unsigned long) 1 << 2)) < ++ ((unsigned long) 1 << 2)); ++ V_f[1] += _t; ++ _t = (V_f[1] < _t); ++ V_f[2] += _t; ++ _t = (V_f[2] < _t); ++ V_f[3] += _t; ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ case 1: ++ (void) 0; ++ break; ++ case 2: ++ do ++ { ++ if (!V_s && ((V_f[0]) & 7)) ++ do ++ { ++ unsigned long _t; ++ _t = ++ ((V_f[0] += ++ ((unsigned long) 1 << 3)) < ++ ((unsigned long) 1 << 3)); ++ V_f[1] += _t; ++ _t = (V_f[1] < _t); ++ V_f[2] += _t; ++ _t = (V_f[2] < _t); ++ V_f[3] += _t; ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ case 3: ++ do ++ { ++ if (V_s && ((V_f[0]) & 7)) ++ do ++ { ++ unsigned long _t; ++ _t = ++ ((V_f[0] += ++ ((unsigned long) 1 << 3)) < ++ ((unsigned long) 1 << 3)); ++ V_f[1] += _t; ++ _t = (V_f[1] < _t); ++ V_f[2] += _t; ++ _t = (V_f[2] < _t); ++ V_f[3] += _t; ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ } ++ } ++ while (0); ++ if ((V_f[3]) & (((unsigned long) 1 << ((3 + 113) % 32)) >> 1)) ++ { ++ (V_f[3]) &= ~(((unsigned long) 1 << ((3 + 113) % 32)) >> 1); ++ V_e++; ++ if (V_e == 32767) ++ do ++ { ++ if (0 == 0 || (0 == 2 && !V_s) || (0 == 3 && V_s)) ++ { ++ V_e = 32767; ++ (V_f[3] = 0, V_f[2] = 0, V_f[1] = 0, V_f[0] = 0); ++ } ++ else ++ { ++ V_e = 32767 - 1; ++ _fex |= (0); ++ _fex |= (0); ++ (V_f[3] = (~(signed long) 0), V_f[2] = ++ (~(signed long) 0), V_f[1] = ++ (~(signed long) 0), V_f[0] = (~(signed long) 0)); ++ } ++ } ++ while (0); ++ } ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _down = (3) % 32; ++ _up = 32 - _down; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ V_f[_i] = V_f[_i + _skip]; ++ else ++ { ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ V_f[_i] = ++ V_f[_i + _skip] >> _down | V_f[_i + _skip + 1] << _up; ++ V_f[_i++] = V_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ V_f[_i] = 0; ++ } ++ while (0); ++ if (!(((V_e + 1) & 32767) > 1) ++ && !((V_f[0] | V_f[1] | V_f[2] | V_f[3]) == 0)) ++ { ++ if (V_e == 0) ++ _fex |= (0); ++ else ++ { ++ if (!1) ++ { ++ (V_f[3] = ++ ((((unsigned long) 1 << (113 - 2) % 32) << 1) - 1), ++ V_f[2] = -1, V_f[1] = -1, V_f[0] = -1); ++ V_s = 0; ++ } ++ else ++ (V_f[3]) |= ((unsigned long) 1 << (113 - 2) % 32); ++ } ++ } ++ } ++ while (0); ++ do ++ { ++ union _FP_UNION_Q _flo; ++ _flo.bits.frac0 = V_f[0]; ++ _flo.bits.frac1 = V_f[1]; ++ _flo.bits.frac2 = V_f[2]; ++ _flo.bits.frac3 = V_f[3]; ++ _flo.bits.exp = V_e; ++ _flo.bits.sign = V_s; ++ (v) = _flo.flt; ++ } ++ while (0); ++ } ++ while (0); ++ ++/* FP_HANDLE_EXCEPTIONS */ ++ do ++ { ++ } ++ while (0); ++ ++ /* Truncate quad to double. */ ++/* FP_INIT_ROUNDMODE */ ++ do ++ { ++ } ++ while (0); ++ ++/* FP_UNPACK_SEMIRAW_Q(V,v) */ ++ do ++ { ++ do ++ { ++ union _FP_UNION_Q _flo; ++ _flo.flt = (v); ++ V_f[0] = _flo.bits.frac0; ++ V_f[1] = _flo.bits.frac1; ++ V_f[2] = _flo.bits.frac2; ++ V_f[3] = _flo.bits.frac3; ++ V_e = _flo.bits.exp; ++ V_s = _flo.bits.sign; ++ } ++ while (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (3) / 32; ++ _up = (3) % 32; ++ _down = 32 - _up; ++ if (!_up) ++ for (_i = 3; _i >= _skip; --_i) ++ V_f[_i] = V_f[_i - _skip]; ++ else ++ { ++ for (_i = 3; _i > _skip; --_i) ++ V_f[_i] = ++ V_f[_i - _skip] << _up | V_f[_i - _skip - 1] >> _down; ++ V_f[_i--] = V_f[0] << _up; ++ } ++ for (; _i >= 0; --_i) ++ V_f[_i] = 0; ++ } ++ while (0); ++ } ++ while (0); ++ ++/* FP_TRUNC(D,Q,2,4,R,V) */ ++ do ++ { ++ if (113 < 53 || 16383 < 1023 + 53 - 1) ++ abort (); ++ R_s = V_s; ++ if ((((V_e + 1) & 32767) > 1)) ++ { ++ R_e = V_e + 1023 - 16383; ++ if (R_e >= 2047) ++ do ++ { ++ if (0 == 0 || (0 == 2 && !R_s) || (0 == 3 && R_s)) ++ { ++ R_e = 2047; ++ (R_f0 = 0, R_f1 = 0); ++ } ++ else ++ { ++ R_e = 2047 - 1; ++ _fex |= (0); ++ _fex |= (0); ++ (R_f0 = (~(signed long) 0), R_f1 = (~(signed long) 0)); ++ } ++ } ++ while (0); ++ else ++ { ++ if (R_e <= 0) ++ { ++ if (R_e <= 1 - 53) ++ (V_f[3] = 0, V_f[2] = 0, V_f[1] = 0, V_f[0] = 0); ++ else ++ { ++ (V_f[3]) |= ((unsigned long) 1 << (113 - 1 + 3) % 32); ++ do ++ { ++ int _sticky; ++ do ++ { ++ long _up, _down, _skip, _i; ++ unsigned long _s; ++ _skip = (((3 + 113) - (3 + 53) + 1 - R_e)) / 32; ++ _down = (((3 + 113) - (3 + 53) + 1 - R_e)) % 32; ++ _up = 32 - _down; ++ for (_s = _i = 0; _i < _skip; ++_i) ++ _s |= V_f[_i]; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ V_f[_i] = V_f[_i + _skip]; ++ else ++ { ++ _s |= V_f[_i] << _up; ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ V_f[_i] = ++ V_f[_i + _skip] >> _down | V_f[_i + ++ _skip + ++ 1] << ++ _up; ++ V_f[_i++] = V_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ V_f[_i] = 0; ++ _sticky = (_s != 0); ++ } ++ while (0); ++ V_f[0] |= _sticky; ++ } ++ while (0); ++ } ++ R_e = 0; ++ } ++ else ++ do ++ { ++ int _sticky; ++ do ++ { ++ long _up, _down, _skip, _i; ++ unsigned long _s; ++ _skip = (((3 + 113) - (3 + 53))) / 32; ++ _down = (((3 + 113) - (3 + 53))) % 32; ++ _up = 32 - _down; ++ for (_s = _i = 0; _i < _skip; ++_i) ++ _s |= V_f[_i]; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ V_f[_i] = V_f[_i + _skip]; ++ else ++ { ++ _s |= V_f[_i] << _up; ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ V_f[_i] = ++ V_f[_i + _skip] >> _down | V_f[_i + _skip + ++ 1] << _up; ++ V_f[_i++] = V_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ V_f[_i] = 0; ++ _sticky = (_s != 0); ++ } ++ while (0); ++ V_f[0] |= _sticky; ++ } ++ while (0); ++ do ++ { ++ R_f0 = V_f[0]; ++ R_f1 = V_f[1]; ++ } ++ while (0); ++ } ++ } ++ else ++ { ++ if (V_e == 0) ++ { ++ R_e = 0; ++ (R_f0 = 0, R_f1 = 0); ++ if (!((V_f[0] | V_f[1] | V_f[2] | V_f[3]) == 0)) ++ { ++ _fex |= (0); ++ _fex |= (0); ++ } ++ } ++ else ++ { ++ R_e = 2047; ++ if (((V_f[0] | V_f[1] | V_f[2] | V_f[3]) == 0)) ++ (R_f0 = 0, R_f1 = 0); ++ else ++ { ++ do ++ { ++ if (V_e == 32767 ++ && !((V_f[0] | V_f[1] | V_f[2] | V_f[3]) == 0) ++ && !((V_f[3]) & ++ ((unsigned long) 1 << (113 - 2 + 3) % 32))) ++ _fex |= (0); ++ } ++ while (0); ++ do ++ { ++ long _up, _down, _skip, _i; ++ _skip = (((3 + 113) - (3 + 53))) / 32; ++ _down = (((3 + 113) - (3 + 53))) % 32; ++ _up = 32 - _down; ++ if (!_down) ++ for (_i = 0; _i <= 3 - _skip; ++_i) ++ V_f[_i] = V_f[_i + _skip]; ++ else ++ { ++ for (_i = 0; _i < 3 - _skip; ++_i) ++ V_f[_i] = ++ V_f[_i + _skip] >> _down | V_f[_i + _skip + ++ 1] << _up; ++ V_f[_i++] = V_f[3] >> _down; ++ } ++ for (; _i < 4; ++_i) ++ V_f[_i] = 0; ++ } ++ while (0); ++ do ++ { ++ R_f0 = V_f[0]; ++ R_f1 = V_f[1]; ++ } ++ while (0); ++ (R_f1) |= ((unsigned long) 1 << (53 - 2 + 3) % 32); ++ } ++ } ++ } ++ } ++ while (0); ++ ++/* FP_PACK_SEMIRAW_D(r,R) */ ++ do ++ { ++ do ++ { ++ do ++ { ++ if ((R_f0) & 7) ++ _fex |= (0); ++ switch (0) ++ { ++ case 0: ++ do ++ { ++ if (((R_f0) & 15) != ((unsigned long) 1 << 2)) ++ do ++ { ++ if (__builtin_constant_p (0) && (0) == 0) ++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2": "=r" (R_f1), "=&r" (R_f0):"r" (R_f1), "%r" (R_f0), ++ "rI" (((unsigned long) 1 << ++ 2))); ++ else if (__builtin_constant_p (0) ++ && (0) == ~(USItype) 0) ++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2": "=r" (R_f1), "=&r" (R_f0):"r" (R_f1), "%r" (R_f0), ++ "rI" (((unsigned long) 1 << ++ 2))); ++ else ++ __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3": "=r" (R_f1), "=&r" (R_f0):"%r" (R_f1), "r" (0), "%r" (R_f0), ++ "rI" (((unsigned long) 1 << ++ 2))); ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ case 1: ++ (void) 0; ++ break; ++ case 2: ++ do ++ { ++ if (!R_s && ((R_f0) & 7)) ++ do ++ { ++ if (__builtin_constant_p (0) && (0) == 0) ++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2": "=r" (R_f1), "=&r" (R_f0):"r" (R_f1), "%r" (R_f0), ++ "rI" (((unsigned long) 1 << ++ 3))); ++ else if (__builtin_constant_p (0) ++ && (0) == ~(USItype) 0) ++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2": "=r" (R_f1), "=&r" (R_f0):"r" (R_f1), "%r" (R_f0), ++ "rI" (((unsigned long) 1 << ++ 3))); ++ else ++ __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3": "=r" (R_f1), "=&r" (R_f0):"%r" (R_f1), "r" (0), "%r" (R_f0), ++ "rI" (((unsigned long) 1 << ++ 3))); ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ case 3: ++ do ++ { ++ if (R_s && ((R_f0) & 7)) ++ do ++ { ++ if (__builtin_constant_p (0) && (0) == 0) ++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2": "=r" (R_f1), "=&r" (R_f0):"r" (R_f1), "%r" (R_f0), ++ "rI" (((unsigned long) 1 << ++ 3))); ++ else if (__builtin_constant_p (0) ++ && (0) == ~(USItype) 0) ++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2": "=r" (R_f1), "=&r" (R_f0):"r" (R_f1), "%r" (R_f0), ++ "rI" (((unsigned long) 1 << ++ 3))); ++ else ++ __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3": "=r" (R_f1), "=&r" (R_f0):"%r" (R_f1), "r" (0), "%r" (R_f0), ++ "rI" (((unsigned long) 1 << ++ 3))); ++ } ++ while (0); ++ } ++ while (0); ++ break; ++ } ++ } ++ while (0); ++ if ((R_f1) & (((unsigned long) 1 << (3 + 53) % 32) >> 1)) ++ { ++ (R_f1) &= ~(((unsigned long) 1 << (3 + 53) % 32) >> 1); ++ R_e++; ++ if (R_e == 2047) ++ do ++ { ++ if (0 == 0 || (0 == 2 && !R_s) || (0 == 3 && R_s)) ++ { ++ R_e = 2047; ++ (R_f0 = 0, R_f1 = 0); ++ } ++ else ++ { ++ R_e = 2047 - 1; ++ _fex |= (0); ++ _fex |= (0); ++ (R_f0 = (~(signed long) 0), R_f1 = ++ (~(signed long) 0)); ++ } ++ } ++ while (0); ++ } ++ (void) (((3) < 32) ? ( ++ { ++ R_f0 = R_f0 >> (3) | R_f1 << (32 - (3)); R_f1 >>= (3);}):( ++ { ++ R_f0 = R_f1 >> ((3) - 32); R_f1 = 0;})); ++ if (!(((R_e + 1) & 2047) > 1) && !((R_f1 | R_f0) == 0)) ++ { ++ if (R_e == 0) ++ _fex |= (0); ++ else ++ { ++ if (!1) ++ { ++ (R_f0 = -1, R_f1 = ++ ((((unsigned long) 1 << (53 - 2) % 32) << 1) - 1)); ++ R_s = 0; ++ } ++ else ++ (R_f1) |= ((unsigned long) 1 << (53 - 2) % 32); ++ } ++ } ++ } ++ while (0); ++ do ++ { ++ union _FP_UNION_D _flo; ++ _flo.bits.frac0 = R_f0; ++ _flo.bits.frac1 = R_f1; ++ _flo.bits.exp = R_e; ++ _flo.bits.sign = R_s; ++ (r) = _flo.flt; ++ } ++ while (0); ++ } ++ while (0); ++ ++/* FP_HANDLE_EXCEPTIONS */ ++ do ++ { ++ } ++ while (0); ++ ++ return r; ++} ++ ++ ++#endif ++ + #endif +diff -urN gcc42-trunc-20060802/gcc/config/rs6000/libgcc-ppc-glibc.ver gcc42-patched-20060802/gcc/config/rs6000/libgcc-ppc-glibc.ver +--- gcc42-trunc-20060802/gcc/config/rs6000/libgcc-ppc-glibc.ver 2006-08-02 11:07:16.000000000 -0500 ++++ gcc42-patched-20060802/gcc/config/rs6000/libgcc-ppc-glibc.ver 2006-09-01 08:28:29.000000000 -0500 +@@ -21,11 +21,32 @@ + %else + GCC_3.4.4 { + %endif ++%else ++GCC_4.2.0 { ++%endif + + # long double support + __gcc_qadd + __gcc_qsub + __gcc_qmul + __gcc_qdiv +-} ++ ++%ifdef _SOFT_FLOAT ++ __gcc_qneg ++ __gcc_qeq ++ __gcc_qne ++ __gcc_ggt ++ __gcc_qge ++ __gcc_qlt ++ __gcc_qle ++ __gcc_qunord ++ __gcc_stoq ++ __gcc_dtoq ++ __gcc_qtos ++ __gcc_qtod ++ __gcc_qtoi ++ __gcc_qtou ++ __gcc_itoq ++ __gcc_utoq + %endif ++} +diff -urN gcc42-trunc-20060802/gcc/config/rs6000/rs6000.c gcc42-patched-20060802/gcc/config/rs6000/rs6000.c +--- gcc42-trunc-20060802/gcc/config/rs6000/rs6000.c 2006-08-02 11:07:16.000000000 -0500 ++++ gcc42-patched-20060802/gcc/config/rs6000/rs6000.c 2006-09-01 08:28:29.000000000 -0500 +@@ -4016,8 +4016,7 @@ + + /* 128-bit constant floating-point values on Darwin should really be + loaded as two parts. */ +- if (!TARGET_IEEEQUAD +- && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128 ++ if (!TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128 + && mode == TFmode && GET_CODE (operands[1]) == CONST_DOUBLE) + { + /* DImode is used, not DFmode, because simplify_gen_subreg doesn't +@@ -9175,9 +9174,6 @@ + static void + rs6000_init_libfuncs (void) + { +- if (!TARGET_HARD_FLOAT) +- return; +- + if (DEFAULT_ABI != ABI_V4 && TARGET_XCOFF + && !TARGET_POWER2 && !TARGET_POWERPC) + { +@@ -9196,6 +9192,27 @@ + set_optab_libfunc (sub_optab, TFmode, "__gcc_qsub"); + set_optab_libfunc (smul_optab, TFmode, "__gcc_qmul"); + set_optab_libfunc (sdiv_optab, TFmode, "__gcc_qdiv"); ++ ++ if (TARGET_SOFT_FLOAT) ++ { ++ set_optab_libfunc (neg_optab, TFmode, "__gcc_qneg"); ++ set_optab_libfunc (eq_optab, TFmode, "__gcc_qeq"); ++ set_optab_libfunc (ne_optab, TFmode, "__gcc_qne"); ++ set_optab_libfunc (gt_optab, TFmode, "__gcc_qgt"); ++ set_optab_libfunc (ge_optab, TFmode, "__gcc_qge"); ++ set_optab_libfunc (lt_optab, TFmode, "__gcc_qlt"); ++ set_optab_libfunc (le_optab, TFmode, "__gcc_qle"); ++ set_optab_libfunc (unord_optab, TFmode, "__gcc_qunord"); ++ ++ set_conv_libfunc (sext_optab, TFmode, SFmode, "__gcc_stoq"); ++ set_conv_libfunc (sext_optab, TFmode, DFmode, "__gcc_dtoq"); ++ set_conv_libfunc (trunc_optab, SFmode, TFmode, "__gcc_qtos"); ++ set_conv_libfunc (trunc_optab, DFmode, TFmode, "__gcc_qtod"); ++ set_conv_libfunc (sfix_optab, SImode, TFmode, "__gcc_qtoi"); ++ set_conv_libfunc (ufix_optab, SImode, TFmode, "__gcc_qtou"); ++ set_conv_libfunc (sfloat_optab, TFmode, SImode, "__gcc_itoq"); ++ set_conv_libfunc (ufloat_optab, TFmode, SImode, "__gcc_utoq"); ++ } + } + else + { +diff -urN gcc42-trunc-20060802/gcc/config/rs6000/rs6000.md gcc42-patched-20060802/gcc/config/rs6000/rs6000.md +--- gcc42-trunc-20060802/gcc/config/rs6000/rs6000.md 2006-08-02 11:07:16.000000000 -0500 ++++ gcc42-patched-20060802/gcc/config/rs6000/rs6000.md 2006-09-01 08:28:29.000000000 -0500 +@@ -7920,42 +7920,44 @@ + "") + + (define_insn "*movcc_internal1" +- [(set (match_operand:CC 0 "nonimmediate_operand" "=y,x,?y,r,r,r,r,q,cl,r,m") +- (match_operand:CC 1 "nonimmediate_operand" "y,r,r,x,y,r,h,r,r,m,r"))] ++ [(set (match_operand:CC 0 "nonimmediate_operand" "=y,x,?y,y,r,r,r,r,r,q,cl,r,m") ++ (match_operand:CC 1 "general_operand" "y,r,r,O,x,y,r,I,h,r,r,m,r"))] + "register_operand (operands[0], CCmode) + || register_operand (operands[1], CCmode)" + "@ + mcrf %0,%1 + mtcrf 128,%1 + {rlinm|rlwinm} %1,%1,%F0,0xffffffff\;mtcrf %R0,%1\;{rlinm|rlwinm} %1,%1,%f0,0xffffffff ++ crxor %0,%0,%0 + mfcr %0%Q1 + mfcr %0%Q1\;{rlinm|rlwinm} %0,%0,%f1,0xf0000000 + mr %0,%1 ++ {lil|li} %0,%1 + mf%1 %0 + mt%0 %1 + mt%0 %1 + {l%U1%X1|lwz%U1%X1} %0,%1 + {st%U0%U1|stw%U0%U1} %1,%0" + [(set (attr "type") +- (cond [(eq_attr "alternative" "0") ++ (cond [(eq_attr "alternative" "0,3") + (const_string "cr_logical") + (eq_attr "alternative" "1,2") + (const_string "mtcr") +- (eq_attr "alternative" "5,7") ++ (eq_attr "alternative" "6,7,9") + (const_string "integer") +- (eq_attr "alternative" "6") +- (const_string "mfjmpr") + (eq_attr "alternative" "8") ++ (const_string "mfjmpr") ++ (eq_attr "alternative" "10") + (const_string "mtjmpr") +- (eq_attr "alternative" "9") ++ (eq_attr "alternative" "11") + (const_string "load") +- (eq_attr "alternative" "10") ++ (eq_attr "alternative" "12") + (const_string "store") + (ne (symbol_ref "TARGET_MFCRF") (const_int 0)) + (const_string "mfcrf") + ] + (const_string "mfcr"))) +- (set_attr "length" "4,4,12,4,8,4,4,4,4,4,4")]) ++ (set_attr "length" "4,4,12,4,4,8,4,4,4,4,4,4,4")]) + + ;; For floating-point, we normally deal with the floating-point registers + ;; unless -msoft-float is used. The sole exception is that parameter passing +@@ -8313,8 +8315,7 @@ + (define_expand "movtf" + [(set (match_operand:TF 0 "general_operand" "") + (match_operand:TF 1 "any_operand" ""))] +- "!TARGET_IEEEQUAD +- && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128" ++ "!TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128" + "{ rs6000_emit_move (operands[0], operands[1], TFmode); DONE; }") + + ; It's important to list the o->f and f->o moves before f->f because +@@ -8333,6 +8334,19 @@ + { rs6000_split_multireg_move (operands[0], operands[1]); DONE; } + [(set_attr "length" "8,8,8,20,20,16")]) + ++(define_insn_and_split "*movtf_softfloat" ++ [(set (match_operand:TF 0 "nonimmediate_operand" "=r,Y,r") ++ (match_operand:TF 1 "input_operand" "YGHF,r,r"))] ++ "!TARGET_IEEEQUAD ++ && (TARGET_SOFT_FLOAT || !TARGET_FPRS) && TARGET_LONG_DOUBLE_128 ++ && (gpc_reg_operand (operands[0], TFmode) ++ || gpc_reg_operand (operands[1], TFmode))" ++ "#" ++ "&& reload_completed" ++ [(pc)] ++{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; } ++ [(set_attr "length" "20,20,16")]) ++ + (define_expand "extenddftf2" + [(parallel [(set (match_operand:TF 0 "nonimmediate_operand" "") + (float_extend:TF (match_operand:DF 1 "input_operand" ""))) +diff -urN gcc42-trunc-20060802/gcc/config/rs6000/sysv4.h gcc42-patched-20060802/gcc/config/rs6000/sysv4.h +--- gcc42-trunc-20060802/gcc/config/rs6000/sysv4.h 2006-08-02 11:07:16.000000000 -0500 ++++ gcc42-patched-20060802/gcc/config/rs6000/sysv4.h 2006-09-01 08:28:29.000000000 -0500 +@@ -215,10 +215,6 @@ + error ("-msecure-plt not supported by your assembler"); \ + } \ + \ +- if (TARGET_SOFT_FLOAT && TARGET_LONG_DOUBLE_128 \ +- && rs6000_explicit_options.long_double) \ +- warning (0, "-msoft-float and -mlong-double-128 not supported"); \ +- \ + /* Treat -fPIC the same as -mrelocatable. */ \ + if (flag_pic > 1 && DEFAULT_ABI != ABI_AIX) \ + { \ +diff -urN gcc42-trunc-20060802/gcc/config/rs6000/t-ppccomm gcc42-patched-20060802/gcc/config/rs6000/t-ppccomm +--- gcc42-trunc-20060802/gcc/config/rs6000/t-ppccomm 2006-08-02 11:07:16.000000000 -0500 ++++ gcc42-patched-20060802/gcc/config/rs6000/t-ppccomm 2006-09-01 08:28:29.000000000 -0500 +@@ -12,15 +12,8 @@ + cat $(srcdir)/config/rs6000/tramp.asm > tramp.S + + ifneq (,$findstring gnu,$(target)) +-TARGET_LIBGCC2_CFLAGS += -specs=ldblspecs +- ++TARGET_LIBGCC2_CFLAGS += -mlong-double-128 + SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-ppc-glibc.ver +- +-# Hack to use -mlong-double-128 only when not compiling nof libgcc +-mklibgcc: ldblspecs +- +-ldblspecs: specs +- sed -e '/cc1_options/{ n; s/$$/ %{!msoft-float:-mlong-double-128}/; }' < specs > $@ + endif + + # Switch synonyms |