From: Vladimir Mezentsev <vladimir.mezent...@oracle.com>

Tested on aarch64-linux-gnu, x86_64-pc-linux-gnu and sparc64-unknown-linux-gnu.
No regression. New tests now passed.
There is a performance degradation for complex double type:

              failed cases  |    time
               old   new    |   old  new
complex-32      15    0     |  3.51  3.56
complex-64      19    0     |  1.88  2.34
complex-128     34    0     |  3.71  2.88

ChangeLog:
2018-01-25  Vladimir Mezentsev  <vladimir.mezent...@oracle.com>

PR libgcc/59714
* libgcc/libgcc2.c: New complex division implementation
* libgcc/config/sparc/sfp-machine.h: New
* gcc/testsuite/gcc.c-torture/execute/pr59714_128.c: New test
* gcc/testsuite/gcc.c-torture/execute/pr59714_32.c: New test
* gcc/testsuite/gcc.c-torture/execute/pr59714_64.c: New test
---
 gcc/testsuite/gcc.c-torture/execute/pr59714_128.c | 506 ++++++++++++++++++++++
 gcc/testsuite/gcc.c-torture/execute/pr59714_32.c  | 506 ++++++++++++++++++++++
 gcc/testsuite/gcc.c-torture/execute/pr59714_64.c  | 506 ++++++++++++++++++++++
 libgcc/config/sparc/sfp-machine.h                 |  13 +
 libgcc/libgcc2.c                                  | 175 +++++++-
 5 files changed, 1700 insertions(+), 6 deletions(-)
 create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr59714_128.c
 create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr59714_32.c
 create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr59714_64.c
 create mode 100644 libgcc/config/sparc/sfp-machine.h

diff --git a/gcc/testsuite/gcc.c-torture/execute/pr59714_128.c 
b/gcc/testsuite/gcc.c-torture/execute/pr59714_128.c
new file mode 100644
index 0000000..e26f40a
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr59714_128.c
@@ -0,0 +1,506 @@
+#include <stdio.h>
+#include <math.h>
+
+extern void abort (void);
+#define FABS(x) ((x) >= 0 ? (x) : -(x))
+#define FTYPE   long double
+#define FMT     "%-39.28La"
+
+/*
+   Tables of numbers for complex division testing
+   All values in hex format
+   z[i] == correctly rounded value of x[i]/y[i];
+ */
+
+#define NUMCNT 100
+
+__complex FTYPE x[NUMCNT] =
+  {
+    0x1.0p0L + 0x1.0p0Li,              /* #1 */
+    0x1.0p0L + 0x1.0p0Li,              /* #2 */
+    0x1.0p1023L + 0x1.0p-1023Li,       /* #3 */
+    0x1.0p1023L + 0x1.0p1023Li,                /* #4 */
+    0x1.0p1020L + 0x1.0p-844Li,                /* #5 */
+    0x1.0p-71L + 0x1.0p1021Li,         /* #6 */
+    0x1.0p-347L + 0x1.0p-54Li,         /* #7 */
+    0x1.0p-1074L + 0x1.0p-1074Li,      /* #8 */
+    0x1.0p1015L + 0x1.0p-989Li,                /* #9 */
+    0x1.0p-622L + 0x1.0p-1071Li,       /* #10 */
+    0x1.0p0L + 0x3.0p0Li,              /* #11 */
+    -0x1.0p0L + 0x3.0p0Li,             /* #12 */
+    0x1.0p0L - 0x3.0p0Li,              /* #13 */
+    0x3.0p0L + 0x1.0p0Li,              /* #14 */
+    0x3.0p0L + 0x4.0p0Li,              /* #15 */
+    0x1.0p0L - 0x3.000000001p-20Li,    /* #16 */
+    0x1.0p0L + 0x3.00000000001p-20Li,  /* #17 */
+    0x1.0p0L + 0x1.8000000000002p1Li,  /* #18 */
+    0x1.0p0L + 0x1.8000000000004p1Li,  /* #19 */
+    0x1.0p0L + 0x1.8000000000008p1Li,  /* #20 */
+    0x1.0p0L + 0x1.8000000000010p1Li,  /* #21 */
+    0x1.0p0L + 0x1.8000000000020p1Li,  /* #22 */
+    0x1.0p0L + 0x1.8000000000040p1Li,  /* #23 */
+    0x1.0p0L + 0x1.8000000000080p1Li,  /* #24 */
+    0x1.0p0L + 0x1.7ffffffffff8p1Li,   /* #25 */
+    0x1.0p0L + 0x1.7ffffffffff0p1Li,   /* #26 */
+    0x1.0p0L + 0x1.7fffffffff80p1Li,   /* #27 */
+    0x1.0p0L + 0x1.7fffffffff00p1Li,   /* #28 */
+    0x5.0p0L + 0x5.0p0Li,              /* #29 */
+    0x4.0p0L + 0x3.0p0Li,              /* #30 */
+    -0x4.0p0L + 0x3.000000001p0Li,     /* #31 */
+    0x3.00000000001p-20L + 0x1.0p0Li,  /* #32 */
+    0x1.00000000001p-80L + 0x1.0p0Li,  /* #33 */
+    0x1.00000000001p-8000L + 0x1.0p0Li,        /* #34 */
+    0x1.0p0L + 0x1.00000000001p-8000Li,        /* #35 */
+    -0x1.0p0L + 0x1.00000000001p-8000Li,/* #36 */
+    -0x1.0p0L + 0x1.00000000001p-8000Li,/* #37 */
+    -0x1.0p0L + 0x1.00000000001p-8000Li,/* #38 */
+    0x1.0p0L - 0x1.00000000001p-8000Li,        /* #39 */
+    0x1.0p1000L - 0x1.00000000001p-8000Li,     /* #40 */
+    0x1.97530p1000L - 0x1.00000000001p-8000Li, /* #41 */
+    0x1.97530p3000L - 0x1.00000000001p-8000Li, /* #42 */
+    0x1.97530p3770L - 0x1.00000000001p-8000Li, /* #43 */
+    0x1.97530p4770L - 0x1.00000000001p-7000Li, /* #44 */
+    0x1.97530p0L - 0x1.00000000001p-12000Li,   /* #45 */
+    0x1.97530p1000L - 0x1.00000000001p-11000Li,        /* #46 */
+    0x1.97530p2000L - 0x1.00000000001p-9000Li, /* #47 */
+    0x1.97530p3000L - 0x1.00000000001p-8000Li, /* #48 */
+    0x1.97530p4000L - 0x1.00000000001p-7000Li, /* #49 */
+    0x1.97530p5000L - 0x1.00000000001p-6000Li, /* #50 */
+    0x1.97530p6000L - 0x1.00000000001p-5000Li, /* #51 */
+    0x1.97530p7000L - 0x1.00000000001p-4000Li, /* #52 */
+    0x1.97530p8000L - 0x1.00000000001p-1000Li, /* #53 */
+    0x1.97530p9000L - 0x1.00000000001p-0Li,    /* #54 */
+    0x1.97530p10000L + 0x1.00000000001p2000Li, /* #55 */
+    0x1.97530p10100L + 0x1.00000000000p3000Li, /* #56 */
+    0x1.97530p8000L + 0x1.00000000000p4000Li,  /* #57 */
+    0x1.97530p7000L + 0x1.00000000000p5000Li,  /* #58 */
+    0x1.97530p6000L + 0x1.00000000000p6000Li,  /* #59 */
+    0x1.97530p5200L + 0x1.00000000000p5200Li,  /* #60 */
+    0x1.0p1020L + 0x1.0p-844Li,                /* #61 */
+    0x1.0p920L + 0x1.0p-844Li,         /* #62 */
+    0x1.0p504L + 0x1.0p523Li,          /* #63 */
+    0x1.0p1004L + 0x1.0p-512Li,                /* #64 */
+    0x1.0p910L + 0x1.0p-512Li,         /* #65 */
+    0x1.0p865L + 0x1.0p-512Li,         /* #66 */
+    0x1.0p864L + 0x1.0p-512Li,         /* #67 */
+    0x1.0p860L + 0x1.0p-512Li,         /* #68 */
+    0x1.0p810L + 0x1.0p-512Li,         /* #69 */
+    0x1.0p710L + 0x1.0p-512Li,         /* #70 */
+    0x1.0p610L + 0x1.0p-512Li,         /* #71 */
+    0x1.0p510L + 0x1.0p-512Li,         /* #72 */
+    0x1.0p410L + 0x1.0p-512Li,         /* #73 */
+    0x13.0p4L + 0x1.0p-4Li,            /* #74 */
+    0x13.0p2L + 0x13.0p2Li,            /* #75 */
+    0x13.0p4L + 0x1.0p4Li,             /* #76 */
+    0x12.0p4L + 0x12.0p-4Li,           /* #77 */
+    0x1.0p1L + 0x12.0p1Li,             /* #78 */
+    0x1.0p2L + 0x1.0p4Li,              /* #79 */
+    0x13.0p0L + 0x0.0p0Li,             /* #80 */
+    0x1.01p12L - 0x1.037p-12Li,                /* #81 */
+    -0x1.01p12L - 0x1.037p-12Li,       /* #82 */
+    0x1.01p12L - 0x1.037p-12Li,                /* #83 */
+    -0x1.01p12L - 0x1.037p-12Li,       /* #84 */
+    0x1.01p12L - 0x1.037p-12Li,                /* #85 */
+    0x1.123456p3L - 0x1.789123p4Li,    /* #86 */
+    0x1.123457p3L - 0x1.789123p4Li,    /* #87 */
+    0x1.123458p3L + 0x1.789123p4Li,    /* #88 */
+    0x1.123456p3L + 0x1.789122p4Li,    /* #89 */
+    0x1.123456p3L + 0x1.789121p4Li,    /* #90 */
+    0x1.123456p3L + 0x1.789120p4Li,    /* #91 */
+    0x1.123455p3L - 0x1.789123p4Li,    /* #92 */
+    0x1.123454p3L - 0x1.789122p4Li,    /* #93 */
+    -0x1.123453p3L + 0x1.789121p4Li,   /* #94 */
+    0x1.123452p3L + 0x1.789120p4Li,    /* #95 */
+    0x1.123451p3L - 0x1.789127p4Li,    /* #96 */
+    0x1.123459p3L - 0x1.789125p4Li,    /* #97 */
+    -0x1.123450p3L + 0x1.789124p4Li,   /* #98 */
+    0x1.1234561p3L + 0x1.7891231p4Li,  /* #99 */
+    0x1.1234561p3L - 0x1.7891231p4Li   /* #100 */
+  };
+
+__complex FTYPE y[NUMCNT] =
+  {
+    0x1.0p0L + 0x1.0p1023Li,           /* #1 */
+    0x1.0p-1023L + 0x1.0p-1023Li,      /* #2 */
+    0x1.0p677L + 0x1.0p-677Li,         /* #3 */
+    0x1.0p0L + 0x1.0p0Li,              /* #4 */
+    0x1.0p656L + 0x1.0p-780Li,         /* #5 */
+    0x1.0p1001L + 0x1.0p-323Li,                /* #6 */
+    0x1.0p-1037L + 0x1.0p-1058Li,      /* #7 */
+    0x1.0p-1073L + 0x1.0p-1074Li,      /* #8 */
+    0x1.0p1023L + 0x1.0p1023Li,                /* #9 */
+    0x1.0p-343L + 0x1.0p-798Li,                /* #10 */
+    0x1.0p0L + 0x3.0p0Li,              /* #11 */
+    -0x1.0p0L + 0x3.0p0Li,             /* #12 */
+    0x1.0p0L - 0x3.0p0Li,              /* #13 */
+    0x3.0p0L + 0x1.0p0Li,              /* #14 */
+    0x3.0p0L + 0x4.0p0Li,              /* #15 */
+    -0x2.0p0L + 0x8.0p-10Li,           /* #16 */
+    0x1.0p0L + 0x3.0p-20Li,            /* #17 */
+    0x1.0p0L + 0x3.0p0Li,              /* #18 */
+    0x1.0p0L + 0x3.0p0Li,              /* #19 */
+    0x1.0p0L + 0x3.0p0Li,              /* #20 */
+    0x1.0p0L + 0x3.0p0Li,              /* #21 */
+    0x1.0p0L + 0x3.0p0Li,              /* #22 */
+    0x1.0p0L + 0x3.0p0Li,              /* #23 */
+    0x1.0p0L + 0x3.0p0Li,              /* #24 */
+    0x1.0p0L + 0x3.0p0Li,              /* #25 */
+    0x1.0p0L + 0x3.0p0Li,              /* #26 */
+    0x1.0p0L + 0x3.0p0Li,              /* #27 */
+    0x1.0p0L + 0x3.0p0Li,              /* #28 */
+    0x3.0p0L + 0x4.0p0Li,              /* #29 */
+    0x3.0p0L - 0x4.0p0Li,              /* #30 */
+    -0x3.0p0L - 0x4.0p0Li,             /* #31 */
+    0x3.0p-20L + 0x1.0p0Li,            /* #32 */
+    0x1.0p-80L + 0x1.0p0Li,            /* #33 */
+    0x1.0p-80L + 0x1.0p0Li,            /* #34 */
+    0x1.0p0L + 0x1.0p-8000Li,          /* #35 */
+    0x1.0p0L + 0x1.0p-8000Li,          /* #36 */
+    -0x1.0p0L + 0x1.0p-8000Li,         /* #37 */
+    0x1.0p0L - 0x1.0p-8000Li,          /* #38 */
+    0x1.0p0L + 0x1.0p-8000Li,          /* #39 */
+    0x1.0p100L + 0x1.0p-8000Li,                /* #40 */
+    0x1.97530p100L + 0x1.0p-8000Li,    /* #41 */
+    0x1.97530p300L + 0x1.0p-8000Li,    /* #42 */
+    0x1.0p-6000L + 0x1.97530p3770Li,   /* #43 */
+    0x1.0p-5000L + 0x1.97530p4770Li,   /* #44 */
+    0x1.0p-9000L + 0x1.97530p0Li,      /* #45 */
+    0x1.0p-8000L + 0x1.97530p1000Li,   /* #46 */
+    0x1.0p-7000L + 0x1.97530p2000Li,   /* #47 */
+    0x1.0p-6000L + 0x1.97530p3000Li,   /* #48 */
+    0x1.0p-5000L + 0x1.97530p4000Li,   /* #49 */
+    0x1.0p-4000L + 0x1.97530p5000Li,   /* #50 */
+    0x1.0p-3000L + 0x1.97530p6000Li,   /* #51 */
+    0x1.0p-2000L + 0x1.97530p7000Li,   /* #52 */
+    0x1.0p-1000L + 0x1.97530p8000Li,   /* #53 */
+    0x1.0p-0L + 0x1.97530p900Li,       /* #54 */
+    0x1.97530p100L + 0x1.0000p100Li,   /* #55 */
+    0x1.97530p50L + 0x1.0000p50Li,     /* #56 */
+    0x1.97530p100L + 0x1.0000p50Li,    /* #57 */
+    0x1.97530p1L + 0x1.0000p1Li,       /* #58 */
+    0x1.97530p1L + 0x1.0000p1Li,       /* #59 */
+    0x1.97530p1L + 0x1.0000p1Li,       /* #60 */
+    0x1.0p656L + 0x1.0p-730Li,         /* #61 */
+    0x1.0p656L + 0x1.0p-730Li,         /* #62 */
+    0x1.0p-500L + 0x1.0p-1000Li,       /* #63 */
+    0x1.0p0L + 0x1.0p-500Li,           /* #64 */
+    0x1.0p-110L + 0x1.0p-500Li,                /* #65 */
+    0x1.0p-155L + 0x1.0p-500Li,                /* #66 */
+    0x1.0p-156L + 0x1.0p-500Li,                /* #67 */
+    0x1.0p-160L + 0x1.0p-500Li,                /* #68 */
+    0x1.0p-210L + 0x1.0p-500Li,                /* #69 */
+    0x1.0p-310L + 0x1.0p-500Li,                /* #70 */
+    0x1.0p-410L + 0x1.0p-500Li,                /* #71 */
+    0x1.0p-510L + 0x1.0p-600Li,                /* #72 */
+    0x1.0p-610L + 0x1.0p-700Li,                /* #73 */
+    0x5.0p1L + 0x12.0p1Li,             /* #74 */
+    0x5.0p1L + 0x12.0p1Li,             /* #75 */
+    0x5.0p1L + 0x12.0p1Li,             /* #76 */
+    0x5.0p1L + 0x12.0p1Li,             /* #77 */
+    0x5.0p1L + 0x12.0p1Li,             /* #78 */
+    0x5.0p1L + 0x12.0p1Li,             /* #79 */
+    0x5.0p1L + 0x12.0p1Li,             /* #80 */
+    0x3.1p0L + 0x1.1p0Li,              /* #81 */
+    -0x3.0p0L + 0x1.1p0Li,             /* #82 */
+    -0x3.0p0L + 0x1.1p0Li,             /* #83 */
+    0x3.0p0L + 0x1.1p0Li,              /* #84 */
+    0x3.0p0L + 0x1.1p0Li,              /* #85 */
+    0x1.456789p2L - 0x1.789123p1Li,    /* #86 */
+    0x1.124569p2L - 0x1.781239p3Li,    /* #87 */
+    0x1.123457p3L - 0x1.789126p4Li,    /* #88 */
+    0x1.123456p1L + 0x1.891237p4Li,    /* #89 */
+    0x1.123456p2L + 0x1.357123p3Li,    /* #90 */
+    0x1.123456p3L - 0x1.789123p1Li,    /* #91 */
+    0x1.123456p1L - 0x1.789123p4Li,    /* #92 */
+    0x1.123456p2L + 0x1.789123p1Li,    /* #93 */
+    0x1.123456p3L + 0x1.789123p0Li,    /* #94 */
+    -0x1.123456p1L - 0x1.789153p-2Li,  /* #95 */
+    -0x1.123456p2L - 0x1.785123p7Li,   /* #96 */
+    -0x1.123456p3L + 0x1.789123p9Li,   /* #97 */
+    0x1.123456p1L - 0x1.789123p20Li,   /* #98 */
+    0x1.123456p2L - 0x1.337788p21Li,   /* #99 */
+    0x1.123457p3L - 0x1.789991p3Li     /* #100 */
+  };
+
+__complex FTYPE z[NUMCNT] =
+  {
+    0x1.0p-1023L - 0x1.0p-1023Li,      /* #1 */
+    0x1.0p1023L + 0x0.0p0Li,           /* #2 */
+    0x1.0p346L - 0x1.0p-1008Li,                /* #3 */
+    0x1.0p1023L + 0x0.0p0Li,           /* #4 */
+    0x1.0p364L - 0x1.0p-1072Li,                /* #5 */
+    0x1.0p-1072L + 0x1.0p20Li,         /* #6 */
+    0x1.ffffffffff800000000020p+961L + 0x1.ffffffffff800000000020p+982Li,/* #7 
*/
+    0x1.3333333333333333333333333333p-1L + 
0x1.999999999999999999999999999ap-3Li,/* #8 */
+    0.001953125L - 0.001953125Li,      /* #9 */
+    0x1.000000000000000000000000000p-279L + 
0x1.f800000000000000000000000000p-729Li,/* #10 */
+    0x1.0p0L + 0x0.0p0Li,              /* #11 */
+    0x1.0p0L + 0x0.0p0Li,              /* #12 */
+    0x1.0p0L + 0x0.0p0Li,              /* #13 */
+    0x1.0p0L + 0x0.0p0Li,              /* #14 */
+    0x1.0p0L + 0x0.0p0Li,              /* #15 */
+    -0x1.fffe0061ff9e0063ff9c0063ff9cp-2L - 
0x1.ff9e0061ff9c0063ff9c0063ff9cp-10Li,/* #16 */
+    0x1.0000000000000000000030000000p+0L + 
0x1.ffffffffee00000000a1fffffffap-65Li,/* #17 */
+    0x1.0000000000001333333333333333p+0L + 
0x1.9999999999999999999999999999p-54Li,/* #18 */
+    0x1.0000000000002666666666666666p+0L + 
0x1.9999999999999999999999999999p-53Li,/* #19 */
+    0x1.0000000000004ccccccccccccccdp+0L + 
0x1.9999999999999999999999999999p-52Li,/* #20 */
+    0x1.000000000000999999999999999ap+0L + 
0x1.999999999999999999999999999ap-51Li,/* #21 */
+    0x1.0000000000013333333333333333p+0L + 
0x1.999999999999999999999999999ap-50Li,/* #22 */
+    0x1.0000000000026666666666666666p+0L + 
0x1.999999999999999999999999999ap-49Li,/* #23 */
+    0x1.000000000004cccccccccccccccdp+0L + 
0x1.999999999999999999999999999ap-48Li,/* #24 */
+    0x1.fffffffffff66666666666666666p-1L - 
0x1.999999999999999999999999999ap-48Li,/* #25 */
+    0x1.ffffffffffeccccccccccccccccdp-1L - 
0x1.999999999999999999999999999ap-47Li,/* #26 */
+    0x1.ffffffffff666666666666666666p-1L - 
0x1.999999999999999999999999999ap-44Li,/* #27 */
+    0x1.fffffffffecccccccccccccccccdp-1L - 
0x1.999999999999999999999999999ap-43Li,/* #28 */
+    0x1.6666666666666666666666666666p+0L - 
0x1.999999999999999999999999999ap-3Li,/* #29 */
+    0x0.0p0L + 0x1.0p0Li,                              /* #30 */
+    -0x1.47ae147ae147ae147ae147ae147bp-39L - 
0x1.0000000001eb851eb851eb851eb8p+0Li,/* #31 */
+    0x1.0000000000000000000030000000p+0L - 
0x1.ffffffffee00000000a1fffffffap-65Li,/* #32 */
+    0x1.00000000000000p0L - 0x1.0000000000000p-124Li,  /* #33 */
+    0x1.00000000000000p0L + 0x1.0000000000000p-80Li,   /* #34 */
+    0x1.00000000000000p0L + 0x1.0000000000000p-8044Li, /* #35 */
+    -0x1.00000000000000p0L + 0x1.0000000000080p-7999Li,        /* #36 */
+    0x1.00000000000000p0L - 0x1.0000000000000p-8044Li, /* #37 */
+    -0x1.00000000000000p0L + 0x1.0000000000000p-8044Li,        /* #38 */
+    0x1.00000000000000p0L - 0x1.0000000000080p-7999Li, /* #39 */
+    0x1.00000000000000p+900L - 0x1.0000000000000p-7200Li,/* #40 */
+    0x1.0000000000000000000000000000p+900L - 
0x1.41c9b303bfbf1bb3465e771d2c5fp-7201Li,/* #41 */
+    0x1.0000000000000000000000000000p+2700L - 
0x1.41c9b303bfbf1bb3465e771d2c5fp-5601Li,/* #42 */
+    0x1.41c9b303bfb510p-9771L - 0x1.0000000000000p0Li, /* #43 */
+    0x1.41c9b303bfb510p-9771L - 0x1.0000000000000p0Li, /* #44 */
+    0x1.41c9b303bfb50d65ae407974c131p-9001L - 
0x1.0000000000000000000000000000p+0Li,/* #45 */
+    0x1.41c9b303bfb50d65ae407974c131p-9001L - 
0x1.0000000000000000000000000000p+0Li,/* #46 */
+    0x1.41c9b303bfb50d65ae407974c131p-9001L - 
0x1.0000000000000000000000000000p+0Li,/* #47 */
+    0x1.41c9b303bfb50d65ae407974c131p-9001L - 
0x1.0000000000000000000000000000p+0Li,/* #48 */
+    0x1.41c9b303bfb50d65ae407974c131p-9001L - 
0x1.0000000000000000000000000000p+0Li,/* #49 */
+    0x1.41c9b303bfb50d65ae407974c131p-9001L - 
0x1.0000000000000000000000000000p+0Li,/* #50 */
+    0x1.41c9b303bfb50d65ae407974c131p-9001L - 
0x1.0000000000000000000000000000p+0Li,/* #51 */
+    0x1.41c9b303bfb50d65ae407974c131p-9001L - 
0x1.0000000000000000000000000000p+0Li,/* #52 */
+    -0x1.41c9b303bfb50d65ae407974c131p-9045L - 
0x1.0000000000000000000000000000p+0Li,/* #53 */
+    0x1.41c9b303bfb50d65ae407974c131p+7199L - 
0x1.0000000000000000000000000000p+8100Li,/* #54 */
+    0x1.6f0647208a31a185daaf720445b3p+9899L - 
0x1.cd580bc4697c9439a5da55b27b9dp+9898Li,/* #55 */
+    0x1.6f0647208a31a185daaf720445b3p+10049L - 
0x1.cd580bc4697c9439a5da55b27b9dp+10048Li,/* #56 */
+    0x1.fffffffffffffffffffffffff35cp+7899L - 
0x1.41c9b303bfb50d65ae407974b940p+7849Li,/* #57 */
+    0x1.6f0647208a31a185daaf720445b3p+6998L 
-0x1.cd580bc4697c9439a5da55b27b9dp+6997Li,/* #58 */
+    0x1.00000000000000p5999L + 0x0.0000000000000p0Li,  /* #59 */
+    0x1.00000000000000p5199L + 0x0.0000000000000p0Li,  /* #60 */
+    0x1.0p364L - 0x1.0p-1022Li,                                /* #61 */
+    0x1.0p264L + 0x0.0p0Li,                            /* #62 */
+    0x1.0p1004L + 0x1.0p1023Li,                                /* #63 */
+    0x1.0p1004L - 0x1.0p504Li,                         /* #64 */
+    0x1.0p1020L - 0x1.0p630Li,                         /* #65 */
+    0x1.0p1020L - 0x1.0p675Li,                         /* #66 */
+    0x1.0p1020L - 0x1.0p676Li,                         /* #67 */
+    0x1.0p1020L - 0x1.0p680Li,                         /* #68 */
+    0x1.0p1020L - 0x1.0p730Li,                         /* #69 */
+    0x1.0p1020L - 0x1.0p830Li,                         /* #70 */
+    0x1.0p1020L - 0x1.0p930Li,                         /* #71 */
+    0x1.0p1020L - 0x1.0p930Li,                         /* #72 */
+    0x1.0p1020L - 0x1.0p930Li,                         /* #73 */
+    0x1.16f21023358c1a682913ce1ecedbp+1L - 
0x1.f5b3b6a5c6c8fc5516bd3fd10df0p+2Li,/* #74 */
+    0x1.408cd63069a0a44f387b3b6a5c6dp+1L - 
0x1.6a5c6c8fc5516bd3fd10defdcca7p+0Li,/* #75 */
+    0x1.4b8d91f8aa2d7a7fa21bdfb994e8p+1L - 
0x1.ee6539f2cbeb7618f09892b4726ep+2Li,/* #76 */
+    0x1.0bc8408cd63069a0a44f387b3b6ap+1L - 
0x1.daceda971b23f1545af4ff4437bfp+2Li,/* #77 */
+    0x1.e2a8b5e9fe886f7ee6539f2cbeb7p-1L + 
0x1.a682913ce1eceda971b23f1545afp-3Li,/* #78 */
+    0x1.c3d9db52e3647e2a8b5e9fe886f8p-2L + 
0x1.77908119ac60d341489e70f676d5p-7Li,/* #79 */
+    0x1.16bd3fd10defdcca73e597d6ec32p-3L - 
0x1.f5bb0c784c495a393703aae942c0p-2Li,/* #80 */
+    0x1.2b9c43596635aca22a41182c285ap+10L - 
0x1.9fc933bd0b3ad039dc99076c4ce5p+8Li,/* #81 */
+    0x1.3079a1638e441f32a5aa1b723a40p+10L + 
0x1.af56ff5f5ee08187c006518c7d30p+8Li,/* #82 */
+    -0x1.3079a23d4567c32f17cb15076791p+10L - 
0x1.af56f5c477a85482b70a5dca7d62p+8Li,/* #83 */
+    -0x1.3079a23d4567c32f17cb15076791p+10L + 
0x1.af56f5c477a85482b70a5dca7d62p+8Li,/* #84 */
+    0x1.3079a1638e441f32a5aa1b723a40p+10L - 
0x1.af56ff5f5ee08187c006518c7d30p+8Li,/* #85 */
+    0x1.a27419691d7845d82a1a772258e1p+1L - 
0x1.5e60a434afdfd9c1419d2d842cc2p+1Li,/* #86 */
+    0x1.004a6235052b9121263d9c6bbcf4p+1L - 
0x1.077970d2017e9637b3c295f86c7cp-10Li,/* #87 */
+    -0x1.8825f329396f03f5c813952be304p-1L + 
0x1.492fb9aef1c34c5b463f22218a07p-1Li,/* #88 */
+    0x1.f6417093502e5e03be9d91d13905p-1L - 
0x1.0d936b36d23867a75c17114df9ecp-2Li,/* #89 */ 
+    0x1.2e6b76d3c1a73913587096f2fbbdp+1L + 
0x1.4911f033da9e45b4f001b864e760p-3Li,/* #90 */
+    0x1.a1ced84e145e8f5819427f5ea14ep-5L + 
0x1.61ced4d722d37f7966cd7c068306p+1Li,/* #91 */
+    0x1.064f7bc3e4833b1e0eff54a3a904p+0L + 
0x1.1551c3ae74bd101253588f742243p-2Li,/* #92 */
+    -0x1.344545d341aa8a2f9369a5ec3128p+0L - 
0x1.2aa5da272dd3d1102e6c406cbc70p+2Li,/* #93 */
+    -0x1.06d98474fe894386c4fbcde25e3bp-1L + 
0x1.6ad8d7df1b0c7bd93084ecbd82ebp+1Li,/* #94 */
+    -0x1.6deb5a7bec3179206289e83a4b65p+2L - 
0x1.4028b8d0a2fc1a39d6eea3f8bb57p+3Li,/* #95 */
+    0x1.fbd4560086545ef1cd464e251162p-4L + 
0x1.8c3278a9ca9b4301daab9f0d2131p-5Li,/* #96 */
+    -0x1.0106f72f51797fe080e71a8997a9p-5L - 
0x1.69200e9aa701c65e7069852801a9p-7Li,/* #97 */ 
+    -0x1.00000929d9955dc02885e23cfb27p-16L - 
0x1.74d2319d4234332ac55f42cc52d5p-18Li,/* #98 */
+    -0x1.39887db89b6869b8281a9f4222eep-17L + 
0x1.c89cdfee34a155f4544297ef8798p-19Li,/* #99 */
+    0x1.a746a452d342fdd9745efdf4d52ap+0L - 
0x1.e72d9f35e28e6208e42c8cc5a560p-2Li/* #100 */
+  };
+
+
+__complex FTYPE errmax[NUMCNT] =
+  {
+    0x0.000000000000000000000000p0L + 0x0.000000000000000000000000p0Li,/* #1 */
+    0x0.000000000000000000000001p1023+ 0x0.000000000000000000000001p0Li,/* #2 
*/
+    0x0.000000000000000000000001p346L + 
0x0.000000000000000100000000p-1008Li,/* #3 */
+    0x0.000000000000000000000001p1023+ 0x0.000000000000000000000001p0Li,/* #4 
*/
+    0x0.000000000000000000000001p364L + 0x0.000000000000000000000000p0Li,/* #5 
*/
+    0x0.000000000000000000000000p0L + 0x0.000000000000000000000001p20Li,/* #6 
*/
+    0x0.000000000000000000000001p961L + 0x0.00000000000000000000001p982Li,/* 
#7 */
+    0x0.000000000000000000000001p-1L + 0x0.00000000000000000000001p-3Li,       
/* #8 */
+    0x0.000000000000000000000001p-9L + 0x0.000000000000000000000001p-9Li,/* #9 
*/
+    0x0.000000000000000000000001p279L + 
0x0.0000000000000000000000001p-171Li,/* #10 */
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000000001p0Li,/* #11 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p0Li,/* #12 */
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p0Li,/* #13 */
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p0Li,/* #14 */
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p0Li,/* #15 */
+    0x0.000000000000000000000001p33L + 0x0.0000000000000000000001p-10Li,/* #16 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-65Li,/* #17 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-54Li,/* #18 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-53Li,/* #19 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-52Li,/* #20 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-51Li,/* #21 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-50Li,/* #22 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-49Li,/* #23 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-48Li,/* #24 
*/
+    0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-48Li,/* #25 
*/
+    0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-47Li,/* #26 
*/
+    0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-44Li,/* #27 
*/
+    0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-43Li,/* #28 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-3Li,/* #29 */
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p0Li,/* #30 */
+    0x0.000000000000000000000001p-39L + 0x0.0000000000000000000001p0Li,/* #31 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-65Li,/* #32 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-124Li,/* #33 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-80Li,/* #34 
*/
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-8044Li,/* 
#35 */
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-7999Li,/* 
#36 */
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-8044Li,/* 
#37 */
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-8044Li,/* 
#38 */
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-7999Li,/* 
#39 */
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-7200Li,/* 
#40 */
+    0x0.000000000000000000000001p900L + 0x0.0000000000000000000001p-720Li,/* 
#41 */
+    0x0.000000000000000000000001p2700L + 0x0.0000000000000000000001p-560Li,/* 
#42 */
+    0x0.000000000000100000000000p-9771L+ 0x0.0000000000000000000001p0Li,/* #43 
*/
+    0x0.000000000000100000000001p-9771L+ 0x0.0000000000000000000001p0Li,/* #44 
*/
+    0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #45 
*/
+    0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #46 
*/
+    0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #47 
*/
+    0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #48 
*/
+    0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #49 
*/
+    0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #50 
*/
+    0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #51 
*/
+    0x0.000000000000000000000001p-9001L+ 0x0.0000000000000000000001p0Li,/* #52 
*/
+    0x0.000000000000000000000001p-9045L+ 0x0.0000000000000000000001p0Li,/* #53 
*/
+    0x0.000000000000000000000001p7199L+ 0x0.0000000000000000000001p8100Li,/* 
#54 */
+    0x0.000000000000000000000001p9899L+ 0x0.0000000000000000000001p9898Li,/* 
#55 */
+    0x0.000000000000000000000001p10049L+ 0x0.0000000000000000000001p10048Li,/* 
#56 */
+    0x0.000000000000000000000001p7899L+ 0x0.0000000000000000000001p7849Li,/* 
#57 */
+    0x0.000000000000000000000001p6998L+ 0x0.0000000000000000000001p6997Li,/* 
#58 */
+    0x0.000000000000000000000001p5999L+ 0x0.0000000000000000000001p0Li,/* #59 
*/
+    0x0.000000000000000000000001p5199L+ 0x0.0000000000000000000001p0Li,/* #60 
*/
+    0x0.000000000000000000000001p364L+ 0x0.0000000000000000000000p0Li,/* #61 */
+    0x0.000000000000000000000001p264L+ 0x0.0000000000000000000001p0Li,/* #62 */
+    0x0.000000000000000000000001p1004L+ 0x0.0000000000000000000001p1023Li,/* 
#63 */
+    0x0.000000000000000000000001p1004L+ 0x0.0000000000000000000001p504Li,/* 
#64 */
+    0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p630Li,/* 
#65 */
+    0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p675Li,/* 
#66 */
+    0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p676Li,/* 
#67 */
+    0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p680Li,/* 
#68 */
+    0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p730Li,/* 
#69 */
+    0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p830Li,/* 
#70 */
+    0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p930Li,/* 
#71 */
+    0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p930Li,/* 
#72 */
+    0x0.000000000000000000000001p1020L+ 0x0.0000000000000000000001p930Li,/* 
#73 */
+    0x0.000000000000000000000001p7L + 0x0.0000000000000000000001p0Li,/* #74 */
+    0x0.000000000000000000000001p1L + 0x0.0000000000000000000001p0Li,/* #75 */
+    0x0.000000000000000000000001p1L + 0x0.0000000000000000000001p2Li,/* #76 */
+    0x0.000000000000000000000001p1L + 0x0.0000000000000000000001p2Li,/* #77 */
+    0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-3Li,/* #78 
*/
+    0x0.000000000000000000000001p-2L + 0x0.0000000000000000000001p-7Li,/* #79 
*/
+    0x0.000000000000000000000001p-3L + 0x0.0000000000000000000001p-2Li,/* #80 
*/
+    0x0.000000000000000000000001p10L + 0x0.0000000000000000000001p8Li,/* #81 */
+    0x0.000000000000000000000001p10L + 0x0.0000000000000000000001p8Li,/* #82 */
+    0x0.000000000000000000000001p10L + 0x0.0000000000000000000001p8Li,/* #83 */
+    0x0.000000000000000000000001p10L + 0x0.0000000000000000000001p8Li,/* #84 */
+    0x0.000000000000000000000001p10L + 0x0.0000000000000000000001p8Li,/* #85 */
+    0x0.000000000000000000000001p1L + 0x0.0000000000000000000001p1Li,/* #86 */
+    0x0.000000000000000000000001p1L + 0x0.0000000000000000000001p-10Li,/* #87 
*/
+    0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-1Li,/* #88 
*/
+    0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p-2Li,/* #89 
*/
+    0x0.000000000000000000000001p1L + 0x0.0000000000000000000001p-3Li,/* #90 */
+    0x0.000000000000000000000001p-5L + 0x0.0000000000000000000001p1Li,/* #91 */
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-2Li,/* #92 */
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p2Li,/* #93 */
+    0x0.000000000000000000000001p-1L + 0x0.0000000000000000000001p1Li,/* #94 */
+    0x0.000000000000000000000001p2L + 0x0.0000000000000000000001p3Li,/* #95 */
+    0x0.000000000000000000000001p-4L + 0x0.0000000000000000000001p-5Li,/* #96 
*/
+    0x0.000000000000000000000001p-5L + 0x0.0000000000000000000001p-7Li,/* #97 
*/
+    0x0.000000000000000000000001p-16L + 0x0.0000000000000000000001p-18Li,/* 
#98 */
+    0x0.000000000000000000000001p-17L + 0x0.0000000000000000000001p-19Li,/* 
#99 */
+    0x0.000000000000000000000001p0L + 0x0.0000000000000000000001p-2Li/* #100 */
+  };
+
+
+int main(int argc, char** argv)
+{
+  int i;
+  FTYPE xr, xi, yr, yi, zr, zi, zzr, zzi;
+  FTYPE er, ei;
+  __complex FTYPE ans[NUMCNT];
+  int errcnt;
+
+  errcnt = 0;
+  for (i = 0; i < NUMCNT; i++)
+    {
+      ans[i] = x[i] / y[i];
+      if( z[i] != z[i] )   /* Check for nan/inf case */
+       {
+         zr = __real__ z[i];
+         zi = __imag__ z[i];
+         zzr = __real__ ans[i];
+         zzi = __imag__ ans[i];
+         er = __real__ errmax[i];
+         ei = __imag__ errmax[i];
+         errcnt++;
+         printf("x %3d    " FMT " " FMT "i\n",
+                i + 1, __real__ x[i], __imag__ x[i]);
+         printf ("y %3d   " FMT " " FMT "i\n",
+                 i + 1, __real__ y[i], __imag__ y[i]);
+         printf("expected " FMT " " FMT "i\n",
+                __real__ z[i], __imag__ z[i]);
+         printf("actual   " FMT " " FMT "i /* #%d */ FAIL\n",
+                __real__ ans[i], __imag__ ans[i], i + 1);
+         printf("diff     " FMT " " FMT "i\n",
+                zr - zzr, zi - zzi);
+         printf("errmax   " FMT " " FMT "i\n\n",
+                er, ei);
+       }
+      else
+       {
+         if( z[i] != ans[i] )
+           {
+             zr = __real__ z[i];
+             zi = __imag__ z[i];
+             zzr = __real__ ans[i];
+             zzi = __imag__ ans[i];
+             er = __real__ errmax[i];
+             ei = __imag__ errmax[i];
+             if( (FABS(zr-zzr) > er) || (FABS(zi-zzi) > ei))
+               {        /* report if error exceeds error max */
+                 errcnt++;
+                 printf("x %3d    " FMT " " FMT "i\n",
+                        i + 1, __real__ x[i], __imag__ x[i]);
+                 printf ("y %3d    " FMT " " FMT "i\n",
+                         i + 1, __real__ y[i], __imag__ y[i]);
+                 printf("expected " FMT " " FMT "i\n",
+                        __real__ z[i], __imag__ z[i]);
+                 printf("actual   " FMT " " FMT "i /* #%d */ FAIL\n",
+                        __real__ ans[i], __imag__ ans[i], i + 1);
+                 printf("diff     " FMT " " FMT "i\n",
+                        zr - zzr, zi - zzi);
+                 printf("errmax   " FMT " " FMT "i\n\n",
+                        er, ei);
+               }
+           }
+       }
+    }
+  if( errcnt > 0)
+    {
+      printf("%2d Failures\n",errcnt);
+      abort();
+    }
+  printf("PASS\n");
+  return 0;
+}
+
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr59714_32.c 
b/gcc/testsuite/gcc.c-torture/execute/pr59714_32.c
new file mode 100644
index 0000000..170e363
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr59714_32.c
@@ -0,0 +1,506 @@
+#include <stdio.h>
+#include <math.h>
+
+extern void abort (void);
+#define FABS(x) ((x) >= 0 ? (x) : -(x))
+#define FTYPE   float
+#define FMT     "%-17.6a"
+
+/*
+   Tables of numbers for complex division testing
+   All values in hex format
+   z[i] == correctly rounded value of x[i]/y[i];
+ */
+
+#define NUMCNT 100
+
+__complex FTYPE x[NUMCNT] =
+  {
+    0x1.0p0 + 0x1.0p0i,                        /* #1 */
+    0x1.0p0 + 0x1.0p0i,                        /* #2 */
+    0x1.0p127 + 0x1.0p-126i,           /* #3 */
+    0x1.0p127 + 0x1.0p127i,            /* #4 */
+    0x1.0p124 + 0x1.0p-44i,            /* #5 */
+    0x1.0p-71 + 0x1.0p125i,            /* #6 */
+    0x1.0p-47 + 0x1.0p-54i,            /* #7 */
+    0x1.0p-149 + 0x1.0p-149i,          /* #8 */
+    0x1.0p120 + 0x1.0p-89i,            /* #9 */
+    0x1.0p-22 + 0x1.0p-146i,           /* #10 */
+    0x1.0p0 + 0x3.0p0i,                        /* #11 */
+    -0x1.0p0 + 0x3.0p0i,               /* #12 */
+    0x1.0p0 - 0x3.0p0i,                        /* #13 */
+    0x3.0p0 + 0x1.0p0i,                        /* #14 */
+    0x3.0p0 + 0x4.0p0i,                        /* #15 */
+    0x1.0p0 - 0x3.000002p-20i,         /* #16 */
+    0x1.0p0 + 0x3.000002p-20i,         /* #17 */
+    0x1.0p0 + 0x1.800002p1i,           /* #18 */
+    0x1.0p0 + 0x1.800004p1i,           /* #19 */
+    0x1.0p0 + 0x1.800008p1i,           /* #20 */
+    0x1.0p0 + 0x1.800010p1i,           /* #21 */
+    0x1.0p0 + 0x1.800020p1i,           /* #22 */
+    0x1.0p0 + 0x1.800040p1i,           /* #23 */
+    0x1.0p0 + 0x1.800080p1i,           /* #24 */
+    0x1.0p0 + 0x1.7ffff8p1i,           /* #25 */
+    0x1.0p0 + 0x1.7ffff0p1i,           /* #26 */
+    0x1.0p0 + 0x1.7fff80p1i,           /* #27 */
+    0x1.0p0 + 0x1.7fff00p1i,           /* #28 */
+    0x5.0p0 + 0x5.0p0i,                        /* #29 */
+    0x4.0p0 + 0x3.0p0i,                        /* #30 */
+    -0x4.0p0 + 0x3.000004p0i,           /* #31 */
+    0x3.000004p-20 + 0x1.0p0i,         /* #32 */
+    0x1.000002p-80 + 0x1.0p0i,         /* #33 */
+    0x1.000002p-100 + 0x1.0p0i,                /* #34 */
+    0x1.0p0 + 0x1.000002p-100i,                /* #35 */
+    -0x1.0p0 + 0x1.000002p-100i,       /* #36 */
+    -0x1.0p0 + 0x1.000002p-100i,       /* #37 */
+    -0x1.0p0 + 0x1.000002p-100i,       /* #38 */
+    0x1.0p0 - 0x1.000002p-100i,                /* #39 */
+    0x1.0p40 - 0x1.000010p-60i,                /* #40 */
+    0x1.975300p50 - 0x1.000002p-100i,  /* #41 */
+    0x1.975300p100 - 0x1.000002p-100i, /* #42 */
+    0x1.975300p77 - 0x1.000002p-60i,   /* #43 */
+    0x1.975300p87 - 0x1.000002p-60i,   /* #44 */
+    0x1.975300p0 - 0x1.000002p-60i,    /* #45 */
+    0x1.975300p50 - 0x1.000002p-60i,   /* #46 */
+    0x1.975300p60 - 0x1.000002p-60i,   /* #47 */
+    0x1.975300p70 - 0x1.000002p-60i,   /* #48 */
+    0x1.975300p80 - 0x1.000002p-60i,   /* #49 */
+    0x1.975300p90 - 0x1.000002p-60i,   /* #50 */
+    0x1.975300p100 - 0x1.000002p-60i,  /* #51 */
+    0x1.975300p110 - 0x1.000002p-60i,  /* #52 */
+    0x1.975300p115 - 0x1.000002p-60i,  /* #53 */
+    0x1.975300p120 - 0x1.000002p-0i,   /* #54 */
+    0x1.975300p125 + 0x1.000002p70i,   /* #55 */
+    0x1.975300p126 + 0x1.000000p80i,   /* #56 */
+    0x1.975300p100 + 0x1.000000p90i,   /* #57 */
+    0x1.975300p90 + 0x1.000000p95i,    /* #58 */
+    0x1.975300p80 + 0x1.000000p100i,   /* #59 */
+    0x1.97530p72 + 0x1.000000p72i,     /* #60 */
+    0x1.0p120 + 0x1.0p-844i,           /* #61 */
+    0x1.0p90 + 0x1.0p-844i,            /* #62 */
+    0x1.0p54 + 0x1.0p53i,              /* #63 */
+    0x1.0p14 + 0x1.0p-51i,             /* #64 */
+    0x1.0p90 + 0x1.0p-51i,             /* #65 */
+    0x1.0p85 + 0x1.0p-51i,             /* #66 */
+    0x1.0p84 + 0x1.0p-51i,             /* #67 */
+    0x1.0p80 + 0x1.0p-51i,             /* #68 */
+    0x1.0p81 + 0x1.0p-51i,             /* #69 */
+    0x1.0p71 + 0x1.0p-51i,             /* #70 */
+    0x1.0p61 + 0x1.0p-51i,             /* #71 */
+    0x1.0p51 + 0x1.0p-51i,             /* #72 */
+    0x1.0p41 + 0x1.0p-51i,             /* #73 */
+    0x13.0p4 + 0x1.0p-4i,              /* #74 */
+    0x13.0p2 + 0x13.0p2i,              /* #75 */
+    0x13.0p4 + 0x1.0p4i,               /* #76 */
+    0x12.0p4 + 0x12.0p-4i,             /* #77 */
+    0x1.0p1 + 0x12.0p1i,               /* #78 */
+    0x1.0p2 + 0x1.0p4i,                        /* #79 */
+    0x13.0p0 + 0x0.0p0i,               /* #80 */
+    0x1.01p12 - 0x1.037p-12i,          /* #81 */
+    -0x1.01p12 - 0x1.037p-12i,         /* #82 */
+    0x1.01p12 - 0x1.037p-12i,          /* #83 */
+    -0x1.01p12 - 0x1.037p-12i,         /* #84 */
+    0x1.01p12 - 0x1.037p-12i,          /* #85 */
+    0x1.123456p3 - 0x1.789123p4i,      /* #86 */
+    0x1.123457p3 - 0x1.789123p4i,      /* #87 */
+    0x1.123458p3 + 0x1.789123p4i,      /* #88 */
+    0x1.123456p3 + 0x1.789122p4i,      /* #89 */
+    0x1.123456p3 + 0x1.789121p4i,      /* #90 */
+    0x1.123456p3 + 0x1.789120p4i,      /* #91 */
+    0x1.123455p3 - 0x1.789123p4i,      /* #92 */
+    0x1.123454p3 - 0x1.789122p4i,      /* #93 */
+    -0x1.123453p3 + 0x1.789121p4i,     /* #94 */
+    0x1.123452p3 + 0x1.789120p4i,      /* #95 */
+    0x1.123451p3 - 0x1.789127p4i,      /* #96 */
+    0x1.123459p3 - 0x1.789125p4i,      /* #97 */
+    -0x1.123450p3 + 0x1.789124p4i,     /* #98 */
+    0x1.123456p3 + 0x1.789123p4i,      /* #99 */
+    0x1.123456p3 - 0x1.789123p4i       /* #100 */
+  };
+
+__complex FTYPE y[NUMCNT] =
+  {
+    0x1.0p0 + 0x1.0p127i,              /* #1 */
+    0x1.0p-126 + 0x1.0p-126i,          /* #2 */
+    0x1.0p77 + 0x1.0p-77i,             /* #3 */
+    0x1.0p0 + 0x1.0p0i,                        /* #4 */
+    0x1.0p65 + 0x1.0p-78i,             /* #5 */
+    0x1.0p99 + 0x1.0p-33i,             /* #6 */
+    0x1.0p-133 + 0x1.0p-140i,          /* #7 */
+    0x1.0p-148 + 0x1.0p-148i,          /* #8 */
+    0x1.0p127 + 0x1.0p127i,            /* #9 */
+    0x1.0p-34 + 0x1.0p-79i,            /* #10 */
+    0x1.0p0 + 0x3.0p0i,                        /* #11 */
+    -0x1.0p0 + 0x3.0p0i,               /* #12 */
+    0x1.0p0 - 0x3.0p0i,                        /* #13 */
+    0x3.0p0 + 0x1.0p0i,                        /* #14 */
+    0x3.0p0 + 0x4.0p0i,                        /* #15 */
+    -0x2.0p0 + 0x8.0p-10i,             /* #16 */
+    0x1.0p0 + 0x3.0p-20i,              /* #17 */
+    0x1.0p0 + 0x3.0p0i,                        /* #18 */
+    0x1.0p0 + 0x3.0p0i,                        /* #19 */
+    0x1.0p0 + 0x3.0p0i,                        /* #20 */
+    0x1.0p0 + 0x3.0p0i,                        /* #21 */
+    0x1.0p0 + 0x3.0p0i,                        /* #22 */
+    0x1.0p0 + 0x3.0p0i,                        /* #23 */
+    0x1.0p0 + 0x3.0p0i,                        /* #24 */
+    0x1.0p0 + 0x3.0p0i,                        /* #25 */
+    0x1.0p0 + 0x3.0p0i,                        /* #26 */
+    0x1.0p0 + 0x3.0p0i,                        /* #27 */
+    0x1.0p0 + 0x3.0p0i,                        /* #28 */
+    0x3.0p0 + 0x4.0p0i,                        /* #29 */
+    0x3.0p0 - 0x4.0p0i,                        /* #30 */
+    -0x3.0p0 - 0x4.0p0i,               /* #31 */
+    0x3.0p-20 + 0x1.0p0i,              /* #32 */
+    0x1.000000p-80 + 0x1.0p0i,         /* #33 */
+    0x1.0p-80 + 0x1.0p0i,              /* #34 */
+    0x1.0p0 + 0x1.0p-60i,              /* #35 */
+    0x1.0p0 + 0x1.0p-60i,              /* #36 */
+    -0x1.0p0 + 0x1.0p-60i,             /* #37 */
+    0x1.0p0 - 0x1.0p-60i,              /* #38 */
+    0x1.0p0 + 0x1.0p-60i,              /* #39 */
+    0x1.0p40 + 0x1.0p-60i,             /* #40 */
+    0x1.97530p50 + 0x1.0p-60i,         /* #41 */
+    0x1.97530p80 + 0x1.0p-60i,         /* #42 */
+    0x1.0p-60 + 0x1.97530p57i,         /* #43 */
+    0x1.0p-50 + 0x1.97530p57i,         /* #44 */
+    0x1.0p-90 + 0x1.97530p0i,          /* #45 */
+    0x1.0p-80 + 0x1.97530p10i,         /* #46 */
+    0x1.0p-70 + 0x1.97530p20i,         /* #47 */
+    0x1.0p-60 + 0x1.97530p30i,         /* #48 */
+    0x1.0p-50 + 0x1.97530p40i,         /* #49 */
+    0x1.0p-40 + 0x1.97530p50i,         /* #50 */
+    0x1.0p-30 + 0x1.97530p60i,         /* #51 */
+    0x1.0p-20 + 0x1.97530p70i,         /* #52 */
+    0x1.0p-10 + 0x1.97530p80i,         /* #53 */
+    0x1.0p-0 + 0x1.97530p90i,          /* #54 */
+    0x1.97530p10 + 0x1.0000p10i,       /* #55 */
+    0x1.97530p50 + 0x1.0000p50i,       /* #56 */
+    0x1.97530p10 + 0x1.0000p50i,       /* #57 */
+    0x1.97530p1 + 0x1.0000p1i,         /* #58 */
+    0x1.97530p1 + 0x1.0000p1i,         /* #59 */
+    0x1.97530p1 + 0x1.0000p1i,         /* #60 */
+    0x1.0p66 + 0x1.0p-73i,             /* #61 */
+    0x1.0p66 + 0x1.0p-73i,             /* #62 */
+    0x1.0p-50 + 0x1.0p-100i,           /* #63 */
+    0x1.0p0 + 0x1.0p-50i,              /* #64 */
+    0x1.0p-11 + 0x1.0p-50i,            /* #65 */
+    0x1.0p-14 + 0x1.0p-50i,            /* #66 */
+    0x1.0p-15 + 0x1.0p-50i,            /* #67 */
+    0x1.0p-16 + 0x1.0p-50i,            /* #68 */
+    0x1.0p-21 + 0x1.0p-50i,            /* #69 */
+    0x1.0p-31 + 0x1.0p-50i,            /* #70 */
+    0x1.0p-41 + 0x1.0p-50i,            /* #71 */
+    0x1.0p-51 + 0x1.0p-60i,            /* #72 */
+    0x1.0p-61 + 0x1.0p-70i,            /* #73 */
+    0x5.0p1 + 0x12.0p1i,               /* #74 */
+    0x5.0p1 + 0x12.0p1i,               /* #75 */
+    0x5.0p1 + 0x12.0p1i,               /* #76 */
+    0x5.0p1 + 0x12.0p1i,               /* #77 */
+    0x5.0p1 + 0x12.0p1i,               /* #78 */
+    0x5.0p1 + 0x12.0p1i,               /* #79 */
+    0x5.0p1 + 0x12.0p1i,               /* #80 */
+    0x3.1p0 + 0x1.1p0i,                        /* #81 */
+    -0x3.0p0 + 0x1.1p0i,               /* #82 */
+    -0x3.0p0 + 0x1.1p0i,               /* #83 */
+    0x3.0p0 + 0x1.1p0i,                        /* #84 */
+    0x3.0p0 + 0x1.1p0i,                        /* #85 */
+    0x1.456789p2 - 0x1.789123p1i,      /* #86 */
+    0x1.124569p2 - 0x1.781239p3i,      /* #87 */
+    0x1.123457p3 - 0x1.789126p4i,      /* #88 */
+    0x1.123456p1 + 0x1.891237p4i,      /* #89 */
+    0x1.123456p2 + 0x1.357123p3i,      /* #90 */
+    0x1.123456p3 - 0x1.789123p1i,      /* #91 */
+    0x1.123456p1 - 0x1.789123p4i,      /* #92 */
+    0x1.123456p2 + 0x1.789123p1i,      /* #93 */
+    0x1.123456p3 + 0x1.789123p0i,      /* #94 */
+    -0x1.123456p1 - 0x1.789153p-2i,    /* #95 */
+    -0x1.123456p2 - 0x1.785123p7i,     /* #96 */
+    -0x1.123456p3 + 0x1.789123p9i,     /* #97 */
+    0x1.123456p1 - 0x1.789123p20i,     /* #98 */
+    0x1.123456p2 - 0x1.337788p21i,     /* #99 */
+    0x1.123457p3 - 0x1.789991p3i       /* #100 */
+  };
+
+__complex FTYPE z[NUMCNT] =
+  {
+    0x1.0p-127 - 0x1.0p-127i,          /* #1 */
+    0x1.0p126 + 0x0.0p0i,              /* #2 */
+    0x1.0p50 - 0x1.0p-104i,            /* #3 */
+    0x1.0p127 + 0x0.0p0i,              /* #4 */
+    0x1.0p59 - 0x1.0p-84i,             /* #5 */
+    0x1.0p-106 + 0x1.0p26i,            /* #6 */
+    0x1.0p86 + 0x0.0p0i,               /* #7 */
+    0x1.0p-1 + 0x0.0p0i,               /* #8 */
+    0x1.0p-8  - 0x1.0p-8i,             /* #9 */
+    0x1.0p12 - 0x1.0p-33i,             /* #10 */
+    0x1.0p0 + 0x0.0p0i,                        /* #11 */
+    0x1.0p0 + 0x0.0p0i,                        /* #12 */
+    0x1.0p0 + 0x0.0p0i,                        /* #13 */
+    0x1.0p0 + 0x0.0p0i,                        /* #14 */
+    0x1.0p0 + 0x0.0p0i,                        /* #15 */
+    -0x1.fffe00p-2 - 0x1.ff9e00p-10i,  /* #16 */
+    0x1.000000p0 + 0x0.000000p0i,      /* #17 */
+    0x1.000002p0 + 0x1.99999ap-26i,    /* #18 */
+    0x1.000002p0 + 0x1.99999ap-25i,    /* #19 */
+    0x1.000004p0 + 0x1.99999ap-24i,    /* #20 */
+    0x1.00000ap0 + 0x1.99999ap-23i,    /* #21 */
+    0x1.000014p0 + 0x1.99999ap-22i,    /* #22 */
+    0x1.000026p0 + 0x1.99999ap-21i,    /* #23 */
+    0x1.00004cp0 + 0x1.99999ap-20i,    /* #24 */
+    0x1.fffff6p-1 - 0x1.99999ap-24i,   /* #25 */
+    0x1.ffffecp-1 - 0x1.99999ap-23i,   /* #26 */
+    0x1.ffff66p-1 - 0x1.99999ap-20i,   /* #27 */
+    0x1.fffeccp-1 - 0x1.99999ap-19i,   /* #28 */
+    0x1.666666p0 - 0x1.99999ap-3i,     /* #29 */
+    0x0.0p0 + 0x1.0p0i,                        /* #30 */
+    -0x1.47ae14p-25 - 0x1.000000p0i,   /* #31 */
+    0x1.000000p0 - 0x1.000000p-42i,    /* #32 */
+    0x1.000000p0 - 0x1.000000p-103i,   /* #33 */
+    0x1.000000p0 + 0x1.ffffe0p-81i,    /* #34 */
+    0x1.000000p0 - 0x1.000000p-60i,    /* #35 */
+    -0x1.000000p0 + 0x1.000000p-60i,   /* #36 */
+    0x1.000000p0 + 0x1.000000p-60i,    /* #37 */
+    -0x1.0000000p0 - 0x1.000000p-60i,  /* #38 */
+    0x1.000000p0 - 0x1.000000p-60i,    /* #39 */
+    0x1.000000p0 - 0x1.000008p-99i,    /* #40 */
+    0x1.000000p0 - 0x1.41c9b4p-111i,   /* #41 */
+    0x1.000000p20 - 0x1.41c9b4p-121i,  /* #42 */
+    0x1.41c99ep-98 - 0x1.000000p20i,   /* #43 */
+    0x1.41c9b4p-78 - 0x1.000000p30i,   /* #44 */
+    -0x1.41c9b6p-61 - 0x1.000000p0i,   /* #45 */
+    0x1.41c99ep-51 - 0x1.000000p40i,   /* #46 */
+    0x1.41c9b4p-51 - 0x1.000000p40i,   /* #47 */
+    0x1.41c9b4p-51 - 0x1.000000p40i,   /* #48 */
+    0x1.41c9b4p-51 - 0x1.000000p40i,   /* #49 */
+    0x1.41c9b4p-51 - 0x1.000000p40i,   /* #50 */
+    0x1.41c9b4p-51 - 0x1.000000p40i,   /* #51 */
+    0x1.41c9b4p-51 - 0x1.000000p40i,   /* #52 */
+    0x1.41c9b4p-56 - 0x1.000000p35i,   /* #53 */
+    0x1.41c9b4p-61 - 0x1.000000p30i,   /* #54 */
+    0x1.6f0648p114 - 0x1.cd580cp113i,  /* #55 */
+    0x1.6f0648p75 - 0x1.cd580cp74i,    /* #56 */
+    0x1.000000p40 - 0x1.975300p50i,    /* #57 */
+    0x1.38e3d6p92 + 0x1.beed4cp92i,    /* #58 */
+    0x1.21f3a0p97 + 0x1.cd57eep97i,    /* #59 */
+    0x1.000000p71 + 0x0.000000p0i,     /* #60 */
+    0x1.000000p54 - 0x1.000000p-85i,   /* #61 */
+    0x1.000000p24 - 0x1.000000p-115i,  /* #62 */
+    0x1.000000p104 + 0x1.000000p103i,  /* #63 */
+    0x1.000000p14 - 0x1.fffc00p-37i,   /* #64 */
+    0x1.000000p101 - 0x1.000000p62i,   /* #65 */
+    0x1.000000p99 - 0x1.000000p63i,    /* #66 */
+    0x1.000000p99 - 0x1.000000p64i,    /* #67 */
+    0x1.000000p96 - 0x1.000000p62i,    /* #68 */
+    0x1.000000p102 - 0x1.000000p73i,   /* #69 */
+    0x1.000000p102 - 0x1.000000p83i,   /* #70 */
+    0x1.ffff80p101 - 0x1.ffff80p92i,   /* #71 */
+    0x1.ffff80p101 - 0x1.ffff80p92i,   /* #72 */
+    0x1.ffff80p101 - 0x1.ffff80p92i,   /* #73 */
+    0x1.16f210p1 - 0x1.f5b3b6p2i,      /* #74 */
+    0x1.408cd6p1 - 0x1.6a5c6cp0i,      /* #75 */
+    0x1.4b8d92p1 - 0x1.ee653ap2i,      /* #76 */
+    0x1.0bc840p1 - 0x1.dacedap2i,      /* #77 */
+    0x1.e2a8b6p-1 + 0x1.a68292p-3i,    /* #78 */
+    0x1.c3d9dcp-2 + 0x1.779082p-7i,    /* #79 */
+    0x1.16bd40p-3 - 0x1.f5bb0cp-2i,    /* #80 */
+    0x1.2b9c44p10 - 0x1.9fc934p8i,     /* #81 */
+    0x1.3079a2p10 + 0x1.af5700p8i,     /* #82 */
+    -0x1.3079a2p10 - 0x1.af56f6p8i,    /* #83 */
+    -0x1.3079a2p10 + 0x1.af56f6p8i,    /* #84 */
+    0x1.3079a2p10 - 0x1.af5700p8i,     /* #85 */
+    0x1.a2741cp1 - 0x1.5e60a4p1i,      /* #86 */
+    0x1.004a64p1 - 0x1.077824p-10i,    /* #87 */
+    -0x1.8825f4p-1 + 0x1.492fbap-1i,   /* #88 */
+    0x1.f64170p-1 - 0x1.0d936ap-2i,    /* #89 */ 
+    0x1.2e6b76p1 + 0x1.4911e4p-3i,     /* #90 */
+    0x1.a1cec6p-5 + 0x1.61ced4p1i,     /* #91 */
+    0x1.064f7cp0 + 0x1.1551c2p-2i,     /* #92 */
+    -0x1.344548p0 - 0x1.2aa5dap2i,     /* #93 */
+    -0x1.06d986p-1 + 0x1.6ad8d8p1i,    /* #94 */
+    -0x1.6deb5ap2 - 0x1.4028b8p3i,     /* #95 */
+    0x1.fbd456p-4 + 0x1.8c3276p-5i,    /* #96 */
+    -0x1.0106f6p-5 - 0x1.69200cp-7i,   /* #97 */ 
+    -0x1.000008p-16 - 0x1.74d230p-18i, /* #98 */
+    -0x1.39887ep-17 + 0x1.c89ce0p-19i, /* #99 */
+    0x1.a746a4p0 - 0x1.e72da8p-2i      /* #100 */
+  };
+
+
+__complex FTYPE errmax[NUMCNT] =
+  {
+    0x0.000000p0    + 0x0.000000p0i,   /* #1 */
+    0x0.000002p126  + 0x0.000002p-126i,        /* #2 */
+    0x0.000002p50   + 0x0.000002p-104i,        /* #3 */
+    0x0.000002p127  + 0x0.000002p0i,   /* #4 */
+    0x0.000002p59   + 0x0.000002p-84i, /* #5 */
+    0x0.000000p-106 + 0x0.000002p26i,  /* #6 */
+    0x0.000002p86   + 0x0.000002p0i,   /* #7 */
+    0x0.000002p-1   + 0x0.000002p0i,   /* #8 */
+    0x0.000002p-8   + 0x0.000002p-8i,  /* #9 */
+    0x0.000002p12   + 0x0.000002p-33i, /* #10 */
+    0x0.000002p0    + 0x0.000002p0i,   /* #11 */
+    0x0.000002p0    + 0x0.000002p0i,   /* #12 */
+    0x0.000002p0    + 0x0.000002p0i,   /* #13 */
+    0x0.000002p0    + 0x0.000002p0i,   /* #14 */
+    0x0.000002p0    + 0x0.000002p0i,   /* #15 */
+    0x0.000002p-2   + 0x0.000002p-10i, /* #16 */
+    0x0.000002p0    + 0x0.000002p0i,   /* #17 */
+    0x0.000002p0    + 0x0.000002p-26i, /* #18 */
+    0x0.000002p0    + 0x0.000002p-25i, /* #19 */
+    0x0.000002p0    + 0x0.000002p-24i, /* #20 */
+    0x0.000002p0    + 0x0.000002p-23i, /* #21 */
+    0x0.000002p0    + 0x0.000002p-22i, /* #22 */
+    0x0.000002p0    + 0x0.000002p-21i, /* #23 */
+    0x0.000002p0    + 0x0.000002p-20i, /* #24 */
+    0x0.000002p-1   + 0x0.000002p-24i, /* #25 */
+    0x0.000002p-1   + 0x0.000002p-23i, /* #26 */
+    0x0.000002p-1   + 0x0.000002p-20i, /* #27 */
+    0x0.000002p-1   + 0x0.000002p-19i, /* #28 */
+    0x0.000002p0    + 0x0.000002p-3i,  /* #29 */
+    0x0.000002p0    + 0x0.000002p0i,   /* #30 */
+    0x0.000002p-25  + 0x0.000002p0i,   /* #31 */
+    0x0.000002p0    + 0x0.000002p-42i, /* #32 */
+    0x0.000002p0    + 0x0.000002p-103i,        /* #33 */
+    0x0.000002p0    + 0x0.000002p-81i, /* #34 */
+    0x0.000002p0    + 0x0.000002p-60i, /* #35 */
+    0x0.000002p0    + 0x0.000002p-60i, /* #36 */
+    0x0.000002p0    + 0x0.000002p-60i, /* #37 */
+    0x0.000002p0    + 0x0.000002p-60i, /* #38 */
+    0x0.000002p0    + 0x0.000002p-60i, /* #39 */
+    0x0.000002p0    + 0x0.000002p-99i, /* #40 */
+    0x0.000002p0    + 0x0.000002p-111i,        /* #41 */
+    0x0.000002p20   + 0x0.000002p-121i,        /* #42 */
+    0x0.0042000p-98 + 0x0.000002p20i,  /* #43 */
+    0x0.0042000p-78 + 0x0.000002p30i,  /* #44 */
+    0x0.004201p-61 + 0x0.000002p0i,    /* #45 */
+    0x0.004201p-51 + 0x0.000002p40i,   /* #46 */
+    0x0.004201p-51 + 0x0.000002p40i,   /* #47 */
+    0x0.004201p-51 + 0x0.000002p40i,   /* #48 */
+    0x0.004201p-51 + 0x0.000002p40i,   /* #49 */
+    0x0.004201p-51 + 0x0.000002p40i,   /* #50 */
+    0x0.004201p-51 + 0x0.000002p40i,   /* #51 */
+    0x0.004201p-51 + 0x0.000002p40i,   /* #52 */
+    0x0.004201p-56 + 0x0.000002p35i,   /* #53 */
+    0x0.004201p-61 + 0x0.000002p30i,   /* #54 */
+    0x0.000002p114 + 0x0.000002p113i,  /* #55 */
+    0x0.000002p75  + 0x0.000002p74i,   /* #56 */
+    0x0.000002p40  + 0x0.000002p50i,   /* #57 */
+    0x0.000002p92  + 0x0.000002p92i,   /* #58 */
+    0x0.000002p97  + 0x0.000002p97i,   /* #59 */
+    0x0.000002p71  + 0x0.000002p0i,    /* #60 */
+    0x0.000002p54  + 0x0.000000p-85i,  /* #61 */
+    0x0.000002p24  + 0x0.000002p-115i, /* #62 */
+    0x0.000002p104 + 0x0.000002p103i,  /* #63 */
+    0x0.000002p14 + 0x0.000002p-37i,   /* #64 */
+    0x0.000002p101 + 0x0.000002p62i,   /* #65 */
+    0x0.000002p99 + 0x0.000002p63i,    /* #66 */
+    0x0.000002p99 + 0x0.000002p64i,    /* #67 */
+    0x0.000002p96 + 0x0.000002p62i,    /* #68 */
+    0x0.000002p102 + 0x0.000002p73i,   /* #69 */
+    0x0.000002p102 + 0x0.000002p83i,   /* #70 */
+    0x0.000002p101 + 0x0.000002p92i,   /* #71 */
+    0x0.000002p101 + 0x0.000002p92i,   /* #72 */
+    0x0.000002p101 + 0x0.000002p92i,   /* #73 */
+    0x0.000002p1    + 0x0.000002p2i,   /* #74 */
+    0x0.000002p1    + 0x0.000002p0i,   /* #75 */
+    0x0.000002p1    + 0x0.000002p2i,   /* #76 */
+    0x0.000002p1    + 0x0.000002p2i,   /* #77 */
+    0x0.000002p-1   + 0x0.000002p-3i,  /* #78 */
+    0x0.000002p-2   + 0x0.00000ap-7i,  /* #79 */
+    0x0.000002p-3   + 0x0.000002p-2i,  /* #80 */
+    0x0.000002p10   + 0x0.000002p8i,   /* #81 */
+    0x0.000002p10   + 0x0.000002p8i,   /* #82 */
+    0x0.000002p10   + 0x0.000002p8i,   /* #83 */
+    0x0.000002p10   + 0x0.000002p8i,   /* #84 */
+    0x0.000002p10   + 0x0.000002p8i,   /* #85 */
+    0x0.000002p1    + 0x0.000002p1i,   /* #86 */
+    0x0.000002p1    + 0x0.0000c0p-9i,  /* #87 */
+    0x0.000002p-1   + 0x0.000002p-1i,  /* #88 */
+    0x0.000002p-1   + 0x0.000002p-2i,  /* #89 */
+    0x0.000002p1    + 0x0.000004p-3i,  /* #90 */
+    0x0.000152p-5   + 0x0.000002p1i,   /* #91 */
+    0x0.000002p0    + 0x0.000002p-2i,  /* #92 */
+    0x0.000002p0    + 0x0.000002p2i,   /* #93 */
+    0x0.000002p-1   + 0x0.000002p1i,   /* #94 */
+    0x0.000002p2    + 0x0.000002p3i,   /* #95 */
+    0x0.000002p-4   + 0x0.000002p-5i,  /* #96 */
+    0x0.000002p-5   + 0x0.000002p-7i,  /* #97 */
+    0x0.000002p-16  + 0x0.000002p-18i, /* #98 */
+    0x0.000002p-17  + 0x0.000002p-19i, /* #99 */
+    0x0.000002p0    + 0x0.000004p-2i   /* #100 */
+  };
+
+
+int main(int argc, char** argv)
+{
+  int i;
+  FTYPE xr, xi, yr, yi, zr, zi, zzr, zzi;
+  FTYPE er, ei;
+  __complex FTYPE ans[NUMCNT];
+  int errcnt;
+
+  errcnt = 0;
+  for (i = 0; i < NUMCNT; i++)
+    {
+      ans[i] = x[i] / y[i];
+      if( z[i] != z[i] )   /* Check for nan/inf case */
+       {
+         zr = __real__ z[i];
+         zi = __imag__ z[i];
+         zzr = __real__ ans[i];
+         zzi = __imag__ ans[i];
+         er = __real__ errmax[i];
+         ei = __imag__ errmax[i];
+         errcnt++;
+         printf("x %3d    " FMT " " FMT "i\n",
+                i + 1, __real__ x[i], __imag__ x[i]);
+         printf ("y %3d   " FMT " " FMT "i\n",
+                 i + 1, __real__ y[i], __imag__ y[i]);
+         printf("expected " FMT " " FMT "i\n",
+                __real__ z[i], __imag__ z[i]);
+         printf("actual   " FMT " " FMT "i /* #%d */ FAIL\n",
+                __real__ ans[i], __imag__ ans[i], i + 1);
+         printf("diff     " FMT " " FMT "i\n",
+                zr - zzr, zi - zzi);
+         printf("errmax   " FMT " " FMT "i\n\n",
+                er, ei);
+       }
+      else
+       {
+         if( z[i] != ans[i] )
+           {
+             zr = __real__ z[i];
+             zi = __imag__ z[i];
+             zzr = __real__ ans[i];
+             zzi = __imag__ ans[i];
+             er = __real__ errmax[i];
+             ei = __imag__ errmax[i];
+             if( (FABS(zr-zzr) > er) || (FABS(zi-zzi) > ei))
+               {        /* report if error exceeds error max */
+                 errcnt++;
+                 printf("x %3d    " FMT " " FMT "i\n",
+                        i + 1, __real__ x[i], __imag__ x[i]);
+                 printf ("y %3d    " FMT " " FMT "i\n",
+                         i + 1, __real__ y[i], __imag__ y[i]);
+                 printf("expected " FMT " " FMT "i\n",
+                        __real__ z[i], __imag__ z[i]);
+                 printf("actual   " FMT " " FMT "i /* #%d */ FAIL\n",
+                        __real__ ans[i], __imag__ ans[i], i + 1);
+                 printf("diff     " FMT " " FMT "i\n",
+                        zr - zzr, zi - zzi);
+                 printf("errmax   " FMT " " FMT "i\n\n",
+                        er, ei);
+               }
+           }
+       }
+    }
+  if( errcnt > 0)
+    {
+      printf("%2d Failures\n",errcnt);
+      abort();
+    }
+  printf("PASS\n");
+  return 0;
+}
+
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr59714_64.c 
b/gcc/testsuite/gcc.c-torture/execute/pr59714_64.c
new file mode 100644
index 0000000..0a41174
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr59714_64.c
@@ -0,0 +1,506 @@
+#include <stdio.h>
+#include <math.h>
+
+extern void abort (void);
+#define FABS(x) ((x) >= 0 ? (x) : -(x))
+#define FTYPE   double
+#define FMT     "%-24.13a"
+
+/*
+   Tables of numbers for complex division testing
+   All values in hex format
+   z[i] == correctly rounded value of x[i]/y[i];
+ */
+
+#define NUMCNT 100
+
+__complex FTYPE x[NUMCNT] =
+  {
+    0x1.0p0 + 0x1.0p0i,                        /* #1 */
+    0x1.0p0 + 0x1.0p0i,                        /* #2 */
+    0x1.0p1023 + 0x1.0p-1023i,         /* #3 */
+    0x1.0p1023 + 0x1.0p1023i,          /* #4 */
+    0x1.0p1020 + 0x1.0p-844i,          /* #5 */
+    0x1.0p-71 + 0x1.0p1021i,           /* #6 */
+    0x1.0p-347 + 0x1.0p-54i,           /* #7 */
+    0x1.0p-1074 + 0x1.0p-1074i,                /* #8 */
+    0x1.0p1015 + 0x1.0p-989i,          /* #9 */
+    0x1.0p-622 + 0x1.0p-1071i,         /* #10 */
+    0x1.0p0 + 0x3.0p0i,                        /* #11 */
+    -0x1.0p0 + 0x3.0p0i,               /* #12 */
+    0x1.0p0 - 0x3.0p0i,                        /* #13 */
+    0x3.0p0 + 0x1.0p0i,                        /* #14 */
+    0x3.0p0 + 0x4.0p0i,                        /* #15 */
+    0x1.0p0 - 0x3.000000001p-20i,      /* #16 */
+    0x1.0p0 + 0x3.00000000001p-20i,    /* #17 */
+    0x1.0p0 + 0x1.8000000000002p1i,    /* #18 */
+    0x1.0p0 + 0x1.8000000000004p1i,    /* #19 */
+    0x1.0p0 + 0x1.8000000000008p1i,    /* #20 */
+    0x1.0p0 + 0x1.8000000000010p1i,    /* #21 */
+    0x1.0p0 + 0x1.8000000000020p1i,    /* #22 */
+    0x1.0p0 + 0x1.8000000000040p1i,    /* #23 */
+    0x1.0p0 + 0x1.8000000000080p1i,    /* #24 */
+    0x1.0p0 + 0x1.7ffffffffff8p1i,     /* #25 */
+    0x1.0p0 + 0x1.7ffffffffff0p1i,     /* #26 */
+    0x1.0p0 + 0x1.7fffffffff80p1i,     /* #27 */
+    0x1.0p0 + 0x1.7fffffffff00p1i,     /* #28 */
+    0x5.0p0 + 0x5.0p0i,                        /* #29 */
+    0x4.0p0 + 0x3.0p0i,                        /* #30 */
+    -0x4.0p0 + 0x3.000000001p0i,       /* #31 */
+    0x3.00000000001p-20 + 0x1.0p0i,    /* #32 */
+    0x1.00000000001p-80 + 0x1.0p0i,    /* #33 */
+    0x1.00000000001p-600 + 0x1.0p0i,   /* #34 */
+    0x1.0p0 + 0x1.00000000001p-600i,   /* #35 */
+    -0x1.0p0 + 0x1.00000000001p-600i,  /* #36 */
+    -0x1.0p0 + 0x1.00000000001p-600i,  /* #37 */
+    -0x1.0p0 + 0x1.00000000001p-600i,  /* #38 */
+    0x1.0p0 - 0x1.00000000001p-600i,   /* #39 */
+    0x1.0p100 - 0x1.00000000001p-600i, /* #40 */
+    0x1.97530p100 - 0x1.00000000001p-600i,     /* #41 */
+    0x1.97530p300 - 0x1.00000000001p-600i,     /* #42 */
+    0x1.97530p377 - 0x1.00000000001p-600i,     /* #43 */
+    0x1.97530p477 - 0x1.00000000001p-500i,     /* #44 */
+    0x1.97530p0 - 0x1.00000000001p-900i,       /* #45 */
+    0x1.97530p100 - 0x1.00000000001p-800i,     /* #46 */
+    0x1.97530p200 - 0x1.00000000001p-700i,     /* #47 */
+    0x1.97530p300 - 0x1.00000000001p-600i,     /* #48 */
+    0x1.97530p400 - 0x1.00000000001p-500i,     /* #49 */
+    0x1.97530p500 - 0x1.00000000001p-400i,     /* #50 */
+    0x1.97530p600 - 0x1.00000000001p-300i,     /* #51 */
+    0x1.97530p700 - 0x1.00000000001p-200i,     /* #52 */
+    0x1.97530p800 - 0x1.00000000001p-100i,     /* #53 */
+    0x1.97530p900 - 0x1.00000000001p-0i,       /* #54 */
+    0x1.97530p1000 + 0x1.00000000001p200i,     /* #55 */
+    0x1.97530p1010 + 0x1.00000000000p300i,     /* #56 */
+    0x1.97530p800 + 0x1.00000000000p400i,      /* #57 */
+    0x1.97530p700 + 0x1.00000000000p500i,      /* #58 */
+    0x1.97530p600 + 0x1.00000000000p600i,      /* #59 */
+    0x1.97530p520 + 0x1.00000000000p520i,      /* #60 */
+    0x1.0p1020 + 0x1.0p-844i,          /* #61 */
+    0x1.0p920 + 0x1.0p-844i,           /* #62 */
+    0x1.0p504 + 0x1.0p523i,            /* #63 */
+    0x1.0p1004 + 0x1.0p-512i,          /* #64 */
+    0x1.0p910 + 0x1.0p-512i,           /* #65 */
+    0x1.0p865 + 0x1.0p-512i,           /* #66 */
+    0x1.0p864 + 0x1.0p-512i,           /* #67 */
+    0x1.0p860 + 0x1.0p-512i,           /* #68 */
+    0x1.0p810 + 0x1.0p-512i,           /* #69 */
+    0x1.0p710 + 0x1.0p-512i,           /* #70 */
+    0x1.0p610 + 0x1.0p-512i,           /* #71 */
+    0x1.0p510 + 0x1.0p-512i,           /* #72 */
+    0x1.0p410 + 0x1.0p-512i,           /* #73 */
+    0x13.0p4 + 0x1.0p-4i,              /* #74 */
+    0x13.0p2 + 0x13.0p2i,              /* #75 */
+    0x13.0p4 + 0x1.0p4i,               /* #76 */
+    0x12.0p4 + 0x12.0p-4i,             /* #77 */
+    0x1.0p1 + 0x12.0p1i,               /* #78 */
+    0x1.0p2 + 0x1.0p4i,                        /* #79 */
+    0x13.0p0 + 0x0.0p0i,               /* #80 */
+    0x1.01p12 - 0x1.037p-12i,          /* #81 */
+    -0x1.01p12 - 0x1.037p-12i,         /* #82 */
+    0x1.01p12 - 0x1.037p-12i,          /* #83 */
+    -0x1.01p12 - 0x1.037p-12i,         /* #84 */
+    0x1.01p12 - 0x1.037p-12i,          /* #85 */
+    0x1.123456p3 - 0x1.789123p4i,      /* #86 */
+    0x1.123457p3 - 0x1.789123p4i,      /* #87 */
+    0x1.123458p3 + 0x1.789123p4i,      /* #88 */
+    0x1.123456p3 + 0x1.789122p4i,      /* #89 */
+    0x1.123456p3 + 0x1.789121p4i,      /* #90 */
+    0x1.123456p3 + 0x1.789120p4i,      /* #91 */
+    0x1.123455p3 - 0x1.789123p4i,      /* #92 */
+    0x1.123454p3 - 0x1.789122p4i,      /* #93 */
+    -0x1.123453p3 + 0x1.789121p4i,     /* #94 */
+    0x1.123452p3 + 0x1.789120p4i,      /* #95 */
+    0x1.123451p3 - 0x1.789127p4i,      /* #96 */
+    0x1.123459p3 - 0x1.789125p4i,      /* #97 */
+    -0x1.123450p3 + 0x1.789124p4i,     /* #98 */
+    0x1.1234561p3 + 0x1.7891231p4i,    /* #99 */
+    0x1.1234561p3 - 0x1.7891231p4i     /* #100 */
+  };
+
+__complex FTYPE y[NUMCNT] =
+  {
+    0x1.0p0 + 0x1.0p1023i,             /* #1 */
+    0x1.0p-1023 + 0x1.0p-1023i,                /* #2 */
+    0x1.0p677 + 0x1.0p-677i,           /* #3 */
+    0x1.0p0 + 0x1.0p0i,                        /* #4 */
+    0x1.0p656 + 0x1.0p-780i,           /* #5 */
+    0x1.0p1001 + 0x1.0p-323i,          /* #6 */
+    0x1.0p-1037 + 0x1.0p-1058i,                /* #7 */
+    0x1.0p-1073 + 0x1.0p-1074i,                /* #8 */
+    0x1.0p1023 + 0x1.0p1023i,          /* #9 */
+    0x1.0p-343 + 0x1.0p-798i,          /* #10 */
+    0x1.0p0 + 0x3.0p0i,                        /* #11 */
+    -0x1.0p0 + 0x3.0p0i,               /* #12 */
+    0x1.0p0 - 0x3.0p0i,                        /* #13 */
+    0x3.0p0 + 0x1.0p0i,                        /* #14 */
+    0x3.0p0 + 0x4.0p0i,                        /* #15 */
+    -0x2.0p0 + 0x8.0p-10i,             /* #16 */
+    0x1.0p0 + 0x3.0p-20i,              /* #17 */
+    0x1.0p0 + 0x3.0p0i,                        /* #18 */
+    0x1.0p0 + 0x3.0p0i,                        /* #19 */
+    0x1.0p0 + 0x3.0p0i,                        /* #20 */
+    0x1.0p0 + 0x3.0p0i,                        /* #21 */
+    0x1.0p0 + 0x3.0p0i,                        /* #22 */
+    0x1.0p0 + 0x3.0p0i,                        /* #23 */
+    0x1.0p0 + 0x3.0p0i,                        /* #24 */
+    0x1.0p0 + 0x3.0p0i,                        /* #25 */
+    0x1.0p0 + 0x3.0p0i,                        /* #26 */
+    0x1.0p0 + 0x3.0p0i,                        /* #27 */
+    0x1.0p0 + 0x3.0p0i,                        /* #28 */
+    0x3.0p0 + 0x4.0p0i,                        /* #29 */
+    0x3.0p0 - 0x4.0p0i,                        /* #30 */
+    -0x3.0p0 - 0x4.0p0i,               /* #31 */
+    0x3.0p-20 + 0x1.0p0i,              /* #32 */
+    0x1.0p-80 + 0x1.0p0i,              /* #33 */
+    0x1.0p-80 + 0x1.0p0i,              /* #34 */
+    0x1.0p0 + 0x1.0p-600i,             /* #35 */
+    0x1.0p0 + 0x1.0p-600i,             /* #36 */
+    -0x1.0p0 + 0x1.0p-600i,            /* #37 */
+    0x1.0p0 - 0x1.0p-600i,             /* #38 */
+    0x1.0p0 + 0x1.0p-600i,             /* #39 */
+    0x1.0p100 + 0x1.0p-600i,           /* #40 */
+    0x1.97530p100 + 0x1.0p-600i,       /* #41 */
+    0x1.97530p300 + 0x1.0p-600i,       /* #42 */
+    0x1.0p-600 + 0x1.97530p377i,       /* #43 */
+    0x1.0p-500 + 0x1.97530p477i,       /* #44 */
+    0x1.0p-900 + 0x1.97530p0i,         /* #45 */
+    0x1.0p-800 + 0x1.97530p100i,       /* #46 */
+    0x1.0p-700 + 0x1.97530p200i,       /* #47 */
+    0x1.0p-600 + 0x1.97530p300i,       /* #48 */
+    0x1.0p-500 + 0x1.97530p400i,       /* #49 */
+    0x1.0p-400 + 0x1.97530p500i,       /* #50 */
+    0x1.0p-300 + 0x1.97530p600i,       /* #51 */
+    0x1.0p-200 + 0x1.97530p700i,       /* #52 */
+    0x1.0p-100 + 0x1.97530p800i,       /* #53 */
+    0x1.0p-0 + 0x1.97530p900i,         /* #54 */
+    0x1.97530p100 + 0x1.0000p100i,     /* #55 */
+    0x1.97530p50 + 0x1.0000p50i,       /* #56 */
+    0x1.97530p100 + 0x1.0000p50i,      /* #57 */
+    0x1.97530p1 + 0x1.0000p1i,         /* #58 */
+    0x1.97530p1 + 0x1.0000p1i,         /* #59 */
+    0x1.97530p1 + 0x1.0000p1i,         /* #60 */
+    0x1.0p656 + 0x1.0p-730i,           /* #61 */
+    0x1.0p656 + 0x1.0p-730i,           /* #62 */
+    0x1.0p-500 + 0x1.0p-1000i,         /* #63 */
+    0x1.0p0 + 0x1.0p-500i,             /* #64 */
+    0x1.0p-110 + 0x1.0p-500i,          /* #65 */
+    0x1.0p-155 + 0x1.0p-500i,          /* #66 */
+    0x1.0p-156 + 0x1.0p-500i,          /* #67 */
+    0x1.0p-160 + 0x1.0p-500i,          /* #68 */
+    0x1.0p-210 + 0x1.0p-500i,          /* #69 */
+    0x1.0p-310 + 0x1.0p-500i,          /* #70 */
+    0x1.0p-410 + 0x1.0p-500i,          /* #71 */
+    0x1.0p-510 + 0x1.0p-600i,          /* #72 */
+    0x1.0p-610 + 0x1.0p-700i,          /* #73 */
+    0x5.0p1 + 0x12.0p1i,               /* #74 */
+    0x5.0p1 + 0x12.0p1i,               /* #75 */
+    0x5.0p1 + 0x12.0p1i,               /* #76 */
+    0x5.0p1 + 0x12.0p1i,               /* #77 */
+    0x5.0p1 + 0x12.0p1i,               /* #78 */
+    0x5.0p1 + 0x12.0p1i,               /* #79 */
+    0x5.0p1 + 0x12.0p1i,               /* #80 */
+    0x3.1p0 + 0x1.1p0i,                        /* #81 */
+    -0x3.0p0 + 0x1.1p0i,               /* #82 */
+    -0x3.0p0 + 0x1.1p0i,               /* #83 */
+    0x3.0p0 + 0x1.1p0i,                        /* #84 */
+    0x3.0p0 + 0x1.1p0i,                        /* #85 */
+    0x1.456789p2 - 0x1.789123p1i,      /* #86 */
+    0x1.124569p2 - 0x1.781239p3i,      /* #87 */
+    0x1.123457p3 - 0x1.789126p4i,      /* #88 */
+    0x1.123456p1 + 0x1.891237p4i,      /* #89 */
+    0x1.123456p2 + 0x1.357123p3i,      /* #90 */
+    0x1.123456p3 - 0x1.789123p1i,      /* #91 */
+    0x1.123456p1 - 0x1.789123p4i,      /* #92 */
+    0x1.123456p2 + 0x1.789123p1i,      /* #93 */
+    0x1.123456p3 + 0x1.789123p0i,      /* #94 */
+    -0x1.123456p1 - 0x1.789153p-2i,    /* #95 */
+    -0x1.123456p2 - 0x1.785123p7i,     /* #96 */
+    -0x1.123456p3 + 0x1.789123p9i,     /* #97 */
+    0x1.123456p1 - 0x1.789123p20i,     /* #98 */
+    0x1.123456p2 - 0x1.337788p21i,     /* #99 */
+    0x1.123457p3 - 0x1.789991p3i       /* #100 */
+  };
+
+__complex FTYPE z[NUMCNT] =
+  {
+    0x1.0p-1023 - 0x1.0p-1023i,                /* #1 */
+    0x1.0p1023 + 0x0.0p0i,             /* #2 */
+    0x1.0p346 - 0x1.0p-1008i,          /* #3 */
+    0x1.0p1023 + 0x0.0p0i,             /* #4 */
+    0x1.0p364 - 0x1.0p-1072i,          /* #5 */
+    0x1.0p-1072 + 0x1.0p20i,           /* #6 */
+    3.898125604559113300e289 + 8.174961907852353577e295i,      /* #7 */
+    0.6 + 0.2i,                                /* #8 */
+    0.001953125 - 0.001953125i,                /* #9 */
+    1.02951151789360578e-84 + 6.97145987515076231e-220i,       /* #10 */
+    0x1.0p0 + 0x0.0p0i,                        /* #11 */
+    0x1.0p0 + 0x0.0p0i,                        /* #12 */
+    0x1.0p0 + 0x0.0p0i,                        /* #13 */
+    0x1.0p0 + 0x0.0p0i,                        /* #14 */
+    0x1.0p0 + 0x0.0p0i,                        /* #15 */
+    -0x1.fffe0061ff9e0p-2 - 0x1.ff9e0061ff9c0p-10i,    /* #16 */
+    0x1.00000000000000p0 + 0x1.ffffffffee000p-65i,     /* #17 */
+    0x1.0000000000002p0 + 0x1.999999999999ap-54i,      /* #18 */
+    0x1.0000000000003p0 + 0x1.999999999999ap-53i,      /* #19 */
+    0x1.0000000000005p0 + 0x1.999999999999ap-52i,      /* #20 */
+    0x1.000000000000ap0 + 0x1.999999999999ap-51i,      /* #21 */
+    0x1.0000000000013p0 + 0x1.999999999999ap-50i,      /* #22 */
+    0x1.0000000000027p0 + 0x1.999999999999ap-49i,      /* #23 */
+    0x1.000000000004dp0 + 0x1.999999999999ap-48i,      /* #24 */
+    0x1.fffffffffff66p-1 - 0x1.999999999999ap-48i,     /* #25 */
+    0x1.ffffffffffecdp-1 - 0x1.999999999999ap-47i,     /* #26 */
+    0x1.ffffffffff666p-1 - 0x1.999999999999ap-44i,     /* #27 */
+    0x1.fffffffffeccdp-1 - 0x1.999999999999ap-43i,     /* #28 */
+    0x1.6666666666667p0 - 0x1.999999999999ap-3i,       /* #29 */
+    0x0.0p0 + 0x1.0p0i,                                        /* #30 */
+    -0x1.47ae147ae147b00000p-39 - 0x1.0000000001eb8p0i,        /* #31 */
+    0x1.00000000000000p0 - 0x1.ffffffffee000p-65i,     /* #32 */
+    0x1.00000000000000p0 - 0x1.0000000000000p-124i,    /* #33 */
+    0x1.00000000000000p0 + 0x1.0000000000000p-80i,     /* #34 */
+    0x1.00000000000000p0 + 0x1.0000000000000p-644i,    /* #35 */
+    -0x1.00000000000000p0 + 0x1.0000000000080p-599i,   /* #36 */
+    0x1.00000000000000p0 - 0x1.0000000000000p-644i,    /* #37 */
+    -0x1.00000000000000p0 + 0x1.0000000000000p-644i,   /* #38 */
+    0x1.00000000000000p0 - 0x1.0000000000080p-599i,    /* #39 */
+    0x1.00000000000000p0 - 0x1.0000000000080p-699i,    /* #40 */
+    0x1.00000000000000p0 - 0x1.41c9b303bfbf2p-700i,    /* #41 */
+    0x1.00000000000000p0 - 0x1.41c9b303bfbf2p-900i,    /* #42 */
+    -0x1.41c9b303bfb510p-1022 - 0x1.0000000000000p0i,  /* #43 */
+    -0x1.41c9b303bfb510p-1022 - 0x1.0000000000000p0i,  /* #44 */
+    -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i,   /* #45 */
+    -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i,   /* #46 */
+    -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i,   /* #47 */
+    -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i,   /* #48 */
+    -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i,   /* #49 */
+    -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i,   /* #50 */
+    -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i,   /* #51 */
+    -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i,   /* #52 */
+    -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i,   /* #53 */
+    -0x1.41c9b303bfb510p-945 - 0x1.0000000000000p0i,   /* #54 */
+    0x1.6f0647208a31a0p899 - 0x1.cd580bc4697cap898i,   /* #55 */
+    0x1.6f0647208a31a0p959 - 0x1.cd580bc4697cap958i,   /* #56 */
+    0x1.00000000000000p700 - 0x1.41c9b303bfb51p649i,   /* #57 */
+    0x1.6f0647208a31a0p698 - 0x1.cd580bc4697cap697i,   /* #58 */
+    0x1.00000000000000p599 + 0x0.0000000000000p0i,     /* #59 */
+    0x1.00000000000000p519 + 0x0.0000000000000p0i,     /* #60 */
+    0x1.0p364 - 0x1.0p-1022i,                          /* #61 */
+    0x1.0p264 + 0x0.0p0i,                              /* #62 */
+    0x1.0p1004 + 0x1.0p1023i,                          /* #63 */
+    0x1.0p1004 - 0x1.0p504i,                           /* #64 */
+    0x1.0p1020 - 0x1.0p630i,                           /* #65 */
+    0x1.0p1020 - 0x1.0p675i,                           /* #66 */
+    0x1.0p1020 - 0x1.0p676i,                           /* #67 */
+    0x1.0p1020 - 0x1.0p680i,                           /* #68 */
+    0x1.0p1020 - 0x1.0p730i,                           /* #69 */
+    0x1.0p1020 - 0x1.0p830i,                           /* #70 */
+    0x1.0p1020 - 0x1.0p930i,                           /* #71 */
+    0x1.0p1020 - 0x1.0p930i,                           /* #72 */
+    0x1.0p1020 - 0x1.0p930i,                           /* #73 */
+    0x1.16f21023358c2p1 - 0x1.f5b3b6a5c6c90p2i,                /* #74 */
+    0x1.408cd63069a0ap1 - 0x1.6a5c6c8fc5517p0i,                /* #75 */
+    0x1.4b8d91f8aa2d8p1 - 0x1.ee6539f2cbeb7p2i,                /* #76 */
+    0x1.0bc8408cd6307p1 - 0x1.daceda971b23fp2i,                /* #77 */
+    0x1.e2a8b5e9fe887p-1 + 0x1.a682913ce1ecfp-3i,      /* #78 */
+    0x1.c3d9db52e3648p-2 + 0x1.77908119ac60dp-7i,      /* #79 */
+    0x1.16bd3fd10defep-3 - 0x1.f5bb0c784c496p-2i,      /* #80 */
+    0x1.2b9c43596635bp10 - 0x1.9fc933bd0b3adp8i,       /* #81 */
+    0x1.3079a1638e442p10 + 0x1.af56ff5f5ee08p8i,       /* #82 */
+    -0x1.3079a23d4567cp10 - 0x1.af56f5c477a85p8i,      /* #83 */
+    -0x1.3079a23d4567cp10 + 0x1.af56f5c477a85p8i,      /* #84 */
+    0x1.3079a1638e442p10 - 0x1.af56ff5f5ee08p8i,       /* #85 */
+    0x1.a27419691d785p+1 - 0x1.5e60a434afdfep1i,       /* #86 */
+    0x1.004a6235052b9p1 - 0x1.077970d2017e9p-10i,      /* #87 */
+    -0x1.8825f329396f0p-1 + 0x1.492fb9aef1c35p-1i,     /* #88 */
+    0x1.f6417093502e6p-1 - 0x1.0d936b36d2386p-2i,      /* #89 */ 
+    0x1.2e6b76d3c1a74p1 + 0x1.4911f033da9e4p-3i,       /* #90 */
+    0x1.a1ced84e145e9p-5 + 0x1.61ced4d722d38p1i,       /* #91 */
+    0x1.064f7bc3e4834p0 + 0x1.1551c3ae74bd1p-2i,       /* #92 */
+    -0x1.344545d341aa8p0 - 0x1.2aa5da272dd3dp2i,       /* #93 */
+    -0x1.06d98474fe895p-1 + 0x1.6ad8d7df1b0c8p1i,      /* #94 */
+    -0x1.6deb5a7bec317p2 - 0x1.4028b8d0a2fc1p3i,       /* #95 */
+    0x1.fbd4560086546p-4 + 0x1.8c3278a9ca9b4p-5i,      /* #96 */
+    -0x1.0106f72f51798p-5 - 0x1.69200e9aa701dp-7i,     /* #97 */ 
+    -0x1.00000929d9956p-16 - 0x1.74d2319d42342p-18i,   /* #98 */
+    -0x1.39887db89b686p-17 + 0x1.c89cdfee34a14p-19i,   /* #99 */
+    0x1.a746a452d3430p0 - 0x1.e72d9f35e28e6p-2i                /* #100 */
+  };
+
+
+__complex FTYPE errmax[NUMCNT] =
+  {
+    0x0.0000000000000p0    + 0x0.0000000000000p0i,     /* #1 */
+    0x0.0000000000001p1023 + 0x0.0000000000001p0i,     /* #2 */
+    0x0.0000000000001p346  + 0x0.0000000000001p-1008i, /* #3 */
+    0x0.0000000000001p1023 + 0x0.0000000000001p0i,     /* #4 */
+    0x0.0000000000001p364  + 0x0.0000000000000p0i,     /* #5 */
+    0x0.0000000000000p0    + 0x0.0000000000001p20i,    /* #6 */
+    0x0.0000000000001p961  + 0x0.0000000000001p982i,   /* #7 */
+    0x0.0000000000001p-1   + 0x0.0000000000010p-3i,    /* #8 */
+    0x0.0000000000001p-9   + 0x0.0000000000001p-9i,    /* #9 */
+    0x0.0000000000001p279  + 0x0.0000000000001p-171i,  /* #10 */
+    0x0.0000000000001p0    + 0x0.0000000000001p0i,     /* #11 */
+    0x0.0000000000001p0    + 0x0.000000000001p0i,      /* #12 */
+    0x0.0000000000001p0    + 0x0.000000000001p0i,      /* #13 */
+    0x0.0000000000001p0    + 0x0.000000000001p0i,      /* #14 */
+    0x0.0000000000001p0    + 0x0.000000000001p0i,      /* #15 */
+    0x1.0000000000001p-2   + 0x0.000000000001p-10i,    /* #16 */
+    0x0.0000000000001p0    + 0x0.000000000001p-65i,    /* #17 */
+    0x0.0000000000001p0    + 0x0.000000000001p-54i,    /* #18 */
+    0x0.0000000000001p0    + 0x0.000000000001p-53i,    /* #19 */
+    0x0.0000000000001p0    + 0x0.000000000001p-52i,    /* #20 */
+    0x0.0000000000001p0    + 0x0.000000000001p-51i,    /* #21 */
+    0x0.0000000000001p0    + 0x0.000000000001p-50i,    /* #22 */
+    0x0.0000000000001p0    + 0x0.000000000001p-49i,    /* #23 */
+    0x0.0000000000001p0    + 0x0.000000000001p-48i,    /* #24 */
+    0x0.0000000000001p-1   + 0x0.000000000001p-48i,    /* #25 */
+    0x0.0000000000001p-1   + 0x0.000000000001p-47i,    /* #26 */
+    0x0.0000000000001p-1   + 0x0.000000000001p-44i,    /* #27 */
+    0x0.0000000000001p-1   + 0x0.000000000001p-43i,    /* #28 */
+    0x0.0000000000001p0    + 0x0.000000000001p-3i,     /* #29 */
+    0x0.0000000000001p0    + 0x0.000000000001p0i,      /* #30 */
+    0x0.0000000000001p-39  + 0x0.000000000001p0i,      /* #31 */
+    0x0.0000000000001p0    + 0x0.000000000001p-65i,    /* #32 */
+    0x0.0000000000001p0    + 0x0.000000000001p-124i,   /* #33 */
+    0x0.0000000000001p0    + 0x0.000000000001p-80i,    /* #34 */
+    0x0.0000000000001p0    + 0x0.000000000001p-644i,   /* #35 */
+    0x0.0000000000001p0    + 0x0.000000000001p-599i,   /* #36 */
+    0x0.0000000000001p0    + 0x0.000000000001p-644i,   /* #37 */
+    0x0.0000000000001p0    + 0x0.000000000001p-644i,   /* #38 */
+    0x0.0000000000001p0    + 0x0.000000000001p-599i,   /* #39 */
+    0x0.0000000000001p0    + 0x0.000000000001p-699i,   /* #40 */
+    0x0.0000000000001p0    + 0x0.000000000001p-700i,   /* #41 */
+    0x0.0000000000001p0    + 0x0.000000000001p-900i,   /* #42 */
+    0x0.0042000000000p-1022 + 0x0.000000000001p0i,     /* #43 */
+    0x0.0042000000000p-1022 + 0x0.000000000001p0i,     /* #44 */
+    0x0.0042000000001p-945 + 0x0.000000000001p0i,      /* #45 */
+    0x0.0042000000001p-945 + 0x0.000000000001p0i,      /* #46 */
+    0x0.0042000000001p-945 + 0x0.000000000001p0i,      /* #47 */
+    0x0.0042000000001p-945 + 0x0.000000000001p0i,      /* #48 */
+    0x0.0042000000001p-945 + 0x0.000000000001p0i,      /* #49 */
+    0x0.0042000000001p-945 + 0x0.000000000001p0i,      /* #50 */
+    0x0.0042000000001p-945 + 0x0.000000000001p0i,      /* #51 */
+    0x0.0042000000001p-945 + 0x0.000000000001p0i,      /* #52 */
+    0x0.0042000000001p-945 + 0x0.000000000001p0i,      /* #53 */
+    0x0.0042000000001p-945 + 0x0.000000000001p0i,      /* #54 */
+    0x0.0000000000001p899  + 0x0.000000000001p898i,    /* #55 */
+    0x0.0000000000001p959  + 0x0.000000000001p958i,    /* #56 */
+    0x0.0000000000001p700  + 0x0.000000000001p649i,    /* #57 */
+    0x0.0000000000001p698  + 0x0.000000000001p697i,    /* #58 */
+    0x0.0000000000001p599  + 0x0.000000000001p0i,      /* #59 */
+    0x0.0000000000001p519  + 0x0.000000000001p0i,      /* #60 */
+    0x0.0000000000001p364  + 0x0.000000000000p0i,      /* #61 */
+    0x0.0000000000001p264  + 0x0.000000000001p0i,      /* #62 */
+    0x0.0000000000001p1004 + 0x0.000000000001p1023i,   /* #63 */
+    0x0.0000000000001p1004 + 0x0.000000000001p504i,    /* #64 */
+    0x0.0000000000001p1020 + 0x0.000000000001p630i,    /* #65 */
+    0x0.0000000000001p1020 + 0x0.000000000001p675i,    /* #66 */
+    0x0.0000000000001p1020 + 0x0.000000000001p676i,    /* #67 */
+    0x0.0000000000001p1020 + 0x0.000000000001p680i,    /* #68 */
+    0x0.0000000000001p1020 + 0x0.000000000001p730i,    /* #69 */
+    0x0.0000000000001p1020 + 0x0.000000000001p830i,    /* #70 */
+    0x0.0000000000001p1020 + 0x0.000000000001p930i,    /* #71 */
+    0x0.0000000000001p1020 + 0x0.000000000001p930i,    /* #72 */
+    0x0.0000000000001p1020 + 0x0.000000000001p930i,    /* #73 */
+    0x0.0000000000001p7    + 0x0.000000000001p0i,      /* #74 */
+    0x0.0000000000001p1    + 0x0.000000000001p0i,      /* #75 */
+    0x0.0000000000001p1    + 0x0.000000000001p2i,      /* #76 */
+    0x0.0000000000001p1    + 0x0.000000000001p2i,      /* #77 */
+    0x0.0000000000001p-1   + 0x0.000000000001p-3i,     /* #78 */
+    0x0.0000000000001p-2   + 0x0.000000000001p-7i,     /* #79 */
+    0x0.0000000000001p-3   + 0x0.000000000001p-2i,     /* #80 */
+    0x0.0000000000001p10   + 0x0.000000000001p8i,      /* #81 */
+    0x0.0000000000001p10   + 0x0.000000000001p8i,      /* #82 */
+    0x0.0000000000001p10   + 0x0.000000000001p8i,      /* #83 */
+    0x0.0000000000001p10   + 0x0.000000000001p8i,      /* #84 */
+    0x0.0000000000001p10   + 0x0.000000000001p8i,      /* #85 */
+    0x0.0000000000001p1    + 0x0.000000000001p1i,      /* #86 */
+    0x0.0000000000001p1    + 0x0.000000000001p-10i,    /* #87 */
+    0x0.0000000000001p-1   + 0x0.000000000001p-1i,     /* #88 */
+    0x0.0000000000001p-1   + 0x0.000000000001p-2i,     /* #89 */
+    0x0.0000000000001p1    + 0x0.000000000001p-3i,     /* #90 */
+    0x0.0000000000005p-5   + 0x0.000000000001p1i,      /* #91 */
+    0x0.0000000000001p0    + 0x0.000000000001p-2i,     /* #92 */
+    0x0.0000000000001p0    + 0x0.000000000001p2i,      /* #93 */
+    0x0.0000000000001p-1   + 0x0.000000000001p1i,      /* #94 */
+    0x0.0000000000001p2    + 0x0.000000000001p3i,      /* #95 */
+    0x0.0000000000001p-4   + 0x0.000000000001p-5i,     /* #96 */
+    0x0.0000000000001p-5   + 0x0.000000000001p-7i,     /* #97 */
+    0x0.0000000000001p-16  + 0x0.000000000001p-18i,    /* #98 */
+    0x0.0000000000001p-17  + 0x0.000000000001p-19i,    /* #99 */
+    0x0.0000000000001p0    + 0x0.000000000001p-2i      /* #100 */
+  };
+
+
+int main(int argc, char** argv)
+{
+  int i;
+  FTYPE xr, xi, yr, yi, zr, zi, zzr, zzi;
+  FTYPE er, ei;
+  __complex FTYPE ans[NUMCNT];
+  int errcnt;
+
+  errcnt = 0;
+  for (i = 0; i < NUMCNT; i++)
+    {
+      ans[i] = x[i] / y[i];
+      if( z[i] != z[i] )   /* Check for nan/inf case */
+       {
+         zr = __real__ z[i];
+         zi = __imag__ z[i];
+         zzr = __real__ ans[i];
+         zzi = __imag__ ans[i];
+         er = __real__ errmax[i];
+         ei = __imag__ errmax[i];
+         errcnt++;
+         printf("x %3d    " FMT " " FMT "i\n",
+                i + 1, __real__ x[i], __imag__ x[i]);
+         printf ("y %3d   " FMT " " FMT "i\n",
+                 i + 1, __real__ y[i], __imag__ y[i]);
+         printf("expected " FMT " " FMT "i\n",
+                __real__ z[i], __imag__ z[i]);
+         printf("actual   " FMT " " FMT "i /* #%d */ FAIL\n",
+                __real__ ans[i], __imag__ ans[i], i + 1);
+         printf("diff     " FMT " " FMT "i\n",
+                zr - zzr, zi - zzi);
+         printf("errmax   " FMT " " FMT "i\n\n",
+                er, ei);
+       }
+      else
+       {
+         if( z[i] != ans[i] )
+           {
+             zr = __real__ z[i];
+             zi = __imag__ z[i];
+             zzr = __real__ ans[i];
+             zzi = __imag__ ans[i];
+             er = __real__ errmax[i];
+             ei = __imag__ errmax[i];
+             if( (FABS(zr-zzr) > er) || (FABS(zi-zzi) > ei))
+               {        /* report if error exceeds error max */
+                 errcnt++;
+                 printf("x %3d    " FMT " " FMT "i\n",
+                        i + 1, __real__ x[i], __imag__ x[i]);
+                 printf ("y %3d    " FMT " " FMT "i\n",
+                         i + 1, __real__ y[i], __imag__ y[i]);
+                 printf("expected " FMT " " FMT "i\n",
+                        __real__ z[i], __imag__ z[i]);
+                 printf("actual   " FMT " " FMT "i /* #%d */ FAIL\n",
+                        __real__ ans[i], __imag__ ans[i], i + 1);
+                 printf("diff     " FMT " " FMT "i\n",
+                        zr - zzr, zi - zzi);
+                 printf("errmax   " FMT " " FMT "i\n\n",
+                        er, ei);
+               }
+           }
+       }
+    }
+  if( errcnt > 0)
+    {
+      printf("%2d Failures\n",errcnt);
+      abort();
+    }
+  printf("PASS\n");
+  return 0;
+}
+
diff --git a/libgcc/config/sparc/sfp-machine.h 
b/libgcc/config/sparc/sfp-machine.h
new file mode 100644
index 0000000..d22b7ed
--- /dev/null
+++ b/libgcc/config/sparc/sfp-machine.h
@@ -0,0 +1,13 @@
+#ifndef SFP_MACHINE_H
+#define SFP_MACHINE_H
+
+#define _FP_W_TYPE_SIZE 64
+#define _FP_W_TYPE      unsigned long long
+#define _FP_WS_TYPE     signed long long
+#define _FP_I_TYPE      long long
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN    4321
+#define __BYTE_ORDER    __BIG_ENDIAN
+
+#endif
diff --git a/libgcc/libgcc2.c b/libgcc/libgcc2.c
index 83f865a..99e7bec 100644
--- a/libgcc/libgcc2.c
+++ b/libgcc/libgcc2.c
@@ -29,6 +29,41 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If 
not, see
 #include "tm.h"
 #include "libgcc_tm.h"
 
+#if defined(L_divsc3) && defined(__LIBGCC_HAS_SF_MODE__)
+#include "soft-fp/soft-fp.h"
+#include "soft-fp/single.h"
+typedef union _FP_UNION_S   FP_UTYPE;
+#define FP_EXPBIAS          _FP_EXPBIAS_S
+#endif
+
+#if defined(L_divdc3) && defined(__LIBGCC_HAS_DF_MODE__)
+#include "soft-fp/soft-fp.h"
+#include "soft-fp/double.h"
+typedef union _FP_UNION_D   FP_UTYPE;
+#define FP_EXPBIAS          _FP_EXPBIAS_D
+#endif
+
+#if defined(L_divhc3) && defined(__LIBGCC_HAS_HF_MODE__)
+#include "soft-fp/soft-fp.h"
+#include "soft-fp/half.h"
+typedef union _FP_UNION_H   FP_UTYPE;
+#define FP_EXPBIAS          _FP_EXPBIAS_H
+#endif
+
+#if defined(L_divxc3) && defined(__LIBGCC_HAS_XF_MODE__)
+#include "soft-fp/soft-fp.h"
+#include "soft-fp/extended.h"
+typedef union _FP_UNION_E   FP_UTYPE;
+#define FP_EXPBIAS          _FP_EXPBIAS_E
+#endif
+
+#if defined(L_divtc3) && defined(__LIBGCC_HAS_TF_MODE__)
+#include "soft-fp/soft-fp.h"
+#include "soft-fp/quad.h"
+typedef union _FP_UNION_Q   FP_UTYPE;
+#define FP_EXPBIAS          _FP_EXPBIAS_Q
+#endif
+
 #ifdef HAVE_GAS_HIDDEN
 #define ATTRIBUTE_HIDDEN  __attribute__ ((__visibility__ ("hidden")))
 #else
@@ -2039,30 +2074,158 @@ CONCAT3(__mul,MODE,3) (MTYPE a, MTYPE b, MTYPE c, 
MTYPE d)
 #if defined(L_divhc3) || defined(L_divsc3) || defined(L_divdc3) \
     || defined(L_divxc3) || defined(L_divtc3)
 
+#if defined(FP_EXPBIAS)
+#undef int
+
+/* Return an exponent of d */
+static inline MTYPE fp_exp(MTYPE d)
+{
+  FP_UTYPE u;
+  u.flt = d;
+  return u.bits.exp - FP_EXPBIAS;
+}
+
+/* Return pow(2.0, n) */
+static inline MTYPE fp_pow2(int n)
+{
+  FP_UTYPE u, u1;
+  u.flt = 1.;
+  if (n > -FP_EXPBIAS)
+    {
+      u.bits.exp = n + FP_EXPBIAS;
+      return u.flt;
+    }
+  u.bits.exp = 1;
+  u1.flt = 1.;
+  u1.bits.exp = n - 1 + 2 * FP_EXPBIAS;
+  return u.flt * u1.flt;
+}
+
+static inline int get_cde(int c, int d)
+{
+  int maxe = c, mine = d;
+  if (c < d)
+    {
+      maxe = d;
+      mine = c;
+    }
+  if (maxe > FP_EXPBIAS / 2)
+    {
+      if (mine - maxe > -FP_EXPBIAS)
+        return maxe;
+      if (maxe - FP_EXPBIAS / 2 >= mine - maxe + FP_EXPBIAS)
+        return maxe - FP_EXPBIAS / 2;
+      return mine - maxe + FP_EXPBIAS;
+    }
+  if (-mine > FP_EXPBIAS / 2)
+    return mine + FP_EXPBIAS <= maxe ? mine + FP_EXPBIAS : maxe;
+  return 0;
+}
+
+static inline int get_abe(int e1, int e2)
+{
+  int maxe = e1, mine = e2;
+  if (e1 < e2)
+    {
+      maxe = e2;
+      mine = e1;
+    }
+  if (maxe >= FP_EXPBIAS)
+    return maxe - FP_EXPBIAS + 1;
+  if (mine <= -FP_EXPBIAS)
+    {
+      if (maxe < 0)
+        return maxe;
+      return FP_EXPBIAS - 1 - maxe;
+    }
+  return 0;
+}
+#endif /* FP_EXPBIAS */
+
 CTYPE
 CONCAT3(__div,MODE,3) (MTYPE a, MTYPE b, MTYPE c, MTYPE d)
 {
   MTYPE denom, ratio, x, y;
   CTYPE res;
 
-  /* ??? We can get better behavior from logarithmic scaling instead of
-     the division.  But that would mean starting to link libgcc against
-     libm.  We could implement something akin to ldexp/frexp as gcc builtins
-     fairly easily...  */
+#if defined(FP_EXPBIAS)
+  /* By scaling the calculation with powers of 2.0 we can avoid any roundoff
+     errors.
+     1. Convert (a+bi)/(c+di) to ((a+bi)/((c/x)+(d/x)i))*(1.0/x), where
+       x is any power of 2, such that neither (c/x)**2 nor (d/x)**2 cause
+       an overflow. Try to avoid underflow in c/x and d/x.
+     2) Callculate a real part as
+       ((a/y)*(c/x)+(b/y)*(d/x)) / ((c/x)**2+(y/x)**2) * (y/x), where
+       y is any power of 2, such that neither (a/y)*(c/x) nor (b/y)*(d/x) cause
+       an overflow. Try to avoid underflow in a/y and b/y.
+     3) Callculate an imaginary part as
+       ((b/y)*(c/x)-(a/y)*(d/x)) / ((c/x)**2 + (y/x)**2) * (y/x), where
+       y is any power of 2, such that neither (b/y)*(c/x) nor (a/y)*(d/x) cause
+       an overflow. Try to avoid underflow in a/y and b/y.  */
+
+  int ae, be, ce, de, abe, cde;
+  ae = fp_exp (a);
+  be = fp_exp (b);
+  ce = fp_exp (c);
+  de = fp_exp (d);
+  cde = get_cde (ce, de);
+  if (cde != 0) {
+    ratio = fp_pow2 (-cde);
+    c *= ratio;
+    d *= ratio;
+    ce -= cde;
+    de -= cde;
+  }
+  denom = c * c + d * d;
+
+  // Calculate a real part
+  abe = get_abe (ae + ce, be + de);
+  if (abe != 0)
+    {
+      MTYPE a1, b1;
+      ratio = fp_pow2 (-abe);
+      a1 = a * ratio;
+      b1 = b * ratio;
+      x = a1 * c + b1 * d;
+    }
+  else
+    x = a * c + b * d;
+  x /= denom;
+  if (abe - cde != 0)
+    x *= fp_pow2(abe - cde);
+
+  // Calculate an imaginary part
+  abe = get_abe (be + ce, ae + de);
+  if (abe != 0)
+    {
+      MTYPE a1, b1;
+      ratio = fp_pow2 (-abe);
+      a1 = a * ratio;
+      b1 = b * ratio;
+      y = b1 * c - a1 * d;
+    }
+  else
+    y = b * c - a * d;
+  y /= denom;
+  if (abe - cde != 0)
+    y *= fp_pow2(abe - cde);
+
+#else
   if (FABS (c) < FABS (d))
     {
       ratio = c / d;
       denom = (c * ratio) + d;
       x = ((a * ratio) + b) / denom;
       y = ((b * ratio) - a) / denom;
-    }
-  else
+     }
+   else
     {
       ratio = d / c;
       denom = (d * ratio) + c;
       x = ((b * ratio) + a) / denom;
       y = (b - (a * ratio)) / denom;
     }
+#endif
 
   /* Recover infinities and zeros that computed as NaN+iNaN; the only cases
      are nonzero/zero, infinite/finite, and finite/infinite.  */
-- 
1.8.3.1

Reply via email to