int i;
 
        for (i = 0; i < __NUM_FPRS; i++)
-               fprs[i] = *(freg_t *)(vxrs + i);
+               fprs[i].ui = vxrs[i].high;
 }
 
 static inline void convert_fp_to_vx(__vector128 *vxrs, freg_t *fprs)
        int i;
 
        for (i = 0; i < __NUM_FPRS; i++)
-               *(freg_t *)(vxrs + i) = fprs[i];
+               vxrs[i].high = fprs[i].ui;
 }
 
 static inline void fpregs_store(_s390_fp_regs *fpregs, struct fpu *fpu)
 
        /* Save vector registers to signal stack */
        if (MACHINE_HAS_VX) {
                for (i = 0; i < __NUM_VXRS_LOW; i++)
-                       vxrs[i] = *((__u64 *)(current->thread.fpu.vxrs + i) + 1);
+                       vxrs[i] = current->thread.fpu.vxrs[i].low;
                if (__copy_to_user(&sregs_ext->vxrs_low, vxrs,
                                   sizeof(sregs_ext->vxrs_low)) ||
                    __copy_to_user(&sregs_ext->vxrs_high,
                                     sizeof(sregs_ext->vxrs_high)))
                        return -EFAULT;
                for (i = 0; i < __NUM_VXRS_LOW; i++)
-                       *((__u64 *)(current->thread.fpu.vxrs + i) + 1) = vxrs[i];
+                       current->thread.fpu.vxrs[i].low = vxrs[i];
        }
        return 0;
 }
 
 
        /* Copy lower halves of vector registers 0-15 */
        for (i = 0; i < 16; i++)
-               memcpy(&sa->vxrs_low[i], &vxrs[i].u[2], 8);
+               sa->vxrs_low[i] = vxrs[i].low;
        /* Copy vector registers 16-31 */
        memcpy(sa->vxrs_high, vxrs + 16, 16 * sizeof(__vector128));
 }
 
        if (target == current)
                save_fpu_regs();
        for (i = 0; i < __NUM_VXRS_LOW; i++)
-               vxrs[i] = *((__u64 *)(target->thread.fpu.vxrs + i) + 1);
+               vxrs[i] = target->thread.fpu.vxrs[i].low;
        return membuf_write(&to, vxrs, sizeof(vxrs));
 }
 
                save_fpu_regs();
 
        for (i = 0; i < __NUM_VXRS_LOW; i++)
-               vxrs[i] = *((__u64 *)(target->thread.fpu.vxrs + i) + 1);
+               vxrs[i] = target->thread.fpu.vxrs[i].low;
 
        rc = user_regset_copyin(&pos, &count, &kbuf, &ubuf, vxrs, 0, -1);
        if (rc == 0)
                for (i = 0; i < __NUM_VXRS_LOW; i++)
-                       *((__u64 *)(target->thread.fpu.vxrs + i) + 1) = vxrs[i];
+                       target->thread.fpu.vxrs[i].low = vxrs[i];
 
        return rc;
 }
 
        /* Save vector registers to signal stack */
        if (MACHINE_HAS_VX) {
                for (i = 0; i < __NUM_VXRS_LOW; i++)
-                       vxrs[i] = *((__u64 *)(current->thread.fpu.vxrs + i) + 1);
+                       vxrs[i] = current->thread.fpu.vxrs[i].low;
                if (__copy_to_user(&sregs_ext->vxrs_low, vxrs,
                                   sizeof(sregs_ext->vxrs_low)) ||
                    __copy_to_user(&sregs_ext->vxrs_high,
                                     sizeof(sregs_ext->vxrs_high)))
                        return -EFAULT;
                for (i = 0; i < __NUM_VXRS_LOW; i++)
-                       *((__u64 *)(current->thread.fpu.vxrs + i) + 1) = vxrs[i];
+                       current->thread.fpu.vxrs[i].low = vxrs[i];
        }
        return 0;
 }