]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - arch/arm/vfp/vfpdouble.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
[mv-sheeva.git] / arch / arm / vfp / vfpdouble.c
index 4fc05ee0a2ef3c5b04db9d81993b450892b33660..190a09ad18ebe87217222c7eecc2c05823bec86f 100644 (file)
@@ -34,7 +34,6 @@
 #include <linux/bitops.h>
 
 #include <asm/div64.h>
-#include <asm/ptrace.h>
 #include <asm/vfp.h>
 
 #include "vfpinstr.h"
@@ -56,7 +55,7 @@ static void vfp_double_normalise_denormal(struct vfp_double *vd)
 {
        int bits = 31 - fls(vd->significand >> 32);
        if (bits == 31)
-               bits = 62 - fls(vd->significand);
+               bits = 63 - fls(vd->significand);
 
        vfp_double_dump("normalise_denormal: in", vd);
 
@@ -1133,7 +1132,7 @@ u32 vfp_double_cpdo(u32 inst, u32 fpscr)
        unsigned int vecitr, veclen, vecstride;
        struct op *fop;
 
-       vecstride = (1 + ((fpscr & FPSCR_STRIDE_MASK) == FPSCR_STRIDE_MASK)) * 2;
+       vecstride = (1 + ((fpscr & FPSCR_STRIDE_MASK) == FPSCR_STRIDE_MASK));
 
        fop = (op == FOP_EXT) ? &fops_ext[FEXT_TO_IDX(inst)] : &fops[FOP_TO_IDX(op)];
 
@@ -1185,10 +1184,10 @@ u32 vfp_double_cpdo(u32 inst, u32 fpscr)
                 * CHECK: It appears to be undefined whether we stop when
                 * we encounter an exception.  We continue.
                 */
-               dest = FREG_BANK(dest) + ((FREG_IDX(dest) + vecstride) & 6);
-               dn = FREG_BANK(dn) + ((FREG_IDX(dn) + vecstride) & 6);
+               dest = FREG_BANK(dest) + ((FREG_IDX(dest) + vecstride) & 3);
+               dn = FREG_BANK(dn) + ((FREG_IDX(dn) + vecstride) & 3);
                if (FREG_BANK(dm) != 0)
-                       dm = FREG_BANK(dm) + ((FREG_IDX(dm) + vecstride) & 6);
+                       dm = FREG_BANK(dm) + ((FREG_IDX(dm) + vecstride) & 3);
        }
        return exceptions;