MIPS: math-emu: Cleanup coding style.
authorRalf Baechle <ralf@linux-mips.org>
Fri, 25 Apr 2014 23:49:14 +0000 (01:49 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Fri, 23 May 2014 13:11:15 +0000 (15:11 +0200)
 o Only define variables in the outermost block
 o One empty line at most
 o Format comments as per CodingStyle
 o Update FSF address in licensing term comment
 o Spell FPU and MIPS in all capitals.
 o Remove ####-type of lines in comments.
 o Try to make things a bit most consistent between sp_*.c / dp_*.c files.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
34 files changed:
arch/mips/math-emu/cp1emu.c
arch/mips/math-emu/dp_add.c
arch/mips/math-emu/dp_cmp.c
arch/mips/math-emu/dp_div.c
arch/mips/math-emu/dp_fint.c
arch/mips/math-emu/dp_flong.c
arch/mips/math-emu/dp_fsp.c
arch/mips/math-emu/dp_mul.c
arch/mips/math-emu/dp_simple.c
arch/mips/math-emu/dp_sqrt.c
arch/mips/math-emu/dp_sub.c
arch/mips/math-emu/dp_tint.c
arch/mips/math-emu/dp_tlong.c
arch/mips/math-emu/ieee754.c
arch/mips/math-emu/ieee754.h
arch/mips/math-emu/ieee754d.c
arch/mips/math-emu/ieee754dp.c
arch/mips/math-emu/ieee754dp.h
arch/mips/math-emu/ieee754int.h
arch/mips/math-emu/ieee754sp.c
arch/mips/math-emu/ieee754sp.h
arch/mips/math-emu/kernel_linkage.c
arch/mips/math-emu/sp_add.c
arch/mips/math-emu/sp_cmp.c
arch/mips/math-emu/sp_div.c
arch/mips/math-emu/sp_fdp.c
arch/mips/math-emu/sp_fint.c
arch/mips/math-emu/sp_flong.c
arch/mips/math-emu/sp_mul.c
arch/mips/math-emu/sp_simple.c
arch/mips/math-emu/sp_sqrt.c
arch/mips/math-emu/sp_sub.c
arch/mips/math-emu/sp_tint.c
arch/mips/math-emu/sp_tlong.c

index 3a0dfa4feaddd7881d7c42237caf759db8b5a258..6258291354eb8df25896f4b0ec654f17ef29f210 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * cp1emu.c: a MIPS coprocessor 1 (fpu) instruction emulator
+ * cp1emu.c: a MIPS coprocessor 1 (FPU) instruction emulator
  *
  * MIPS floating point support
  * Copyright (C) 1994-2000 Algorithmics Ltd.
  *
  *  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.
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  *
  * A complete emulator for MIPS coprocessor 1 instructions.  This is
  * required for #float(switch) or #float(trap), where it catches all
  * COP1 instructions via the "CoProcessor Unusable" exception.
  *
  * More surprisingly it is also required for #float(ieee), to help out
- * the hardware fpu at the boundaries of the IEEE-754 representation
+ * the hardware FPU at the boundaries of the IEEE-754 representation
  * (denormalised values, infinities, underflow, etc).  It is made
  * quite nasty because emulation of some non-COP1 instructions is
  * required, e.g. in branch delay slots.
  *
- * Note if you know that you won't have an fpu, then you'll get much
+ * Note if you know that you won't have an FPU, then you'll get much
  * better performance by compiling with -msoft-float!
  */
 #include <linux/sched.h>
@@ -72,14 +72,14 @@ static int fpux_emu(struct pt_regs *,
 #define MM_POOL32A_MINOR_SHIFT 0x6
 #define MM_MIPS32_COND_FC      0x30
 
-/* Convert Mips rounding mode (0..3) to IEEE library modes. */
+/* Convert MIPS rounding mode (0..3) to IEEE library modes. */
 static const unsigned char ieee_rm[4] = {
        [FPU_CSR_RN] = IEEE754_RN,
        [FPU_CSR_RZ] = IEEE754_RZ,
        [FPU_CSR_RU] = IEEE754_RU,
        [FPU_CSR_RD] = IEEE754_RD,
 };
-/* Convert IEEE library modes to Mips rounding mode (0..3). */
+/* Convert IEEE library modes to MIPS rounding mode (0..3). */
 static const unsigned char mips_rm[4] = {
        [IEEE754_RN] = FPU_CSR_RN,
        [IEEE754_RZ] = FPU_CSR_RZ,
@@ -914,10 +914,16 @@ do {                                                                      \
 static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                struct mm_decoded_insn dec_insn, void *__user *fault_addr)
 {
-       mips_instruction ir;
        unsigned long contpc = xcp->cp0_epc + dec_insn.pc_inc;
-       unsigned int cond;
-       int pc_inc;
+       unsigned int cond, cbit;
+       mips_instruction ir;
+       int likely, pc_inc;
+       u32 __user *wva;
+       u64 __user *dva;
+       u32 value;
+       u32 wval;
+       u64 dval;
+       int sig;
 
        /* XXX NEC Vr54xx bug workaround */
        if (delay_slot(xcp)) {
@@ -972,94 +978,81 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                        return SIGILL;
        }
 
-      emul:
+emul:
        perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, xcp, 0);
        MIPS_FPU_EMU_INC_STATS(emulated);
        switch (MIPSInst_OPCODE(ir)) {
-       case ldc1_op:{
-               u64 __user *va = (u64 __user *) (xcp->regs[MIPSInst_RS(ir)] +
-                       MIPSInst_SIMM(ir));
-               u64 val;
-
+       case ldc1_op:
+               dva = (u64 __user *) (xcp->regs[MIPSInst_RS(ir)] +
+                                    MIPSInst_SIMM(ir));
                MIPS_FPU_EMU_INC_STATS(loads);
 
-               if (!access_ok(VERIFY_READ, va, sizeof(u64))) {
+               if (!access_ok(VERIFY_READ, dva, sizeof(u64))) {
                        MIPS_FPU_EMU_INC_STATS(errors);
-                       *fault_addr = va;
+                       *fault_addr = dva;
                        return SIGBUS;
                }
-               if (__get_user(val, va)) {
+               if (__get_user(dval, dva)) {
                        MIPS_FPU_EMU_INC_STATS(errors);
-                       *fault_addr = va;
+                       *fault_addr = dva;
                        return SIGSEGV;
                }
-               DITOREG(val, MIPSInst_RT(ir));
+               DITOREG(dval, MIPSInst_RT(ir));
                break;
-       }
-
-       case sdc1_op:{
-               u64 __user *va = (u64 __user *) (xcp->regs[MIPSInst_RS(ir)] +
-                       MIPSInst_SIMM(ir));
-               u64 val;
 
+       case sdc1_op:
+               dva = (u64 __user *) (xcp->regs[MIPSInst_RS(ir)] +
+                                     MIPSInst_SIMM(ir));
                MIPS_FPU_EMU_INC_STATS(stores);
-               DIFROMREG(val, MIPSInst_RT(ir));
-               if (!access_ok(VERIFY_WRITE, va, sizeof(u64))) {
+               DIFROMREG(dval, MIPSInst_RT(ir));
+               if (!access_ok(VERIFY_WRITE, dva, sizeof(u64))) {
                        MIPS_FPU_EMU_INC_STATS(errors);
-                       *fault_addr = va;
+                       *fault_addr = dva;
                        return SIGBUS;
                }
-               if (__put_user(val, va)) {
+               if (__put_user(dval, dva)) {
                        MIPS_FPU_EMU_INC_STATS(errors);
-                       *fault_addr = va;
+                       *fault_addr = dva;
                        return SIGSEGV;
                }
                break;
-       }
-
-       case lwc1_op:{
-               u32 __user *va = (u32 __user *) (xcp->regs[MIPSInst_RS(ir)] +
-                       MIPSInst_SIMM(ir));
-               u32 val;
 
+       case lwc1_op:
+               wva = (u32 __user *) (xcp->regs[MIPSInst_RS(ir)] +
+                                     MIPSInst_SIMM(ir));
                MIPS_FPU_EMU_INC_STATS(loads);
-               if (!access_ok(VERIFY_READ, va, sizeof(u32))) {
+               if (!access_ok(VERIFY_READ, wva, sizeof(u32))) {
                        MIPS_FPU_EMU_INC_STATS(errors);
-                       *fault_addr = va;
+                       *fault_addr = wva;
                        return SIGBUS;
                }
-               if (__get_user(val, va)) {
+               if (__get_user(wval, wva)) {
                        MIPS_FPU_EMU_INC_STATS(errors);
-                       *fault_addr = va;
+                       *fault_addr = wva;
                        return SIGSEGV;
                }
-               SITOREG(val, MIPSInst_RT(ir));
+               SITOREG(wval, MIPSInst_RT(ir));
                break;
-       }
-
-       case swc1_op:{
-               u32 __user *va = (u32 __user *) (xcp->regs[MIPSInst_RS(ir)] +
-                       MIPSInst_SIMM(ir));
-               u32 val;
 
+       case swc1_op:
+               wva = (u32 __user *) (xcp->regs[MIPSInst_RS(ir)] +
+                                     MIPSInst_SIMM(ir));
                MIPS_FPU_EMU_INC_STATS(stores);
-               SIFROMREG(val, MIPSInst_RT(ir));
-               if (!access_ok(VERIFY_WRITE, va, sizeof(u32))) {
+               SIFROMREG(wval, MIPSInst_RT(ir));
+               if (!access_ok(VERIFY_WRITE, wva, sizeof(u32))) {
                        MIPS_FPU_EMU_INC_STATS(errors);
-                       *fault_addr = va;
+                       *fault_addr = wva;
                        return SIGBUS;
                }
-               if (__put_user(val, va)) {
+               if (__put_user(wval, wva)) {
                        MIPS_FPU_EMU_INC_STATS(errors);
-                       *fault_addr = va;
+                       *fault_addr = wva;
                        return SIGSEGV;
                }
                break;
-       }
 
        case cop1_op:
                switch (MIPSInst_RS(ir)) {
-
                case dmfc_op:
                        if (!cpu_has_mips_3_4_5 && !cpu_has_mips64)
                                return SIGILL;
@@ -1111,10 +1104,8 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                        SITOREG(xcp->regs[MIPSInst_RT(ir)], MIPSInst_RD(ir));
                        break;
 
-               case cfc_op:{
+               case cfc_op:
                        /* cop control register rd -> gpr[rt] */
-                       u32 value;
-
                        if (MIPSInst_RD(ir) == FPCREG_CSR) {
                                value = ctx->fcr31;
                                value = (value & ~FPU_CSR_RM) |
@@ -1130,12 +1121,9 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                        if (MIPSInst_RT(ir))
                                xcp->regs[MIPSInst_RT(ir)] = value;
                        break;
-               }
 
-               case ctc_op:{
+               case ctc_op:
                        /* copregister rd <- rt */
-                       u32 value;
-
                        if (MIPSInst_RT(ir) == 0)
                                value = 0;
                        else
@@ -1160,12 +1148,8 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                                return SIGFPE;
                        }
                        break;
-               }
-
-               case bc_op:{
-                       unsigned int cbit;
-                       int likely = 0;
 
+               case bc_op:
                        if (delay_slot(xcp))
                                return SIGILL;
 
@@ -1175,6 +1159,7 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                                cbit = FPU_CSR_COND;
                        cond = ctx->fcr31 & cbit;
 
+                       likely = 0;
                        switch (MIPSInst_RT(ir) & 3) {
                        case bcfl_op:
                                likely = 1;
@@ -1192,8 +1177,8 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
 
                        set_delay_slot(xcp);
                        if (cond) {
-                               /* branch taken: emulate dslot
-                                * instruction
+                               /*
+                                * Branch taken: emulate dslot instruction
                                 */
                                xcp->cp0_epc += dec_insn.pc_inc;
 
@@ -1228,8 +1213,10 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                                switch (MIPSInst_OPCODE(ir)) {
                                case lwc1_op:
                                        goto emul;
+
                                case swc1_op:
                                        goto emul;
+
                                case ldc1_op:
                                case sdc1_op:
                                        if (cpu_has_mips_2_3_4_5 ||
@@ -1238,14 +1225,17 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
 
                                        return SIGILL;
                                        goto emul;
+
                                case cop1_op:
                                        goto emul;
+
                                case cop1x_op:
                                        if (cpu_has_mips_4_5 || cpu_has_mips64)
                                                /* its one of ours */
                                                goto emul;
 
                                        return SIGILL;
+
                                case spec_op:
                                        if (!cpu_has_mips_4_5_r)
                                                return SIGILL;
@@ -1260,10 +1250,7 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                                 * instruction in the dslot
                                 */
                                return mips_dsemul(xcp, ir, contpc);
-                       }
-                       else {
-                               /* branch not taken */
-                               if (likely) {
+                       } else if (likely) {    /* branch not taken */
                                        /*
                                         * branch likely nullifies
                                         * dslot if not taken
@@ -1275,26 +1262,19 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                                         * dslot as normal insn
                                         */
                                }
-                       }
                        break;
-               }
 
                default:
                        if (!(MIPSInst_RS(ir) & 0x10))
                                return SIGILL;
-                       {
-                               int sig;
 
-                               /* a real fpu computation instruction */
-                               if ((sig = fpu_emu(xcp, ctx, ir)))
-                                       return sig;
-                       }
+                       /* a real fpu computation instruction */
+                       if ((sig = fpu_emu(xcp, ctx, ir)))
+                               return sig;
                }
                break;
 
-       case cop1x_op:{
-               int sig;
-
+       case cop1x_op:
                if (!cpu_has_mips_4_5 && !cpu_has_mips64)
                        return SIGILL;
 
@@ -1302,7 +1282,6 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                if (sig)
                        return sig;
                break;
-       }
 
        case spec_op:
                if (!cpu_has_mips_4_5_r)
@@ -1477,7 +1456,7 @@ static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
 
                        ctx->fcr31 = (ctx->fcr31 & ~FPU_CSR_ALL_X) | rcsr;
                        if ((ctx->fcr31 >> 5) & ctx->fcr31 & FPU_CSR_ALL_E) {
-                               /*printk ("SIGFPE: fpu csr = %08x\n",
+                               /*printk ("SIGFPE: FPU csr = %08x\n",
                                   ctx->fcr31); */
                                return SIGFPE;
                        }
@@ -1584,6 +1563,8 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
 {
        int rfmt;               /* resulting format */
        unsigned rcsr = 0;      /* resulting csr */
+       unsigned int oldrm;
+       unsigned int cbit;
        unsigned cond;
        union {
                union ieee754dp d;
@@ -1591,14 +1572,16 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                int w;
                s64 l;
        } rv;                   /* resulting value */
+       u64 bits;
 
        MIPS_FPU_EMU_INC_STATS(cp1ops);
        switch (rfmt = (MIPSInst_FFMT(ir) & 0xf)) {
-       case s_fmt:           /* 0 */
+       case s_fmt: {           /* 0 */
                union {
                        union ieee754sp(*b) (union ieee754sp, union ieee754sp);
                        union ieee754sp(*u) (union ieee754sp);
                } handler;
+               union ieee754sp fs, ft;
 
                switch (MIPSInst_FUNC(ir)) {
                        /* binary ops */
@@ -1622,6 +1605,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
 
                        handler.u = ieee754sp_sqrt;
                        goto scopuop;
+
                /*
                 * Note that on some MIPS IV implementations such as the
                 * R5000 and R8000 the FSQRT and FRECIP instructions do not
@@ -1633,6 +1617,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
 
                        handler.u = fpemu_sp_rsqrt;
                        goto scopuop;
+
                case frecip_op:
                        if (!cpu_has_mips_4_5_r2)
                                return SIGILL;
@@ -1650,6 +1635,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                                return 0;
                        SPFROMREG(rv.s, MIPSInst_FS(ir));
                        break;
+
                case fmovz_op:
                        if (!cpu_has_mips_4_5_r)
                                return SIGILL;
@@ -1658,6 +1644,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                                return 0;
                        SPFROMREG(rv.s, MIPSInst_FS(ir));
                        break;
+
                case fmovn_op:
                        if (!cpu_has_mips_4_5_r)
                                return SIGILL;
@@ -1666,37 +1653,32 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                                return 0;
                        SPFROMREG(rv.s, MIPSInst_FS(ir));
                        break;
+
                case fabs_op:
                        handler.u = ieee754sp_abs;
                        goto scopuop;
+
                case fneg_op:
                        handler.u = ieee754sp_neg;
                        goto scopuop;
+
                case fmov_op:
                        /* an easy one */
                        SPFROMREG(rv.s, MIPSInst_FS(ir));
                        goto copcsr;
 
                        /* binary op on handler */
-                     scopbop:
-                       {
-                               union ieee754sp fs, ft;
-
-                               SPFROMREG(fs, MIPSInst_FS(ir));
-                               SPFROMREG(ft, MIPSInst_FT(ir));
-
-                               rv.s = (*handler.b) (fs, ft);
-                               goto copcsr;
-                       }
-                     scopuop:
-                       {
-                               union ieee754sp fs;
+scopbop:
+                       SPFROMREG(fs, MIPSInst_FS(ir));
+                       SPFROMREG(ft, MIPSInst_FT(ir));
 
-                               SPFROMREG(fs, MIPSInst_FS(ir));
-                               rv.s = (*handler.u) (fs);
-                               goto copcsr;
-                       }
-                     copcsr:
+                       rv.s = (*handler.b) (fs, ft);
+                       goto copcsr;
+scopuop:
+                       SPFROMREG(fs, MIPSInst_FS(ir));
+                       rv.s = (*handler.u) (fs);
+                       goto copcsr;
+copcsr:
                        if (ieee754_cxtest(IEEE754_INEXACT))
                                rcsr |= FPU_CSR_INE_X | FPU_CSR_INE_S;
                        if (ieee754_cxtest(IEEE754_UNDERFLOW))
@@ -1712,44 +1694,35 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                        /* unary conv ops */
                case fcvts_op:
                        return SIGILL;  /* not defined */
-               case fcvtd_op:{
-                       union ieee754sp fs;
 
+               case fcvtd_op:
                        SPFROMREG(fs, MIPSInst_FS(ir));
                        rv.d = ieee754dp_fsp(fs);
                        rfmt = d_fmt;
                        goto copcsr;
-               }
-               case fcvtw_op:{
-                       union ieee754sp fs;
 
+               case fcvtw_op:
                        SPFROMREG(fs, MIPSInst_FS(ir));
                        rv.w = ieee754sp_tint(fs);
                        rfmt = w_fmt;
                        goto copcsr;
-               }
 
                case fround_op:
                case ftrunc_op:
                case fceil_op:
-               case ffloor_op:{
-                       unsigned int oldrm = ieee754_csr.rm;
-                       union ieee754sp fs;
-
+               case ffloor_op:
                        if (!cpu_has_mips_2_3_4_5 && !cpu_has_mips64)
                                return SIGILL;
 
+                       oldrm = ieee754_csr.rm;
                        SPFROMREG(fs, MIPSInst_FS(ir));
                        ieee754_csr.rm = ieee_rm[modeindex(MIPSInst_FUNC(ir))];
                        rv.w = ieee754sp_tint(fs);
                        ieee754_csr.rm = oldrm;
                        rfmt = w_fmt;
                        goto copcsr;
-               }
-
-               case fcvtl_op:{
-                       union ieee754sp fs;
 
+               case fcvtl_op:
                        if (!cpu_has_mips_3_4_5 && !cpu_has_mips64)
                                return SIGILL;
 
@@ -1757,25 +1730,21 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                        rv.l = ieee754sp_tlong(fs);
                        rfmt = l_fmt;
                        goto copcsr;
-               }
 
                case froundl_op:
                case ftruncl_op:
                case fceill_op:
-               case ffloorl_op:{
-                       unsigned int oldrm = ieee754_csr.rm;
-                       union ieee754sp fs;
-
+               case ffloorl_op:
                        if (!cpu_has_mips_3_4_5 && !cpu_has_mips64)
                                return SIGILL;
 
+                       oldrm = ieee754_csr.rm;
                        SPFROMREG(fs, MIPSInst_FS(ir));
                        ieee754_csr.rm = ieee_rm[modeindex(MIPSInst_FUNC(ir))];
                        rv.l = ieee754sp_tlong(fs);
                        ieee754_csr.rm = oldrm;
                        rfmt = l_fmt;
                        goto copcsr;
-               }
 
                default:
                        if (MIPSInst_FUNC(ir) >= fcmp_op) {
@@ -1793,16 +1762,15 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                                else
                                        goto copcsr;
 
-                       }
-                       else {
+                       } else
                                return SIGILL;
-                       }
                        break;
                }
                break;
        }
 
-       case d_fmt:{
+       case d_fmt: {
+               union ieee754dp fs, ft;
                union {
                        union ieee754dp(*b) (union ieee754dp, union ieee754dp);
                        union ieee754dp(*u) (union ieee754dp);
@@ -1887,65 +1855,51 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                        goto copcsr;
 
                        /* binary op on handler */
-                     dcopbop:{
-                               union ieee754dp fs, ft;
-
-                               DPFROMREG(fs, MIPSInst_FS(ir));
-                               DPFROMREG(ft, MIPSInst_FT(ir));
-
-                               rv.d = (*handler.b) (fs, ft);
-                               goto copcsr;
-                       }
-                     dcopuop:{
-                               union ieee754dp fs;
-
-                               DPFROMREG(fs, MIPSInst_FS(ir));
-                               rv.d = (*handler.u) (fs);
-                               goto copcsr;
-                       }
+dcopbop:
+                       DPFROMREG(fs, MIPSInst_FS(ir));
+                       DPFROMREG(ft, MIPSInst_FT(ir));
 
-                       /* unary conv ops */
-               case fcvts_op:{
-                       union ieee754dp fs;
+                       rv.d = (*handler.b) (fs, ft);
+                       goto copcsr;
+dcopuop:
+                       DPFROMREG(fs, MIPSInst_FS(ir));
+                       rv.d = (*handler.u) (fs);
+                       goto copcsr;
 
+               /*
+                * unary conv ops
+                */
+               case fcvts_op:
                        DPFROMREG(fs, MIPSInst_FS(ir));
                        rv.s = ieee754sp_fdp(fs);
                        rfmt = s_fmt;
                        goto copcsr;
-               }
+
                case fcvtd_op:
                        return SIGILL;  /* not defined */
 
-               case fcvtw_op:{
-                       union ieee754dp fs;
-
+               case fcvtw_op:
                        DPFROMREG(fs, MIPSInst_FS(ir));
                        rv.w = ieee754dp_tint(fs);      /* wrong */
                        rfmt = w_fmt;
                        goto copcsr;
-               }
 
                case fround_op:
                case ftrunc_op:
                case fceil_op:
-               case ffloor_op:{
-                       unsigned int oldrm = ieee754_csr.rm;
-                       union ieee754dp fs;
-
+               case ffloor_op:
                        if (!cpu_has_mips_2_3_4_5_r)
                                return SIGILL;
 
+                       oldrm = ieee754_csr.rm;
                        DPFROMREG(fs, MIPSInst_FS(ir));
                        ieee754_csr.rm = ieee_rm[modeindex(MIPSInst_FUNC(ir))];
                        rv.w = ieee754dp_tint(fs);
                        ieee754_csr.rm = oldrm;
                        rfmt = w_fmt;
                        goto copcsr;
-               }
-
-               case fcvtl_op:{
-                       union ieee754dp fs;
 
+               case fcvtl_op:
                        if (!cpu_has_mips_3_4_5 && !cpu_has_mips64)
                                return SIGILL;
 
@@ -1953,25 +1907,21 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                        rv.l = ieee754dp_tlong(fs);
                        rfmt = l_fmt;
                        goto copcsr;
-               }
 
                case froundl_op:
                case ftruncl_op:
                case fceill_op:
-               case ffloorl_op:{
-                       unsigned int oldrm = ieee754_csr.rm;
-                       union ieee754dp fs;
-
+               case ffloorl_op:
                        if (!cpu_has_mips_3_4_5 && !cpu_has_mips64)
                                return SIGILL;
 
+                       oldrm = ieee754_csr.rm;
                        DPFROMREG(fs, MIPSInst_FS(ir));
                        ieee754_csr.rm = ieee_rm[modeindex(MIPSInst_FUNC(ir))];
                        rv.l = ieee754dp_tlong(fs);
                        ieee754_csr.rm = oldrm;
                        rfmt = l_fmt;
                        goto copcsr;
-               }
 
                default:
                        if (MIPSInst_FUNC(ir) >= fcmp_op) {
@@ -1998,11 +1948,8 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                        break;
                }
                break;
-       }
-
-       case w_fmt:{
-               union ieee754sp fs;
 
+       case w_fmt:
                switch (MIPSInst_FUNC(ir)) {
                case fcvts_op:
                        /* convert word to single precision real */
@@ -2022,8 +1969,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                break;
        }
 
-       case l_fmt:{
-               u64 bits;
+       case l_fmt:
 
                if (!cpu_has_mips_3_4_5 && !cpu_has_mips64)
                        return SIGILL;
@@ -2045,7 +1991,6 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                        return SIGILL;
                }
                break;
-       }
 
        default:
                return SIGILL;
@@ -2060,7 +2005,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
         */
        ctx->fcr31 = (ctx->fcr31 & ~FPU_CSR_ALL_X) | rcsr;
        if ((ctx->fcr31 >> 5) & ctx->fcr31 & FPU_CSR_ALL_E) {
-               /*printk ("SIGFPE: fpu csr = %08x\n",ctx->fcr31); */
+               /*printk ("SIGFPE: FPU csr = %08x\n",ctx->fcr31); */
                return SIGFPE;
        }
 
@@ -2068,7 +2013,6 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
         * Now we can safely write the result back to the register file.
         */
        switch (rfmt) {
-               unsigned int cbit;
        case -1:
 
                if (cpu_has_mips_4_5_r)
@@ -2200,7 +2144,7 @@ int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
 
        /* SIGILL indicates a non-fpu instruction */
        if (sig == SIGILL && xcp->cp0_epc != oldepc)
-               /* but if epc has advanced, then ignore it */
+               /* but if EPC has advanced, then ignore it */
                sig = 0;
 
        return sig;
index 48b9ef6f8a0ddae74d4cbfe1075749b4edf7b334..9c98b96f728771083d8e7d9cef9573e55e649576 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
- *
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754dp.h"
 
 union ieee754dp ieee754dp_add(union ieee754dp x, union ieee754dp y)
 {
+       int s;
+
        COMPXDP;
        COMPYDP;
 
@@ -69,9 +65,9 @@ union ieee754dp ieee754dp_add(union ieee754dp x, union ieee754dp y)
                return x;
 
 
-               /* Infinity handling
-                */
-
+       /*
+        * Infinity handling
+        */
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
                if (xs == ys)
                        return x;
@@ -88,15 +84,14 @@ union ieee754dp ieee754dp_add(union ieee754dp x, union ieee754dp y)
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
                return x;
 
-               /* Zero handling
-                */
-
+       /*
+        * Zero handling
+        */
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
                if (xs == ys)
                        return x;
                else
-                       return ieee754dp_zero(ieee754_csr.rm ==
-                                             IEEE754_RD);
+                       return ieee754dp_zero(ieee754_csr.rm == IEEE754_RD);
 
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_ZERO):
        case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
@@ -125,20 +120,24 @@ union ieee754dp ieee754dp_add(union ieee754dp x, union ieee754dp y)
        assert(xm & DP_HIDDEN_BIT);
        assert(ym & DP_HIDDEN_BIT);
 
-       /* provide guard,round and stick bit space */
+       /*
+        * Provide guard,round and stick bit space.
+        */
        xm <<= 3;
        ym <<= 3;
 
        if (xe > ye) {
-               /* have to shift y fraction right to align
+               /*
+                * Have to shift y fraction right to align.
                 */
-               int s = xe - ye;
+               s = xe - ye;
                ym = XDPSRS(ym, s);
                ye += s;
        } else if (ye > xe) {
-               /* have to shift x fraction right to align
+               /*
+                * Have to shift x fraction right to align.
                 */
-               int s = ye - xe;
+               s = ye - xe;
                xm = XDPSRS(xm, s);
                xe += s;
        }
@@ -146,8 +145,9 @@ union ieee754dp ieee754dp_add(union ieee754dp x, union ieee754dp y)
        assert(xe <= DP_EMAX);
 
        if (xs == ys) {
-               /* generate 28 bit result of adding two 27 bit numbers
-                * leaving result in xm,xs,xe
+               /*
+                * Generate 28 bit result of adding two 27 bit numbers
+                * leaving result in xm, xs and xe.
                 */
                xm = xm + ym;
                xe = xe;
@@ -168,15 +168,15 @@ union ieee754dp ieee754dp_add(union ieee754dp x, union ieee754dp y)
                        xs = ys;
                }
                if (xm == 0)
-                       return ieee754dp_zero(ieee754_csr.rm ==
-                                             IEEE754_RD);
+                       return ieee754dp_zero(ieee754_csr.rm == IEEE754_RD);
 
-               /* normalize to rounding precision */
+               /*
+                * Normalize to rounding precision.
+                */
                while ((xm >> (DP_FBITS + 3)) == 0) {
                        xm <<= 1;
                        xe--;
                }
-
        }
 
        return ieee754dp_format(xs, xe, xm);
index fe573cb6f77ff85d5f56286d27c0d6887b11c881..30f95f6e9ac443aa6ded22c80c453ef85167bc2c 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754dp.h"
 
 int ieee754dp_cmp(union ieee754dp x, union ieee754dp y, int cmp, int sig)
 {
+       s64 vx;
+       s64 vy;
+
        COMPXDP;
        COMPYDP;
 
@@ -48,8 +46,8 @@ int ieee754dp_cmp(union ieee754dp x, union ieee754dp y, int cmp, int sig)
                }
                return 0;
        } else {
-               s64 vx = x.bits;
-               s64 vy = y.bits;
+               vx = x.bits;
+               vy = y.bits;
 
                if (vx < 0)
                        vx = -vx ^ DP_SIGN_BIT;
index 377e11470e3f527519a40844477dd6354da17041..bef0e55e59381e2b5c5d03b4970a0f8132a3b6b1 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754dp.h"
 
 union ieee754dp ieee754dp_div(union ieee754dp x, union ieee754dp y)
 {
+       u64 rm;
+       int re;
+       u64 bm;
+
        COMPXDP;
        COMPYDP;
 
@@ -68,9 +67,9 @@ union ieee754dp ieee754dp_div(union ieee754dp x, union ieee754dp y)
                return x;
 
 
-               /* Infinity handling
-                */
-
+       /*
+        * Infinity handling
+        */
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                return ieee754dp_indef();
@@ -85,9 +84,9 @@ union ieee754dp ieee754dp_div(union ieee754dp x, union ieee754dp y)
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
                return ieee754dp_inf(xs ^ ys);
 
-               /* Zero handling
-                */
-
+       /*
+        * Zero handling
+        */
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                return ieee754dp_indef();
@@ -122,35 +121,34 @@ union ieee754dp ieee754dp_div(union ieee754dp x, union ieee754dp y)
        xm <<= 3;
        ym <<= 3;
 
-       {
-               /* now the dirty work */
-
-               u64 rm = 0;
-               int re = xe - ye;
-               u64 bm;
-
-               for (bm = DP_MBIT(DP_FBITS + 2); bm; bm >>= 1) {
-                       if (xm >= ym) {
-                               xm -= ym;
-                               rm |= bm;
-                               if (xm == 0)
-                                       break;
-                       }
-                       xm <<= 1;
-               }
-               rm <<= 1;
-               if (xm)
-                       rm |= 1;        /* have remainder, set sticky */
+       /* now the dirty work */
 
-               assert(rm);
+       rm = 0;
+       re = xe - ye;
 
-               /* normalise rm to rounding precision ?
-                */
-               while ((rm >> (DP_FBITS + 3)) == 0) {
-                       rm <<= 1;
-                       re--;
+       for (bm = DP_MBIT(DP_FBITS + 2); bm; bm >>= 1) {
+               if (xm >= ym) {
+                       xm -= ym;
+                       rm |= bm;
+                       if (xm == 0)
+                               break;
                }
+               xm <<= 1;
+       }
+
+       rm <<= 1;
+       if (xm)
+               rm |= 1;        /* have remainder, set sticky */
 
-               return ieee754dp_format(xs == ys ? 0 : 1, re, rm);
+       assert(rm);
+
+       /*
+        * Normalise rm to rounding precision ?
+        */
+       while ((rm >> (DP_FBITS + 3)) == 0) {
+               rm <<= 1;
+               re--;
        }
+
+       return ieee754dp_format(xs == ys ? 0 : 1, re, rm);
 }
index 98b9d6a140273599e0c52fb8e5fa4b8c7beb1ed5..10258f0afd698f7fa6c5c2ed4214e45f54b2031b 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754dp.h"
 
 union ieee754dp ieee754dp_fint(int x)
index 54c8f005acb22ee7fbb94c73a949c5c2e094d9d6..a267c2e39d7832367dcc1af9ae38596be4a6348b 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754dp.h"
 
 union ieee754dp ieee754dp_flong(s64 x)
index ba600be6945403ff662922d5c882c45d1268f4f1..ffb69c5830b044c1bedd5e60773b430eae7bb322 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754sp.h"
 #include "ieee754dp.h"
 
@@ -41,6 +36,7 @@ union ieee754dp ieee754dp_fsp(union ieee754sp x)
        case IEEE754_CLASS_SNAN:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                return ieee754dp_nanxcpt(ieee754dp_indef());
+
        case IEEE754_CLASS_QNAN:
                return ieee754dp_nanxcpt(builddp(xs,
                                                 DP_EMAX + 1 + DP_EBIAS,
@@ -49,8 +45,10 @@ union ieee754dp ieee754dp_fsp(union ieee754sp x)
                                                      SP_FBITS))));
        case IEEE754_CLASS_INF:
                return ieee754dp_inf(xs);
+
        case IEEE754_CLASS_ZERO:
                return ieee754dp_zero(xs);
+
        case IEEE754_CLASS_DNORM:
                /* normalize */
                while ((xm >> SP_FBITS) == 0) {
@@ -58,11 +56,13 @@ union ieee754dp ieee754dp_fsp(union ieee754sp x)
                        xe--;
                }
                break;
+
        case IEEE754_CLASS_NORM:
                break;
        }
 
-       /* CAN'T possibly overflow,underflow, or need rounding
+       /*
+        * Can't possibly overflow,underflow, or need rounding
         */
 
        /* drop the hidden bit */
index 74bc810174973cc6e6f063b5ab67910afe0cf8e4..d3acdedb5b9dd33053d7688af197a4d0e1f2d5de 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754dp.h"
 
 union ieee754dp ieee754dp_mul(union ieee754dp x, union ieee754dp y)
 {
+       int re;
+       int rs;
+       u64 rm;
+       unsigned lxm;
+       unsigned hxm;
+       unsigned lym;
+       unsigned hym;
+       u64 lrm;
+       u64 hrm;
+       u64 t;
+       u64 at;
+
        COMPXDP;
        COMPYDP;
 
@@ -68,8 +75,9 @@ union ieee754dp ieee754dp_mul(union ieee754dp x, union ieee754dp y)
                return x;
 
 
-               /* Infinity handling */
-
+       /*
+        * Infinity handling
+        */
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
@@ -107,71 +115,59 @@ union ieee754dp ieee754dp_mul(union ieee754dp x, union ieee754dp y)
        /* rm = xm * ym, re = xe+ye basically */
        assert(xm & DP_HIDDEN_BIT);
        assert(ym & DP_HIDDEN_BIT);
-       {
-               int re = xe + ye;
-               int rs = xs ^ ys;
-               u64 rm;
 
-               /* shunt to top of word */
-               xm <<= 64 - (DP_FBITS + 1);
-               ym <<= 64 - (DP_FBITS + 1);
+       re = xe + ye;
+       rs = xs ^ ys;
+
+       /* shunt to top of word */
+       xm <<= 64 - (DP_FBITS + 1);
+       ym <<= 64 - (DP_FBITS + 1);
 
-               /* multiply 32bits xm,ym to give high 32bits rm with stickness
-                */
+       /*
+        * Multiply 32 bits xm, ym to give high 32 bits rm with stickness.
+        */
 
-               /* 32 * 32 => 64 */
+       /* 32 * 32 => 64 */
 #define DPXMULT(x, y)  ((u64)(x) * (u64)y)
 
-               {
-                       unsigned lxm = xm;
-                       unsigned hxm = xm >> 32;
-                       unsigned lym = ym;
-                       unsigned hym = ym >> 32;
-                       u64 lrm;
-                       u64 hrm;
-
-                       lrm = DPXMULT(lxm, lym);
-                       hrm = DPXMULT(hxm, hym);
-
-                       {
-                               u64 t = DPXMULT(lxm, hym);
-                               {
-                                       u64 at =
-                                           lrm + (t << 32);
-                                       hrm += at < lrm;
-                                       lrm = at;
-                               }
-                               hrm = hrm + (t >> 32);
-                       }
-
-                       {
-                               u64 t = DPXMULT(hxm, lym);
-                               {
-                                       u64 at =
-                                           lrm + (t << 32);
-                                       hrm += at < lrm;
-                                       lrm = at;
-                               }
-                               hrm = hrm + (t >> 32);
-                       }
-                       rm = hrm | (lrm != 0);
-               }
-
-               /*
-                * sticky shift down to normal rounding precision
-                */
-               if ((s64) rm < 0) {
-                       rm =
-                           (rm >> (64 - (DP_FBITS + 1 + 3))) |
-                           ((rm << (DP_FBITS + 1 + 3)) != 0);
+       lxm = xm;
+       hxm = xm >> 32;
+       lym = ym;
+       hym = ym >> 32;
+
+       lrm = DPXMULT(lxm, lym);
+       hrm = DPXMULT(hxm, hym);
+
+       t = DPXMULT(lxm, hym);
+
+       at = lrm + (t << 32);
+       hrm += at < lrm;
+       lrm = at;
+
+       hrm = hrm + (t >> 32);
+
+       t = DPXMULT(hxm, lym);
+
+       at = lrm + (t << 32);
+       hrm += at < lrm;
+       lrm = at;
+
+       hrm = hrm + (t >> 32);
+
+       rm = hrm | (lrm != 0);
+
+       /*
+        * Sticky shift down to normal rounding precision.
+        */
+       if ((s64) rm < 0) {
+               rm = (rm >> (64 - (DP_FBITS + 1 + 3))) |
+                    ((rm << (DP_FBITS + 1 + 3)) != 0);
                        re++;
-               } else {
-                       rm =
-                           (rm >> (64 - (DP_FBITS + 1 + 3 + 1))) |
-                           ((rm << (DP_FBITS + 1 + 3 + 1)) != 0);
-               }
-               assert(rm & (DP_HIDDEN_BIT << 3));
-
-               return ieee754dp_format(rs, re, rm);
+       } else {
+               rm = (rm >> (64 - (DP_FBITS + 1 + 3 + 1))) |
+                    ((rm << (DP_FBITS + 1 + 3 + 1)) != 0);
        }
+       assert(rm & (DP_HIDDEN_BIT << 3));
+
+       return ieee754dp_format(rs, re, rm);
 }
index 4eda7595b1517e24544b2e65b397317a3285cdf1..bccbe90efceb9a00ef59ebe6689ddfd2117ca157 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754dp.h"
 
 union ieee754dp ieee754dp_neg(union ieee754dp x)
@@ -51,7 +46,6 @@ union ieee754dp ieee754dp_neg(union ieee754dp x)
        return x;
 }
 
-
 union ieee754dp ieee754dp_abs(union ieee754dp x)
 {
        COMPXDP;
index 8e88bde51f71ece0bc321c45f0f5b2988cdb0194..109878a57f12e9ff0e66ce0fdc56d4818e578173 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754dp.h"
 
 static const unsigned table[] = {
@@ -50,12 +45,15 @@ union ieee754dp ieee754dp_sqrt(union ieee754dp x)
        case IEEE754_CLASS_QNAN:
                /* sqrt(Nan) = Nan */
                return ieee754dp_nanxcpt(x);
+
        case IEEE754_CLASS_SNAN:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                return ieee754dp_nanxcpt(ieee754dp_indef());
+
        case IEEE754_CLASS_ZERO:
                /* sqrt(0) = 0 */
                return x;
+
        case IEEE754_CLASS_INF:
                if (xs) {
                        /* sqrt(-Inf) = Nan */
@@ -64,9 +62,11 @@ union ieee754dp ieee754dp_sqrt(union ieee754dp x)
                }
                /* sqrt(+Inf) = Inf */
                return x;
+
        case IEEE754_CLASS_DNORM:
                DPDNORMX;
                /* fall through */
+
        case IEEE754_CLASS_NORM:
                if (xs) {
                        /* sqrt(-x) = Nan */
index 3dd62c18676752ab4f83bf9cc960e2df35334b7b..d502984df7ccd1419b566e2360dd1ce57a519242 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754dp.h"
 
 union ieee754dp ieee754dp_sub(union ieee754dp x, union ieee754dp y)
 {
+       int s;
+
        COMPXDP;
        COMPYDP;
 
@@ -68,9 +65,9 @@ union ieee754dp ieee754dp_sub(union ieee754dp x, union ieee754dp y)
                return x;
 
 
-               /* Infinity handling
-                */
-
+       /*
+        * Infinity handling
+        */
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
                if (xs != ys)
                        return x;
@@ -87,15 +84,14 @@ union ieee754dp ieee754dp_sub(union ieee754dp x, union ieee754dp y)
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
                return x;
 
-               /* Zero handling
-                */
-
+       /*
+        * Zero handling
+        */
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
                if (xs != ys)
                        return x;
                else
-                       return ieee754dp_zero(ieee754_csr.rm ==
-                                             IEEE754_RD);
+                       return ieee754dp_zero(ieee754_csr.rm == IEEE754_RD);
 
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_ZERO):
        case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
@@ -136,15 +132,17 @@ union ieee754dp ieee754dp_sub(union ieee754dp x, union ieee754dp y)
        ym <<= 3;
 
        if (xe > ye) {
-               /* have to shift y fraction right to align
+               /*
+                * Have to shift y fraction right to align
                 */
-               int s = xe - ye;
+               s = xe - ye;
                ym = XDPSRS(ym, s);
                ye += s;
        } else if (ye > xe) {
-               /* have to shift x fraction right to align
+               /*
+                * Have to shift x fraction right to align
                 */
-               int s = ye - xe;
+               s = ye - xe;
                xm = XDPSRS(xm, s);
                xe += s;
        }
index 3a23c6409275afdc34b492307eaee1297259eb64..972dba0baca0eb7e3ee5385343205e3bfc305072 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754dp.h"
 
 int ieee754dp_tint(union ieee754dp x)
 {
+       u64 residue;
+       int round;
+       int sticky;
+       int odd;
+
        COMPXDP;
 
        ieee754_clearcx();
@@ -41,8 +41,10 @@ int ieee754dp_tint(union ieee754dp x)
        case IEEE754_CLASS_INF:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                return ieee754si_indef();
+
        case IEEE754_CLASS_ZERO:
                return 0;
+
        case IEEE754_CLASS_DNORM:
        case IEEE754_CLASS_NORM:
                break;
@@ -57,11 +59,6 @@ int ieee754dp_tint(union ieee754dp x)
        if (xe > DP_FBITS) {
                xm <<= xe - DP_FBITS;
        } else if (xe < DP_FBITS) {
-               u64 residue;
-               int round;
-               int sticky;
-               int odd;
-
                if (xe < -1) {
                        residue = xm;
                        round = 0;
index cbeef6098e7624aefe4d0cc31e3df76e8aeccd3b..afaf953e576db8bab5ad6dd2449a578ab4bd6a78 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754dp.h"
 
 s64 ieee754dp_tlong(union ieee754dp x)
 {
+       u64 residue;
+       int round;
+       int sticky;
+       int odd;
+
        COMPXDP;
 
        ieee754_clearcx();
@@ -41,8 +41,10 @@ s64 ieee754dp_tlong(union ieee754dp x)
        case IEEE754_CLASS_INF:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                return ieee754di_indef();
+
        case IEEE754_CLASS_ZERO:
                return 0;
+
        case IEEE754_CLASS_DNORM:
        case IEEE754_CLASS_NORM:
                break;
@@ -60,11 +62,6 @@ s64 ieee754dp_tlong(union ieee754dp x)
        if (xe > DP_FBITS) {
                xm <<= xe - DP_FBITS;
        } else if (xe < DP_FBITS) {
-               u64 residue;
-               int round;
-               int sticky;
-               int odd;
-
                if (xe < -1) {
                        residue = xm;
                        round = 0;
index 670d19b29f9934ba23e1035c712ebd89074a70b3..53f1d2287084099e3a683f897963c554d247d71c 100644 (file)
@@ -10,8 +10,6 @@
  * 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.
@@ -23,9 +21,7 @@
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
 #include <linux/compiler.h>
@@ -34,8 +30,9 @@
 #include "ieee754sp.h"
 #include "ieee754dp.h"
 
-/* special constants
-*/
+/*
+ * Special constants
+ */
 
 #define DPCNST(s, b, m)                                                        \
 {                                                                      \
index 4f89f854bb45d159ecb2de9730f94785aeb5618d..fb2fb6b892736d9e9790bd9f8ee44ee4525f601b 100644 (file)
@@ -13,7 +13,7 @@
  *
  *  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.
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  *
  *  Nov 7, 2000
  *  Modification to allow integration with Linux kernel
index ebe34e970b61e9e71b183192189a7d5c09e2523a..a04e8a7e5ac37b5ace56bbb0993741d7e001e951 100644 (file)
@@ -16,7 +16,7 @@
  *
  *  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.
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  *
  *  Nov 7, 2000
  *  Modified to build and operate in Linux kernel environment.
index 3b123f5db400335bb73059f89614d436d3c18989..087a6f38b1490465a2a8ba35721c0a5144cd04c5 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
@@ -18,9 +16,7 @@
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
 #include <linux/compiler.h>
index 231bd761c5b1ec58c795ba6bc9d4899d42e90009..61fd6fd31350f6555d55c72ad4b0deab601158a9 100644 (file)
@@ -6,8 +6,6 @@
  * 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.
@@ -19,9 +17,7 @@
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
 #include <linux/compiler.h>
index 58b90874a7fe518a3ef9dd56589104f17556f620..f0365bb86747db8a64ddaff74eb9eb1b90e4cef2 100644 (file)
@@ -6,8 +6,6 @@
  * 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.
@@ -19,9 +17,7 @@
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 #ifndef __IEEE754INT_H
 #define __IEEE754INT_H
index d07bec3dd1c00620f3eb88efa7df5c802751182c..e4cec15845b91bfd200965d23f01244033349931 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
@@ -18,9 +16,7 @@
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
 #include <linux/compiler.h>
index 35da62f791c9dbf75999b7a155e57aea7098b962..ad268e3323183a4915db23e942d26f19dc717037 100644 (file)
@@ -6,8 +6,6 @@
  * 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.
@@ -19,9 +17,7 @@
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
 #include <linux/compiler.h>
index a7959005700b2ef2c31f9b1ebd9fededd2ceef41..bee94196a569650e1c8abc04778f01ecc4b141b4 100644 (file)
@@ -13,7 +13,7 @@
  *
  *  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.
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  *
  * Routines corresponding to Linux kernel FP context
  * manipulation primitives for the Algorithmics MIPS
index db4d89beada67212dc226821b238bec5d82bbfaf..a0bc95cea1cc61491255c960b074e99decbaa73f 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754sp.h"
 
 union ieee754sp ieee754sp_add(union ieee754sp x, union ieee754sp y)
 {
+       int s;
+
        COMPXSP;
        COMPYSP;
 
@@ -68,9 +65,9 @@ union ieee754sp ieee754sp_add(union ieee754sp x, union ieee754sp y)
                return x;
 
 
-               /* Infinity handling
-                */
-
+       /*
+        * Infinity handling
+        */
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
                if (xs == ys)
                        return x;
@@ -87,15 +84,14 @@ union ieee754sp ieee754sp_add(union ieee754sp x, union ieee754sp y)
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
                return x;
 
-               /* Zero handling
-                */
-
+       /*
+        * Zero handling
+        */
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
                if (xs == ys)
                        return x;
                else
-                       return ieee754sp_zero(ieee754_csr.rm ==
-                                             IEEE754_RD);
+                       return ieee754sp_zero(ieee754_csr.rm == IEEE754_RD);
 
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_ZERO):
        case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
@@ -108,6 +104,8 @@ union ieee754sp ieee754sp_add(union ieee754sp x, union ieee754sp y)
        case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_DNORM):
                SPDNORMX;
 
+               /* FALL THROUGH */
+
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_DNORM):
                SPDNORMY;
                break;
@@ -122,27 +120,32 @@ union ieee754sp ieee754sp_add(union ieee754sp x, union ieee754sp y)
        assert(xm & SP_HIDDEN_BIT);
        assert(ym & SP_HIDDEN_BIT);
 
-       /* provide guard,round and stick bit space */
+       /*
+        * Provide guard, round and stick bit space.
+        */
        xm <<= 3;
        ym <<= 3;
 
        if (xe > ye) {
-               /* have to shift y fraction right to align
+               /*
+                * Have to shift y fraction right to align.
                 */
-               int s = xe - ye;
+               s = xe - ye;
                SPXSRSYn(s);
        } else if (ye > xe) {
-               /* have to shift x fraction right to align
+               /*
+                * Have to shift x fraction right to align.
                 */
-               int s = ye - xe;
+               s = ye - xe;
                SPXSRSXn(s);
        }
        assert(xe == ye);
        assert(xe <= SP_EMAX);
 
        if (xs == ys) {
-               /* generate 28 bit result of adding two 27 bit numbers
-                * leaving result in xm,xs,xe
+               /*
+                * Generate 28 bit result of adding two 27 bit numbers
+                * leaving result in xm, xs and xe.
                 */
                xm = xm + ym;
                xe = xe;
@@ -162,15 +165,15 @@ union ieee754sp ieee754sp_add(union ieee754sp x, union ieee754sp y)
                        xs = ys;
                }
                if (xm == 0)
-                       return ieee754sp_zero(ieee754_csr.rm ==
-                                             IEEE754_RD);
+                       return ieee754sp_zero(ieee754_csr.rm == IEEE754_RD);
 
-               /* normalize in extended single precision */
+               /*
+                * Normalize in extended single precision
+                */
                while ((xm >> (SP_FBITS + 3)) == 0) {
                        xm <<= 1;
                        xe--;
                }
-
        }
 
        return ieee754sp_format(xs, xe, xm);
index fab49887a1b8c09810c4d600d06bf2edfdff9fa9..addbccb2f556c410af5a92f55abc06bab2c5ef98 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754sp.h"
 
 int ieee754sp_cmp(union ieee754sp x, union ieee754sp y, int cmp, int sig)
 {
+       int vx;
+       int vy;
+
        COMPXSP;
        COMPYSP;
 
@@ -48,8 +46,8 @@ int ieee754sp_cmp(union ieee754sp x, union ieee754sp y, int cmp, int sig)
                }
                return 0;
        } else {
-               int vx = x.bits;
-               int vy = y.bits;
+               vx = x.bits;
+               vy = y.bits;
 
                if (vx < 0)
                        vx = -vx ^ SP_SIGN_BIT;
index 0d847a4fbc130d98fc7a10809507ae29df85ce8a..721f317aa8778bc8a0a71c6c76252ebe269a72b4 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754sp.h"
 
 union ieee754sp ieee754sp_div(union ieee754sp x, union ieee754sp y)
 {
+       unsigned rm;
+       int re;
+       unsigned bm;
+
        COMPXSP;
        COMPYSP;
 
@@ -68,9 +67,9 @@ union ieee754sp ieee754sp_div(union ieee754sp x, union ieee754sp y)
                return x;
 
 
-               /* Infinity handling
-                */
-
+       /*
+        * Infinity handling
+        */
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                return ieee754sp_indef();
@@ -85,9 +84,9 @@ union ieee754sp ieee754sp_div(union ieee754sp x, union ieee754sp y)
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
                return ieee754sp_inf(xs ^ ys);
 
-               /* Zero handling
-                */
-
+       /*
+        * Zero handling
+        */
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                return ieee754sp_indef();
@@ -122,35 +121,33 @@ union ieee754sp ieee754sp_div(union ieee754sp x, union ieee754sp y)
        xm <<= 3;
        ym <<= 3;
 
-       {
-               /* now the dirty work */
-
-               unsigned rm = 0;
-               int re = xe - ye;
-               unsigned bm;
-
-               for (bm = SP_MBIT(SP_FBITS + 2); bm; bm >>= 1) {
-                       if (xm >= ym) {
-                               xm -= ym;
-                               rm |= bm;
-                               if (xm == 0)
-                                       break;
-                       }
-                       xm <<= 1;
-               }
-               rm <<= 1;
-               if (xm)
-                       rm |= 1;        /* have remainder, set sticky */
+       /* now the dirty work */
 
-               assert(rm);
+       rm = 0;
+       re = xe - ye;
 
-               /* normalise rm to rounding precision ?
-                */
-               while ((rm >> (SP_FBITS + 3)) == 0) {
-                       rm <<= 1;
-                       re--;
+       for (bm = SP_MBIT(SP_FBITS + 2); bm; bm >>= 1) {
+               if (xm >= ym) {
+                       xm -= ym;
+                       rm |= bm;
+                       if (xm == 0)
+                               break;
                }
+               xm <<= 1;
+       }
+
+       rm <<= 1;
+       if (xm)
+               rm |= 1;        /* have remainder, set sticky */
 
-               return ieee754sp_format(xs == ys ? 0 : 1, re, rm);
+       assert(rm);
+
+       /* normalise rm to rounding precision ?
+        */
+       while ((rm >> (SP_FBITS + 3)) == 0) {
+               rm <<= 1;
+               re--;
        }
+
+       return ieee754sp_format(xs == ys ? 0 : 1, re, rm);
 }
index 5c1d8aa6bfd5739fae6b2570e1fed3693b80e2f7..90b9ec45e984298a16e02441974ee88ae64a4cc8 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754sp.h"
 #include "ieee754dp.h"
 
 union ieee754sp ieee754sp_fdp(union ieee754dp x)
 {
+       u32 rm;
+
        COMPXDP;
        union ieee754sp nan;
 
@@ -42,16 +39,20 @@ union ieee754sp ieee754sp_fdp(union ieee754dp x)
        case IEEE754_CLASS_SNAN:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                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);
+
        case IEEE754_CLASS_INF:
                return ieee754sp_inf(xs);
+
        case IEEE754_CLASS_ZERO:
                return ieee754sp_zero(xs);
+
        case IEEE754_CLASS_DNORM:
                /* can't possibly be sp representable */
                ieee754_setcx(IEEE754_UNDERFLOW);
@@ -60,18 +61,16 @@ union ieee754sp ieee754sp_fdp(union ieee754dp x)
                                (ieee754_csr.rm == IEEE754_RD && xs))
                        return ieee754sp_mind(xs);
                return ieee754sp_zero(xs);
+
        case IEEE754_CLASS_NORM:
                break;
        }
 
-       {
-               u32 rm;
+       /*
+        * Convert from DP_FBITS to SP_FBITS+3 with sticky right shift.
+        */
+       rm = (xm >> (DP_FBITS - (SP_FBITS + 3))) |
+            ((xm << (64 - (DP_FBITS - (SP_FBITS + 3)))) != 0);
 
-               /* convert from DP_FBITS to SP_FBITS+3 with sticky right shift
-                */
-               rm = (xm >> (DP_FBITS - (SP_FBITS + 3))) |
-                   ((xm << (64 - (DP_FBITS - (SP_FBITS + 3)))) != 0);
-
-               return ieee754sp_format(xs, xe, rm);
-       }
+       return ieee754sp_format(xs, xe, rm);
 }
index 8e8687bf955dff53530dee929e3aeafaba2b4b81..d5d8495b2cc4d1690a8ce09c0dca41bd7381dea7 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754sp.h"
 
 union ieee754sp ieee754sp_fint(int x)
index e56e87603feb2063c9842564fedcee449f056936..012e30ce7589fe2b409af91a8b63c8d2706b555e 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754sp.h"
 
 union ieee754sp ieee754sp_flong(s64 x)
index 0e19d0edd3f9420850bfa559922917f699c12cba..890c13a2965e78ffb5aca93eb3105e74b0e8ee58 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754sp.h"
 
 union ieee754sp ieee754sp_mul(union ieee754sp x, union ieee754sp y)
 {
+       int re;
+       int rs;
+       unsigned rm;
+       unsigned short lxm;
+       unsigned short hxm;
+       unsigned short lym;
+       unsigned short hym;
+       unsigned lrm;
+       unsigned hrm;
+       unsigned t;
+       unsigned at;
+
        COMPXSP;
        COMPYSP;
 
@@ -68,8 +75,9 @@ union ieee754sp ieee754sp_mul(union ieee754sp x, union ieee754sp y)
                return x;
 
 
-               /* Infinity handling */
-
+       /*
+        * Infinity handling
+        */
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
                ieee754_setcx(IEEE754_INVALID_OPERATION);
@@ -108,63 +116,50 @@ union ieee754sp ieee754sp_mul(union ieee754sp x, union ieee754sp y)
        assert(xm & SP_HIDDEN_BIT);
        assert(ym & SP_HIDDEN_BIT);
 
-       {
-               int re = xe + ye;
-               int rs = xs ^ ys;
-               unsigned rm;
-
-               /* shunt to top of word */
-               xm <<= 32 - (SP_FBITS + 1);
-               ym <<= 32 - (SP_FBITS + 1);
-
-               /* multiply 32bits xm,ym to give high 32bits rm with stickness
-                */
-               {
-                       unsigned short lxm = xm & 0xffff;
-                       unsigned short hxm = xm >> 16;
-                       unsigned short lym = ym & 0xffff;
-                       unsigned short hym = ym >> 16;
-                       unsigned lrm;
-                       unsigned hrm;
-
-                       lrm = lxm * lym;        /* 16 * 16 => 32 */
-                       hrm = hxm * hym;        /* 16 * 16 => 32 */
-
-                       {
-                               unsigned t = lxm * hym; /* 16 * 16 => 32 */
-                               {
-                                       unsigned at = lrm + (t << 16);
-                                       hrm += at < lrm;
-                                       lrm = at;
-                               }
-                               hrm = hrm + (t >> 16);
-                       }
-
-                       {
-                               unsigned t = hxm * lym; /* 16 * 16 => 32 */
-                               {
-                                       unsigned at = lrm + (t << 16);
-                                       hrm += at < lrm;
-                                       lrm = at;
-                               }
-                               hrm = hrm + (t >> 16);
-                       }
-                       rm = hrm | (lrm != 0);
-               }
-
-               /*
-                * sticky shift down to normal rounding precision
-                */
-               if ((int) rm < 0) {
-                       rm = (rm >> (32 - (SP_FBITS + 1 + 3))) |
-                           ((rm << (SP_FBITS + 1 + 3)) != 0);
-                       re++;
-               } else {
-                       rm = (rm >> (32 - (SP_FBITS + 1 + 3 + 1))) |
-                           ((rm << (SP_FBITS + 1 + 3 + 1)) != 0);
-               }
-               assert(rm & (SP_HIDDEN_BIT << 3));
-
-               return ieee754sp_format(rs, re, rm);
+       re = xe + ye;
+       rs = xs ^ ys;
+
+       /* shunt to top of word */
+       xm <<= 32 - (SP_FBITS + 1);
+       ym <<= 32 - (SP_FBITS + 1);
+
+       /*
+        * Multiply 32 bits xm, ym to give high 32 bits rm with stickness.
+        */
+       lxm = xm & 0xffff;
+       hxm = xm >> 16;
+       lym = ym & 0xffff;
+       hym = ym >> 16;
+
+       lrm = lxm * lym;        /* 16 * 16 => 32 */
+       hrm = hxm * hym;        /* 16 * 16 => 32 */
+
+       t = lxm * hym; /* 16 * 16 => 32 */
+       at = lrm + (t << 16);
+       hrm += at < lrm;
+       lrm = at;
+       hrm = hrm + (t >> 16);
+
+       t = hxm * lym; /* 16 * 16 => 32 */
+       at = lrm + (t << 16);
+       hrm += at < lrm;
+       lrm = at;
+       hrm = hrm + (t >> 16);
+
+       rm = hrm | (lrm != 0);
+
+       /*
+        * Sticky shift down to normal rounding precision.
+        */
+       if ((int) rm < 0) {
+               rm = (rm >> (32 - (SP_FBITS + 1 + 3))) |
+                   ((rm << (SP_FBITS + 1 + 3)) != 0);
+               re++;
+       } else {
+               rm = (rm >> (32 - (SP_FBITS + 1 + 3 + 1))) |
+                    ((rm << (SP_FBITS + 1 + 3 + 1)) != 0);
        }
+       assert(rm & (SP_HIDDEN_BIT << 3));
+
+       return ieee754sp_format(rs, re, rm);
 }
index 8f0202d73019240ff6c1c1d62d31217c561b8b29..f1ffaa9a17e042a40e199a468dcde3a4fff244ab 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754sp.h"
 
 union ieee754sp ieee754sp_neg(union ieee754sp x)
@@ -51,7 +46,6 @@ union ieee754sp ieee754sp_neg(union ieee754sp x)
        return x;
 }
 
-
 union ieee754sp ieee754sp_abs(union ieee754sp x)
 {
        COMPXSP;
index f4da2cc8ebe0255e0c63a570ad71e499ce9e29fa..33b3e0001e9e41dab305be8b90ccf9e3a12195fd 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754sp.h"
 
 union ieee754sp ieee754sp_sqrt(union ieee754sp x)
@@ -43,12 +38,15 @@ union ieee754sp ieee754sp_sqrt(union ieee754sp x)
        case IEEE754_CLASS_QNAN:
                /* sqrt(Nan) = Nan */
                return ieee754sp_nanxcpt(x);
+
        case IEEE754_CLASS_SNAN:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                return ieee754sp_nanxcpt(ieee754sp_indef());
+
        case IEEE754_CLASS_ZERO:
                /* sqrt(0) = 0 */
                return x;
+
        case IEEE754_CLASS_INF:
                if (xs) {
                        /* sqrt(-Inf) = Nan */
@@ -57,6 +55,7 @@ union ieee754sp ieee754sp_sqrt(union ieee754sp x)
                }
                /* sqrt(+Inf) = Inf */
                return x;
+
        case IEEE754_CLASS_DNORM:
        case IEEE754_CLASS_NORM:
                if (xs) {
index 67a1f9e6bbfe1c184e43acd66511b329239ede62..e813f4fee78475f358dff11be6dc1d3ad6b507e4 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754sp.h"
 
 union ieee754sp ieee754sp_sub(union ieee754sp x, union ieee754sp y)
 {
+       int s;
+
        COMPXSP;
        COMPYSP;
 
@@ -68,9 +65,9 @@ union ieee754sp ieee754sp_sub(union ieee754sp x, union ieee754sp y)
                return x;
 
 
-               /* Infinity handling
-                */
-
+       /*
+        * Infinity handling
+        */
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
                if (xs != ys)
                        return x;
@@ -87,15 +84,14 @@ union ieee754sp ieee754sp_sub(union ieee754sp x, union ieee754sp y)
        case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
                return x;
 
-               /* Zero handling
-                */
-
+       /*
+        * Zero handling
+        */
        case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
                if (xs != ys)
                        return x;
                else
-                       return ieee754sp_zero(ieee754_csr.rm ==
-                                             IEEE754_RD);
+                       return ieee754sp_zero(ieee754_csr.rm == IEEE754_RD);
 
        case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_ZERO):
        case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
@@ -133,14 +129,16 @@ union ieee754sp ieee754sp_sub(union ieee754sp x, union ieee754sp y)
        ym <<= 3;
 
        if (xe > ye) {
-               /* have to shift y fraction right to align
+               /*
+                * have to shift y fraction right to align
                 */
-               int s = xe - ye;
+               s = xe - ye;
                SPXSRSYn(s);
        } else if (ye > xe) {
-               /* have to shift x fraction right to align
+               /*
+                * have to shift x fraction right to align
                 */
-               int s = ye - xe;
+               s = ye - xe;
                SPXSRSXn(s);
        }
        assert(xe == ye);
index 53f04dc2991e0452309fb6025a5e1352b817ead2..e1dee56ebc541cb8c2e24bf061d2ff15a9bb94ec 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754sp.h"
 
 int ieee754sp_tint(union ieee754sp x)
 {
+       u32 residue;
+       int round;
+       int sticky;
+       int odd;
+
        COMPXSP;
 
        ieee754_clearcx();
@@ -41,8 +41,10 @@ int ieee754sp_tint(union ieee754sp x)
        case IEEE754_CLASS_INF:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                return ieee754si_indef();
+
        case IEEE754_CLASS_ZERO:
                return 0;
+
        case IEEE754_CLASS_DNORM:
        case IEEE754_CLASS_NORM:
                break;
@@ -60,11 +62,6 @@ int ieee754sp_tint(union ieee754sp x)
        if (xe > SP_FBITS) {
                xm <<= xe - SP_FBITS;
        } else {
-               u32 residue;
-               int round;
-               int sticky;
-               int odd;
-
                if (xe < -1) {
                        residue = xm;
                        round = 0;
index df117923adaa809111799ab8c3f97a442f599b1e..67eff6ba9e18d71b44ead610b7e52f4833953f6e 100644 (file)
@@ -5,8 +5,6 @@
  * 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.
  *
  *  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.
- *
- * ########################################################################
+ *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  */
 
-
 #include "ieee754sp.h"
 #include "ieee754dp.h"
 
 s64 ieee754sp_tlong(union ieee754sp x)
 {
+       u32 residue;
+       int round;
+       int sticky;
+       int odd;
+
        COMPXDP;                /* <-- need 64-bit mantissa tmp */
 
        ieee754_clearcx();
@@ -42,8 +42,10 @@ s64 ieee754sp_tlong(union ieee754sp x)
        case IEEE754_CLASS_INF:
                ieee754_setcx(IEEE754_INVALID_OPERATION);
                return ieee754di_indef();
+
        case IEEE754_CLASS_ZERO:
                return 0;
+
        case IEEE754_CLASS_DNORM:
        case IEEE754_CLASS_NORM:
                break;
@@ -61,11 +63,6 @@ s64 ieee754sp_tlong(union ieee754sp x)
        if (xe > SP_FBITS) {
                xm <<= xe - SP_FBITS;
        } else if (xe < SP_FBITS) {
-               u32 residue;
-               int round;
-               int sticky;
-               int odd;
-
                if (xe < -1) {
                        residue = xm;
                        round = 0;