EXTRA_AFLAGS := -traditional
 
-lib-y += delay.o string.o uaccess_std.o uaccess_pt.o qrnnd.o
-obj-$(CONFIG_32BIT) += div64.o
+lib-y += delay.o string.o uaccess_std.o uaccess_pt.o
+obj-$(CONFIG_32BIT) += div64.o qrnnd.o
 lib-$(CONFIG_64BIT) += uaccess_mvcos.o
 lib-$(CONFIG_SMP) += spinlock.o
 
    
 
 #define _FP_W_TYPE_SIZE                32
-#define _FP_W_TYPE             unsigned long
-#define _FP_WS_TYPE            signed long
-#define _FP_I_TYPE             long
+#define _FP_W_TYPE             unsigned int
+#define _FP_WS_TYPE            signed int
+#define _FP_I_TYPE             int
 
 #define _FP_MUL_MEAT_S(R,X,Y)                                  \
   _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
 
        wl = __wl;                                      \
 })
 
+#ifdef __s390x__
+#define udiv_qrnnd(q, r, n1, n0, d)                    \
+  do { unsigned long __n;                              \
+       unsigned int __r, __d;                          \
+    __n = ((unsigned long)(n1) << 32) + n0;            \
+    __d = (d);                                         \
+    (q) = __n / __d;                                   \
+    (r) = __n % __d;                                   \
+  } while (0)
+#else
 #define udiv_qrnnd(q, r, n1, n0, d)                    \
   do { unsigned int __r;                               \
     (q) = __udiv_qrnnd (&__r, (n1), (n0), (d));                \
   } while (0)
 extern unsigned long __udiv_qrnnd (unsigned int *, unsigned int,
                                   unsigned int , unsigned int);
+#endif
 
 #define UDIV_NEEDS_NORMALIZATION 0