All it really did was throw a printk for no obvious reason.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
 # Makefile for the Linux/MIPS kernel FPU emulation.
 #
 
-obj-y  += cp1emu.o ieee754dp.o ieee754sp.o ieee754.o ieee754xcpt.o dp_div.o \
-          dp_mul.o dp_sub.o dp_add.o dp_fsp.o dp_cmp.o dp_simple.o dp_tint.o \
+obj-y  += cp1emu.o ieee754dp.o ieee754sp.o ieee754.o dp_div.o dp_mul.o \
+          dp_sub.o dp_add.o dp_fsp.o dp_cmp.o dp_simple.o dp_tint.o \
           dp_fint.o dp_tlong.o dp_flong.o sp_div.o sp_mul.o sp_sub.o \
           sp_add.o sp_fdp.o sp_cmp.o sp_simple.o sp_tint.o sp_fint.o \
           sp_tlong.o sp_flong.o kernel_linkage.o dsemul.o
 
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_DNORM):
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754dp_nanxcpt(ieee754dp_indef(), "add", x, y);
+               return ieee754dp_nanxcpt(ieee754dp_indef());
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
                if (xs == ys)
                        return x;
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754dp_xcpt(ieee754dp_indef(), "add", x, y);
+               return ieee754dp_indef();
 
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
                }
 
        }
-       DPNORMRET2(xs, xe, xm, "add", x, y);
+
+       return ieee754dp_format(xs, xe, xm);
 }
 
                        return 1;
                if (cmp & (IEEE754_CLT | IEEE754_CGT)) {
                        if (sig && ieee754_setandtestcx(IEEE754_INVALID_OPERATION))
-                               return ieee754di_xcpt(0, "fcmpf", x);
+                               return 0;
                }
                return 0;
        } else {
 
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_DNORM):
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754dp_nanxcpt(ieee754dp_indef(), "div", x, y);
+               return ieee754dp_nanxcpt(ieee754dp_indef());
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
 
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754dp_xcpt(ieee754dp_indef(), "div", x, y);
+               return ieee754dp_indef();
 
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754dp_xcpt(ieee754dp_indef(), "div", x, y);
+               return ieee754dp_indef();
 
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_ZERO):
        case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
                ieee754_setcx(IEEE754_ZERO_DIVIDE);
-               return ieee754dp_xcpt(ieee754dp_inf(xs ^ ys), "div", x, y);
+               return ieee754dp_inf(xs ^ ys);
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_NORM):
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_DNORM):
                        re--;
                }
 
-               DPNORMRET2(xs == ys ? 0 : 1, re, rm, "div", x, y);
+               return ieee754dp_format(xs == ys ? 0 : 1, re, rm);
        }
 }
 
                        xe--;
                }
        }
-       DPNORMRET1(xs, xe, xm, "dp_flong", x);
+
+       return ieee754dp_format(xs, xe, xm);
 }
 
        switch (xc) {
        case IEEE754_CLASS_SNAN:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754dp_nanxcpt(ieee754dp_indef(), "fsp");
+               return ieee754dp_nanxcpt(ieee754dp_indef());
        case IEEE754_CLASS_QNAN:
                return ieee754dp_nanxcpt(builddp(xs,
                                                 DP_EMAX + 1 + DP_EBIAS,
                                                 ((u64) xm
                                                  << (DP_FBITS -
-                                                     SP_FBITS))), "fsp",
-                                        x);
+                                                     SP_FBITS))));
        case IEEE754_CLASS_INF:
                return ieee754dp_inf(xs);
        case IEEE754_CLASS_ZERO:
 
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_DNORM):
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754dp_nanxcpt(ieee754dp_indef(), "mul", x, y);
+               return ieee754dp_nanxcpt(ieee754dp_indef());
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754dp_xcpt(ieee754dp_indef(), "mul", x, y);
+               return ieee754dp_indef();
 
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
        case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_INF):
                            ((rm << (DP_FBITS + 1 + 3 + 1)) != 0);
                }
                assert(rm & (DP_HIDDEN_BIT << 3));
-               DPNORMRET2(rs, re, rm, "mul", x, y);
+
+               return ieee754dp_format(rs, re, rm);
        }
 }
 
                union ieee754dp y = ieee754dp_indef();
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                DPSIGN(y) = DPSIGN(x);
-               return ieee754dp_nanxcpt(y, "neg");
+               return ieee754dp_nanxcpt(y);
        }
 
        return x;
 
        if (xc == IEEE754_CLASS_SNAN) {
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754dp_nanxcpt(ieee754dp_indef(), "abs");
+               return ieee754dp_nanxcpt(ieee754dp_indef());
        }
 
        return x;
 
        switch (xc) {
        case IEEE754_CLASS_QNAN:
                /* sqrt(Nan) = Nan */
-               return ieee754dp_nanxcpt(x, "sqrt");
+               return ieee754dp_nanxcpt(x);
        case IEEE754_CLASS_SNAN:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754dp_nanxcpt(ieee754dp_indef(), "sqrt");
+               return ieee754dp_nanxcpt(ieee754dp_indef());
        case IEEE754_CLASS_ZERO:
                /* sqrt(0) = 0 */
                return x;
                if (xs) {
                        /* sqrt(-Inf) = Nan */
                        ieee754_setcx(IEEE754_INVALID_OPERATION);
-                       return ieee754dp_nanxcpt(ieee754dp_indef(), "sqrt");
+                       return ieee754dp_nanxcpt(ieee754dp_indef());
                }
                /* sqrt(+Inf) = Inf */
                return x;
                if (xs) {
                        /* sqrt(-x) = Nan */
                        ieee754_setcx(IEEE754_INVALID_OPERATION);
-                       return ieee754dp_nanxcpt(ieee754dp_indef(), "sqrt");
+                       return ieee754dp_nanxcpt(ieee754dp_indef());
                }
                break;
        }
 
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_DNORM):
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754dp_nanxcpt(ieee754dp_indef(), "sub", x, y);
+               return ieee754dp_nanxcpt(ieee754dp_indef());
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
                if (xs != ys)
                        return x;
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754dp_xcpt(ieee754dp_indef(), "sub", x, y);
+               return ieee754dp_indef();
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
        case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_INF):
                        xe--;
                }
        }
-       DPNORMRET2(xs, xe, xm, "sub", x, y);
+
+       return ieee754dp_format(xs, xe, xm);
 }
 
        case IEEE754_CLASS_QNAN:
        case IEEE754_CLASS_INF:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754si_xcpt(ieee754si_indef(), "dp_tint", x);
+               return ieee754si_indef();
        case IEEE754_CLASS_ZERO:
                return 0;
        case IEEE754_CLASS_DNORM:
                /* Set invalid. We will only use overflow for floating
                   point overflow */
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754si_xcpt(ieee754si_indef(), "dp_tint", x);
+               return ieee754si_indef();
        }
        /* oh gawd */
        if (xe > DP_FBITS) {
                if ((xm >> 31) != 0 && (xs == 0 || xm != 0x80000000)) {
                        /* This can happen after rounding */
                        ieee754_setcx(IEEE754_INVALID_OPERATION);
-                       return ieee754si_xcpt(ieee754si_indef(), "dp_tint", x);
+                       return ieee754si_indef();
                }
                if (round || sticky)
                        ieee754_setcx(IEEE754_INEXACT);
 
        case IEEE754_CLASS_QNAN:
        case IEEE754_CLASS_INF:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754di_xcpt(ieee754di_indef(), "dp_tlong", x);
+               return ieee754di_indef();
        case IEEE754_CLASS_ZERO:
                return 0;
        case IEEE754_CLASS_DNORM:
                /* Set invalid. We will only use overflow for floating
                   point overflow */
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754di_xcpt(ieee754di_indef(), "dp_tlong", x);
+               return ieee754di_indef();
        }
        /* oh gawd */
        if (xe > DP_FBITS) {
                if ((xm >> 63) != 0) {
                        /* This can happen after rounding */
                        ieee754_setcx(IEEE754_INVALID_OPERATION);
-                       return ieee754di_xcpt(ieee754di_indef(), "dp_tlong", x);
+                       return ieee754di_indef();
                }
                if (round || sticky)
                        ieee754_setcx(IEEE754_INEXACT);
 
  * ########################################################################
  */
 
-#include <stdarg.h>
 #include <linux/compiler.h>
 
 #include "ieee754int.h"
 /* special constants
 */
 
-#ifdef __MIPSEB__
-#define SPSTR(s, b, m) {s, b, m}
-#define DPSTR(s, b, mh, ml) {s, b, mh, ml}
-#elif defined(__MIPSEL__)
-#define SPSTR(s, b, m) {m, b, s}
-#define DPSTR(s, b, mh, ml) {ml, mh, b, s}
-#else /* !defined (__MIPSEB__) && !defined (__MIPSEL__) */
-#error "MIPS but neither __MIPSEB__ nor __MIPSEL__?"
-#endif
+#define DPSTR(s, b, mh, ml)                                            \
+{                                                                      \
+       .sign   = (s),                                                  \
+       .bexp   = (b),                                                  \
+       .manthi = (mh),                                                 \
+       .mantlo = (ml)                                                  \
+}
 
 const struct ieee754dp_const __ieee754dp_spcvals[] = {
        DPSTR(0, DP_EMIN - 1 + DP_EBIAS, 0, 0), /* + zero   */
        DPSTR(0, 63 + DP_EBIAS, 0, 0),  /* + 1.0e63 */
 };
 
+#define SPSTR(s, b, m)                                                 \
+{                                                                      \
+       .sign   = (s),                                                  \
+       .bexp   = (b),                                                  \
+       .mant   = (m)                                                   \
+}
+
 const struct ieee754sp_const __ieee754sp_spcvals[] = {
        SPSTR(0, SP_EMIN - 1 + SP_EBIAS, 0),    /* + zero   */
        SPSTR(1, SP_EMIN - 1 + SP_EBIAS, 0),    /* - zero   */
        SPSTR(0, 31 + SP_EBIAS, 0),     /* + 1.0e31 */
        SPSTR(0, 63 + SP_EBIAS, 0),     /* + 1.0e63 */
 };
-
-
-int __cold ieee754si_xcpt(int r, const char *op, ...)
-{
-       struct ieee754xctx ax;
-
-       if (!ieee754_tstx())
-               return r;
-       ax.op = op;
-       ax.rt = IEEE754_RT_SI;
-       ax.rv.si = r;
-       va_start(ax.ap, op);
-       ieee754_xcpt(&ax);
-       va_end(ax.ap);
-       return ax.rv.si;
-}
-
-s64 __cold ieee754di_xcpt(s64 r, const char *op, ...)
-{
-       struct ieee754xctx ax;
-
-       if (!ieee754_tstx())
-               return r;
-       ax.op = op;
-       ax.rt = IEEE754_RT_DI;
-       ax.rv.di = r;
-       va_start(ax.ap, op);
-       ieee754_xcpt(&ax);
-       va_end(ax.ap);
-       return ax.rv.di;
-}
 
 #ifndef __ARCH_MIPS_MATH_EMU_IEEE754_H
 #define __ARCH_MIPS_MATH_EMU_IEEE754_H
 
-#include <stdarg.h>
 #include <linux/compiler.h>
 #include <asm/byteorder.h>
 #include <linux/kernel.h>
        return S64_MAX;
 }
 
-/* IEEE exception context, passed to handler */
-struct ieee754xctx {
-       const char *op;         /* operation name */
-       int rt;                 /* result type */
-       union {
-               union ieee754sp sp;     /* single precision */
-               union ieee754dp dp;     /* double precision */
-               int si;         /* standard signed integer (32bits) */
-               s64 di;         /* extended signed integer (64bits) */
-       } rv;                   /* default result format implied by op */
-       va_list ap;
-};
-
 /* result types for xctx.rt */
 #define IEEE754_RT_SP  0
 #define IEEE754_RT_DP  1
 #define IEEE754_RT_SI  3
 #define IEEE754_RT_DI  4
 
-extern void __cold ieee754_xcpt(struct ieee754xctx *xcp);
-
 /* compat */
 #define ieee754dp_fix(x)       ieee754dp_tint(x)
 #define ieee754sp_fix(x)       ieee754sp_tint(x)
 
  * ########################################################################
  */
 
-#include <stdarg.h>
 #include <linux/compiler.h>
 
 #include "ieee754dp.h"
 }
 
 
-union ieee754dp __cold ieee754dp_xcpt(union ieee754dp r, const char *op, ...)
+union ieee754dp __cold ieee754dp_nanxcpt(union ieee754dp r)
 {
-       struct ieee754xctx ax;
-       if (!ieee754_tstx())
-               return r;
-
-       ax.op = op;
-       ax.rt = IEEE754_RT_DP;
-       ax.rv.dp = r;
-       va_start(ax.ap, op);
-       ieee754_xcpt(&ax);
-       va_end(ax.ap);
-       return ax.rv.dp;
-}
-
-union ieee754dp __cold ieee754dp_nanxcpt(union ieee754dp r, const char *op, ...)
-{
-       struct ieee754xctx ax;
-
        assert(ieee754dp_isnan(r));
 
        if (!ieee754dp_issnan(r))       /* QNAN does not cause invalid op !! */
                        return ieee754dp_indef();
        }
 
-       ax.op = op;
-       ax.rt = 0;
-       ax.rv.dp = r;
-       va_start(ax.ap, op);
-       ieee754_xcpt(&ax);
-       va_end(ax.ap);
-       return ax.rv.dp;
+       return r;
 }
 
 static u64 get_rounding(int sn, u64 xm)
 
 }
 
 extern int ieee754dp_isnan(union ieee754dp);
-extern int __cold ieee754si_xcpt(int, const char *, ...);
-extern s64 __cold ieee754di_xcpt(s64, const char *, ...);
-extern union ieee754dp __cold ieee754dp_xcpt(union ieee754dp, const char *, ...);
-extern union ieee754dp __cold ieee754dp_nanxcpt(union ieee754dp, const char *, ...);
+extern union ieee754dp __cold ieee754dp_nanxcpt(union ieee754dp);
 extern union ieee754dp ieee754dp_format(int, int, u64);
-
-
-#define DPNORMRET2(s, e, m, name, a0, a1)                              \
-{                                                                      \
-       union ieee754dp V = ieee754dp_format(s, e, m);                  \
-       if (ieee754_tstx())                                             \
-               return ieee754dp_xcpt(V, name, a0, a1);                 \
-       else                                                            \
-               return V;                                               \
-}
-
-#define DPNORMRET1(s, e, m, name, a0)  DPNORMRET2(s, e, m, name, a0, a0)
 
        return ieee754_csr.mx & x;
 }
 
-static inline int ieee754_tstx(void)
-{
-       return ieee754_csr.cx & ieee754_csr.mx;
-}
-
 #define COMPXSP \
        unsigned xm; int xe; int xs __maybe_unused; int xc
 
 
  * ########################################################################
  */
 
-#include <stdarg.h>
 #include <linux/compiler.h>
 
 #include "ieee754sp.h"
 }
 
 
-union ieee754sp __cold ieee754sp_xcpt(union ieee754sp r, const char *op, ...)
+union ieee754sp __cold ieee754sp_nanxcpt(union ieee754sp r)
 {
-       struct ieee754xctx ax;
-
-       if (!ieee754_tstx())
-               return r;
-
-       ax.op = op;
-       ax.rt = IEEE754_RT_SP;
-       ax.rv.sp = r;
-       va_start(ax.ap, op);
-       ieee754_xcpt(&ax);
-       va_end(ax.ap);
-       return ax.rv.sp;
-}
-
-union ieee754sp __cold ieee754sp_nanxcpt(union ieee754sp r, const char *op, ...)
-{
-       struct ieee754xctx ax;
-
        assert(ieee754sp_isnan(r));
 
        if (!ieee754sp_issnan(r))       /* QNAN does not cause invalid op !! */
                        return ieee754sp_indef();
        }
 
-       ax.op = op;
-       ax.rt = 0;
-       ax.rv.sp = r;
-       va_start(ax.ap, op);
-       ieee754_xcpt(&ax);
-       va_end(ax.ap);
-       return ax.rv.sp;
+       return r;
 }
 
 static unsigned get_rounding(int sn, unsigned xm)
 
 }
 
 extern int ieee754sp_isnan(union ieee754sp);
-extern int __cold ieee754si_xcpt(int, const char *, ...);
-extern s64 __cold ieee754di_xcpt(s64, const char *, ...);
-extern union ieee754sp __cold ieee754sp_xcpt(union ieee754sp, const char *, ...);
-extern union ieee754sp __cold ieee754sp_nanxcpt(union ieee754sp, const char *, ...);
+extern union ieee754sp __cold ieee754sp_nanxcpt(union ieee754sp);
 extern union ieee754sp ieee754sp_format(int, int, unsigned);
-
-
-#define SPNORMRET2(s, e, m, name, a0, a1)                              \
-{                                                                      \
-       union ieee754sp V = ieee754sp_format(s, e, m);                  \
-                                                                       \
-       if (ieee754_tstx())                                             \
-               return ieee754sp_xcpt(V, name, a0, a1);                 \
-       else                                                            \
-               return V;                                               \
-}
-
-#define SPNORMRET1(s, e, m, name, a0)  SPNORMRET2(s, e, m, name, a0, a0)
 
+++ /dev/null
-/*
- * MIPS floating point support
- * Copyright (C) 1994-2000 Algorithmics Ltd.
- *
- * ########################################################################
- *
- *  This program is free software; you can distribute it and/or modify it
- *  under the terms of the GNU General Public License (Version 2) as
- *  published by the Free Software Foundation.
- *
- *  This program is distributed in the hope it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with this program; if not, write to the Free Software Foundation, Inc.,
- *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * ########################################################################
- */
-
-/**************************************************************************
- *  Nov 7, 2000
- *  Added preprocessor hacks to map to Linux kernel diagnostics.
- *
- *  Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com
- *  Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved.
- *************************************************************************/
-
-#include <linux/compiler.h>
-#include <linux/printk.h>
-#include "ieee754.h"
-
-/*
- * Very naff exception handler (you can plug in your own and
- * override this).
- */
-
-static const char *const rtnames[] = {
-       "sp", "dp", "xp", "si", "di"
-};
-
-void __cold ieee754_xcpt(struct ieee754xctx *xcp)
-{
-       printk(KERN_DEBUG "floating point exception in \"%s\", type=%s\n",
-               xcp->op, rtnames[xcp->rt]);
-}
 
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_DNORM):
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754sp_nanxcpt(ieee754sp_indef(), "add", x, y);
+               return ieee754sp_nanxcpt(ieee754sp_indef());
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
                if (xs == ys)
                        return x;
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754sp_xcpt(ieee754sp_indef(), "add", x, y);
+               return ieee754sp_indef();
 
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
                }
 
        }
-       SPNORMRET2(xs, xe, xm, "add", x, y);
+
+       return ieee754sp_format(xs, xe, xm);
 }
 
                        return 1;
                if (cmp & (IEEE754_CLT | IEEE754_CGT)) {
                        if (sig && ieee754_setandtestcx(IEEE754_INVALID_OPERATION))
-                               return ieee754si_xcpt(0, "fcmpf", x);
+                               return 0;
                }
                return 0;
        } else {
 
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_DNORM):
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754sp_nanxcpt(ieee754sp_indef(), "div", x, y);
+               return ieee754sp_nanxcpt(ieee754sp_indef());
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
 
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754sp_xcpt(ieee754sp_indef(), "div", x, y);
+               return ieee754sp_indef();
 
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754sp_xcpt(ieee754sp_indef(), "div", x, y);
+               return ieee754sp_indef();
 
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_ZERO):
        case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
                ieee754_setcx(IEEE754_ZERO_DIVIDE);
-               return ieee754sp_xcpt(ieee754sp_inf(xs ^ ys), "div", x, y);
+               return ieee754sp_inf(xs ^ ys);
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_NORM):
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_DNORM):
                        re--;
                }
 
-               SPNORMRET2(xs == ys ? 0 : 1, re, rm, "div", x, y);
+               return ieee754sp_format(xs == ys ? 0 : 1, re, rm);
        }
 }
 
        switch (xc) {
        case IEEE754_CLASS_SNAN:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754sp_nanxcpt(ieee754sp_indef(), "fdp");
+               return ieee754sp_nanxcpt(ieee754sp_indef());
        case IEEE754_CLASS_QNAN:
                nan = buildsp(xs, SP_EMAX + 1 + SP_EBIAS, (u32)
                                (xm >> (DP_FBITS - SP_FBITS)));
                if (!ieee754sp_isnan(nan))
                        nan = ieee754sp_indef();
-               return ieee754sp_nanxcpt(nan, "fdp", x);
+               return ieee754sp_nanxcpt(nan);
        case IEEE754_CLASS_INF:
                return ieee754sp_inf(xs);
        case IEEE754_CLASS_ZERO:
                ieee754_setcx(IEEE754_INEXACT);
                if ((ieee754_csr.rm == IEEE754_RU && !xs) ||
                                (ieee754_csr.rm == IEEE754_RD && xs))
-                       return ieee754sp_xcpt(ieee754sp_mind(xs), "fdp", x);
-               return ieee754sp_xcpt(ieee754sp_zero(xs), "fdp", x);
+                       return ieee754sp_mind(xs);
+               return ieee754sp_zero(xs);
        case IEEE754_CLASS_NORM:
                break;
        }
                rm = (xm >> (DP_FBITS - (SP_FBITS + 3))) |
                    ((xm << (64 - (DP_FBITS - (SP_FBITS + 3)))) != 0);
 
-               SPNORMRET1(xs, xe, rm, "fdp", x);
+               return ieee754sp_format(xs, xe, rm);
        }
 }
 
                        xe--;
                }
        }
-       SPNORMRET1(xs, xe, xm, "fint", x);
+       return ieee754sp_format(xs, xe, xm);
 }
 
                        xe--;
                }
        }
-       SPNORMRET1(xs, xe, xm, "sp_flong", x);
+       return ieee754sp_format(xs, xe, xm);
 }
 
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_DNORM):
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754sp_nanxcpt(ieee754sp_indef(), "mul", x, y);
+               return ieee754sp_nanxcpt(ieee754sp_indef());
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754sp_xcpt(ieee754sp_indef(), "mul", x, y);
+               return ieee754sp_indef();
 
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
        case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_INF):
                }
                assert(rm & (SP_HIDDEN_BIT << 3));
 
-               SPNORMRET2(rs, re, rm, "mul", x, y);
+               return ieee754sp_format(rs, re, rm);
        }
 }
 
                union ieee754sp y = ieee754sp_indef();
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                SPSIGN(y) = SPSIGN(x);
-               return ieee754sp_nanxcpt(y, "neg");
+               return ieee754sp_nanxcpt(y);
        }
 
        return x;
 
        if (xc == IEEE754_CLASS_SNAN) {
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754sp_nanxcpt(ieee754sp_indef(), "abs");
+               return ieee754sp_nanxcpt(ieee754sp_indef());
        }
 
        return x;
 
        switch (xc) {
        case IEEE754_CLASS_QNAN:
                /* sqrt(Nan) = Nan */
-               return ieee754sp_nanxcpt(x, "sqrt");
+               return ieee754sp_nanxcpt(x);
        case IEEE754_CLASS_SNAN:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754sp_nanxcpt(ieee754sp_indef(), "sqrt");
+               return ieee754sp_nanxcpt(ieee754sp_indef());
        case IEEE754_CLASS_ZERO:
                /* sqrt(0) = 0 */
                return x;
                if (xs) {
                        /* sqrt(-Inf) = Nan */
                        ieee754_setcx(IEEE754_INVALID_OPERATION);
-                       return ieee754sp_nanxcpt(ieee754sp_indef(), "sqrt");
+                       return ieee754sp_nanxcpt(ieee754sp_indef());
                }
                /* sqrt(+Inf) = Inf */
                return x;
                if (xs) {
                        /* sqrt(-x) = Nan */
                        ieee754_setcx(IEEE754_INVALID_OPERATION);
-                       return ieee754sp_nanxcpt(ieee754sp_indef(), "sqrt");
+                       return ieee754sp_nanxcpt(ieee754sp_indef());
                }
                break;
        }
 
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_DNORM):
        case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754sp_nanxcpt(ieee754sp_indef(), "sub", x, y);
+               return ieee754sp_nanxcpt(ieee754sp_indef());
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
                if (xs != ys)
                        return x;
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754sp_xcpt(ieee754sp_indef(), "sub", x, y);
+               return ieee754sp_indef();
 
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
        case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_INF):
                        xe--;
                }
        }
-       SPNORMRET2(xs, xe, xm, "sub", x, y);
+
+       return ieee754sp_format(xs, xe, xm);
 }
 
        case IEEE754_CLASS_QNAN:
        case IEEE754_CLASS_INF:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754si_xcpt(ieee754si_indef(), "sp_tint", x);
+               return ieee754si_indef();
        case IEEE754_CLASS_ZERO:
                return 0;
        case IEEE754_CLASS_DNORM:
                /* Set invalid. We will only use overflow for floating
                   point overflow */
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754si_xcpt(ieee754si_indef(), "sp_tint", x);
+               return ieee754si_indef();
        }
        /* oh gawd */
        if (xe > SP_FBITS) {
                if ((xm >> 31) != 0) {
                        /* This can happen after rounding */
                        ieee754_setcx(IEEE754_INVALID_OPERATION);
-                       return ieee754si_xcpt(ieee754si_indef(), "sp_tint", x);
+                       return ieee754si_indef();
                }
                if (round || sticky)
                        ieee754_setcx(IEEE754_INEXACT);
 
        case IEEE754_CLASS_QNAN:
        case IEEE754_CLASS_INF:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754di_xcpt(ieee754di_indef(), "sp_tlong", x);
+               return ieee754di_indef();
        case IEEE754_CLASS_ZERO:
                return 0;
        case IEEE754_CLASS_DNORM:
                /* Set invalid. We will only use overflow for floating
                   point overflow */
                ieee754_setcx(IEEE754_INVALID_OPERATION);
-               return ieee754di_xcpt(ieee754di_indef(), "sp_tlong", x);
+               return ieee754di_indef();
        }
        /* oh gawd */
        if (xe > SP_FBITS) {
                if ((xm >> 63) != 0) {
                        /* This can happen after rounding */
                        ieee754_setcx(IEEE754_INVALID_OPERATION);
-                       return ieee754di_xcpt(ieee754di_indef(), "sp_tlong", x);
+                       return ieee754di_indef();
                }
                if (round || sticky)
                        ieee754_setcx(IEEE754_INEXACT);