4272 lines
98 KiB
Diff
4272 lines
98 KiB
Diff
* 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
|