aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/lib/ashldi3.c16
-rw-r--r--arch/arm/lib/ashrdi3.c14
-rw-r--r--arch/arm/lib/gcclib.h17
-rw-r--r--arch/arm/lib/longlong.h66
-rw-r--r--arch/arm/lib/lshrdi3.c16
-rw-r--r--arch/arm/lib/muldi3.c18
-rw-r--r--arch/arm/lib/ucmpdi2.c12
-rw-r--r--arch/arm/lib/udivdi3.c26
8 files changed, 90 insertions, 95 deletions
diff --git a/arch/arm/lib/ashldi3.c b/arch/arm/lib/ashldi3.c
index 130f5a839669..02d2b628ebc1 100644
--- a/arch/arm/lib/ashldi3.c
+++ b/arch/arm/lib/ashldi3.c
@@ -31,11 +31,11 @@ Boston, MA 02111-1307, USA. */
31 31
32#include "gcclib.h" 32#include "gcclib.h"
33 33
34DItype 34s64
35__ashldi3 (DItype u, word_type b) 35__ashldi3 (s64 u, int b)
36{ 36{
37 DIunion w; 37 DIunion w;
38 word_type bm; 38 int bm;
39 DIunion uu; 39 DIunion uu;
40 40
41 if (b == 0) 41 if (b == 0)
@@ -43,17 +43,17 @@ __ashldi3 (DItype u, word_type b)
43 43
44 uu.ll = u; 44 uu.ll = u;
45 45
46 bm = (sizeof (SItype) * BITS_PER_UNIT) - b; 46 bm = (sizeof (s32) * BITS_PER_UNIT) - b;
47 if (bm <= 0) 47 if (bm <= 0)
48 { 48 {
49 w.s.low = 0; 49 w.s.low = 0;
50 w.s.high = (USItype)uu.s.low << -bm; 50 w.s.high = (u32)uu.s.low << -bm;
51 } 51 }
52 else 52 else
53 { 53 {
54 USItype carries = (USItype)uu.s.low >> bm; 54 u32 carries = (u32)uu.s.low >> bm;
55 w.s.low = (USItype)uu.s.low << b; 55 w.s.low = (u32)uu.s.low << b;
56 w.s.high = ((USItype)uu.s.high << b) | carries; 56 w.s.high = ((u32)uu.s.high << b) | carries;
57 } 57 }
58 58
59 return w.ll; 59 return w.ll;
diff --git a/arch/arm/lib/ashrdi3.c b/arch/arm/lib/ashrdi3.c
index 71625d218f8d..89f6fb7ed8fb 100644
--- a/arch/arm/lib/ashrdi3.c
+++ b/arch/arm/lib/ashrdi3.c
@@ -31,11 +31,11 @@ Boston, MA 02111-1307, USA. */
31 31
32#include "gcclib.h" 32#include "gcclib.h"
33 33
34DItype 34s64
35__ashrdi3 (DItype u, word_type b) 35__ashrdi3 (s64 u, int b)
36{ 36{
37 DIunion w; 37 DIunion w;
38 word_type bm; 38 int bm;
39 DIunion uu; 39 DIunion uu;
40 40
41 if (b == 0) 41 if (b == 0)
@@ -43,18 +43,18 @@ __ashrdi3 (DItype u, word_type b)
43 43
44 uu.ll = u; 44 uu.ll = u;
45 45
46 bm = (sizeof (SItype) * BITS_PER_UNIT) - b; 46 bm = (sizeof (s32) * BITS_PER_UNIT) - b;
47 if (bm <= 0) 47 if (bm <= 0)
48 { 48 {
49 /* w.s.high = 1..1 or 0..0 */ 49 /* w.s.high = 1..1 or 0..0 */
50 w.s.high = uu.s.high >> (sizeof (SItype) * BITS_PER_UNIT - 1); 50 w.s.high = uu.s.high >> (sizeof (s32) * BITS_PER_UNIT - 1);
51 w.s.low = uu.s.high >> -bm; 51 w.s.low = uu.s.high >> -bm;
52 } 52 }
53 else 53 else
54 { 54 {
55 USItype carries = (USItype)uu.s.high << bm; 55 u32 carries = (u32)uu.s.high << bm;
56 w.s.high = uu.s.high >> b; 56 w.s.high = uu.s.high >> b;
57 w.s.low = ((USItype)uu.s.low >> b) | carries; 57 w.s.low = ((u32)uu.s.low >> b) | carries;
58 } 58 }
59 59
60 return w.ll; 60 return w.ll;
diff --git a/arch/arm/lib/gcclib.h b/arch/arm/lib/gcclib.h
index 65314a3d9e27..283f5294cc3e 100644
--- a/arch/arm/lib/gcclib.h
+++ b/arch/arm/lib/gcclib.h
@@ -1,25 +1,20 @@
1/* gcclib.h -- definitions for various functions 'borrowed' from gcc-2.95.3 */ 1/* gcclib.h -- definitions for various functions 'borrowed' from gcc-2.95.3 */
2/* I Molton 29/07/01 */ 2/* I Molton 29/07/01 */
3 3
4#define BITS_PER_UNIT 8 4#include <linux/types.h>
5#define SI_TYPE_SIZE (sizeof (SItype) * BITS_PER_UNIT)
6 5
7typedef unsigned int UQItype __attribute__ ((mode (QI))); 6#define BITS_PER_UNIT 8
8typedef int SItype __attribute__ ((mode (SI))); 7#define SI_TYPE_SIZE (sizeof(s32) * BITS_PER_UNIT)
9typedef unsigned int USItype __attribute__ ((mode (SI)));
10typedef int DItype __attribute__ ((mode (DI)));
11typedef int word_type __attribute__ ((mode (__word__)));
12typedef unsigned int UDItype __attribute__ ((mode (DI)));
13 8
14#ifdef __ARMEB__ 9#ifdef __ARMEB__
15 struct DIstruct {SItype high, low;}; 10 struct DIstruct {s32 high, low;};
16#else 11#else
17 struct DIstruct {SItype low, high;}; 12 struct DIstruct {s32 low, high;};
18#endif 13#endif
19 14
20typedef union 15typedef union
21{ 16{
22 struct DIstruct s; 17 struct DIstruct s;
23 DItype ll; 18 s64 ll;
24} DIunion; 19} DIunion;
25 20
diff --git a/arch/arm/lib/longlong.h b/arch/arm/lib/longlong.h
index 179eea4edc35..3ef76957481e 100644
--- a/arch/arm/lib/longlong.h
+++ b/arch/arm/lib/longlong.h
@@ -26,18 +26,18 @@
26 26
27#define __BITS4 (SI_TYPE_SIZE / 4) 27#define __BITS4 (SI_TYPE_SIZE / 4)
28#define __ll_B (1L << (SI_TYPE_SIZE / 2)) 28#define __ll_B (1L << (SI_TYPE_SIZE / 2))
29#define __ll_lowpart(t) ((USItype) (t) % __ll_B) 29#define __ll_lowpart(t) ((u32) (t) % __ll_B)
30#define __ll_highpart(t) ((USItype) (t) / __ll_B) 30#define __ll_highpart(t) ((u32) (t) / __ll_B)
31 31
32/* Define auxiliary asm macros. 32/* Define auxiliary asm macros.
33 33
34 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) 34 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand)
35 multiplies two USItype integers MULTIPLER and MULTIPLICAND, 35 multiplies two u32 integers MULTIPLER and MULTIPLICAND,
36 and generates a two-part USItype product in HIGH_PROD and 36 and generates a two-part u32 product in HIGH_PROD and
37 LOW_PROD. 37 LOW_PROD.
38 38
39 2) __umulsidi3(a,b) multiplies two USItype integers A and B, 39 2) __umulsidi3(a,b) multiplies two u32 integers A and B,
40 and returns a UDItype product. This is just a variant of umul_ppmm. 40 and returns a u64 product. This is just a variant of umul_ppmm.
41 41
42 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator, 42 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
43 denominator) divides a two-word unsigned integer, composed by the 43 denominator) divides a two-word unsigned integer, composed by the
@@ -77,23 +77,23 @@
77#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ 77#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
78 __asm__ ("adds %1, %4, %5 \n\ 78 __asm__ ("adds %1, %4, %5 \n\
79 adc %0, %2, %3" \ 79 adc %0, %2, %3" \
80 : "=r" ((USItype) (sh)), \ 80 : "=r" ((u32) (sh)), \
81 "=&r" ((USItype) (sl)) \ 81 "=&r" ((u32) (sl)) \
82 : "%r" ((USItype) (ah)), \ 82 : "%r" ((u32) (ah)), \
83 "rI" ((USItype) (bh)), \ 83 "rI" ((u32) (bh)), \
84 "%r" ((USItype) (al)), \ 84 "%r" ((u32) (al)), \
85 "rI" ((USItype) (bl))) 85 "rI" ((u32) (bl)))
86#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ 86#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
87 __asm__ ("subs %1, %4, %5 \n\ 87 __asm__ ("subs %1, %4, %5 \n\
88 sbc %0, %2, %3" \ 88 sbc %0, %2, %3" \
89 : "=r" ((USItype) (sh)), \ 89 : "=r" ((u32) (sh)), \
90 "=&r" ((USItype) (sl)) \ 90 "=&r" ((u32) (sl)) \
91 : "r" ((USItype) (ah)), \ 91 : "r" ((u32) (ah)), \
92 "rI" ((USItype) (bh)), \ 92 "rI" ((u32) (bh)), \
93 "r" ((USItype) (al)), \ 93 "r" ((u32) (al)), \
94 "rI" ((USItype) (bl))) 94 "rI" ((u32) (bl)))
95#define umul_ppmm(xh, xl, a, b) \ 95#define umul_ppmm(xh, xl, a, b) \
96{register USItype __t0, __t1, __t2; \ 96{register u32 __t0, __t1, __t2; \
97 __asm__ ("%@ Inlined umul_ppmm \n\ 97 __asm__ ("%@ Inlined umul_ppmm \n\
98 mov %2, %5, lsr #16 \n\ 98 mov %2, %5, lsr #16 \n\
99 mov %0, %6, lsr #16 \n\ 99 mov %0, %6, lsr #16 \n\
@@ -107,11 +107,11 @@
107 addcs %0, %0, #65536 \n\ 107 addcs %0, %0, #65536 \n\
108 adds %1, %1, %3, lsl #16 \n\ 108 adds %1, %1, %3, lsl #16 \n\
109 adc %0, %0, %3, lsr #16" \ 109 adc %0, %0, %3, lsr #16" \
110 : "=&r" ((USItype) (xh)), \ 110 : "=&r" ((u32) (xh)), \
111 "=r" ((USItype) (xl)), \ 111 "=r" ((u32) (xl)), \
112 "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \ 112 "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \
113 : "r" ((USItype) (a)), \ 113 : "r" ((u32) (a)), \
114 "r" ((USItype) (b)));} 114 "r" ((u32) (b)));}
115#define UMUL_TIME 20 115#define UMUL_TIME 20
116#define UDIV_TIME 100 116#define UDIV_TIME 100
117#endif /* __arm__ */ 117#endif /* __arm__ */
@@ -123,14 +123,14 @@
123 123
124#define __udiv_qrnnd_c(q, r, n1, n0, d) \ 124#define __udiv_qrnnd_c(q, r, n1, n0, d) \
125 do { \ 125 do { \
126 USItype __d1, __d0, __q1, __q0; \ 126 u32 __d1, __d0, __q1, __q0; \
127 USItype __r1, __r0, __m; \ 127 u32 __r1, __r0, __m; \
128 __d1 = __ll_highpart (d); \ 128 __d1 = __ll_highpart (d); \
129 __d0 = __ll_lowpart (d); \ 129 __d0 = __ll_lowpart (d); \
130 \ 130 \
131 __r1 = (n1) % __d1; \ 131 __r1 = (n1) % __d1; \
132 __q1 = (n1) / __d1; \ 132 __q1 = (n1) / __d1; \
133 __m = (USItype) __q1 * __d0; \ 133 __m = (u32) __q1 * __d0; \
134 __r1 = __r1 * __ll_B | __ll_highpart (n0); \ 134 __r1 = __r1 * __ll_B | __ll_highpart (n0); \
135 if (__r1 < __m) \ 135 if (__r1 < __m) \
136 { \ 136 { \
@@ -143,7 +143,7 @@
143 \ 143 \
144 __r0 = __r1 % __d1; \ 144 __r0 = __r1 % __d1; \
145 __q0 = __r1 / __d1; \ 145 __q0 = __r1 / __d1; \
146 __m = (USItype) __q0 * __d0; \ 146 __m = (u32) __q0 * __d0; \
147 __r0 = __r0 * __ll_B | __ll_lowpart (n0); \ 147 __r0 = __r0 * __ll_B | __ll_lowpart (n0); \
148 if (__r0 < __m) \ 148 if (__r0 < __m) \
149 { \ 149 { \
@@ -154,7 +154,7 @@
154 } \ 154 } \
155 __r0 -= __m; \ 155 __r0 -= __m; \
156 \ 156 \
157 (q) = (USItype) __q1 * __ll_B | __q0; \ 157 (q) = (u32) __q1 * __ll_B | __q0; \
158 (r) = __r0; \ 158 (r) = __r0; \
159 } while (0) 159 } while (0)
160 160
@@ -163,14 +163,14 @@
163 163
164#define count_leading_zeros(count, x) \ 164#define count_leading_zeros(count, x) \
165 do { \ 165 do { \
166 USItype __xr = (x); \ 166 u32 __xr = (x); \
167 USItype __a; \ 167 u32 __a; \
168 \ 168 \
169 if (SI_TYPE_SIZE <= 32) \ 169 if (SI_TYPE_SIZE <= 32) \
170 { \ 170 { \
171 __a = __xr < ((USItype)1<<2*__BITS4) \ 171 __a = __xr < ((u32)1<<2*__BITS4) \
172 ? (__xr < ((USItype)1<<__BITS4) ? 0 : __BITS4) \ 172 ? (__xr < ((u32)1<<__BITS4) ? 0 : __BITS4) \
173 : (__xr < ((USItype)1<<3*__BITS4) ? 2*__BITS4 : 3*__BITS4); \ 173 : (__xr < ((u32)1<<3*__BITS4) ? 2*__BITS4 : 3*__BITS4); \
174 } \ 174 } \
175 else \ 175 else \
176 { \ 176 { \
diff --git a/arch/arm/lib/lshrdi3.c b/arch/arm/lib/lshrdi3.c
index b666f1bad451..5c2385acdecc 100644
--- a/arch/arm/lib/lshrdi3.c
+++ b/arch/arm/lib/lshrdi3.c
@@ -31,11 +31,11 @@ Boston, MA 02111-1307, USA. */
31 31
32#include "gcclib.h" 32#include "gcclib.h"
33 33
34DItype 34s64
35__lshrdi3 (DItype u, word_type b) 35__lshrdi3 (s64 u, int b)
36{ 36{
37 DIunion w; 37 DIunion w;
38 word_type bm; 38 int bm;
39 DIunion uu; 39 DIunion uu;
40 40
41 if (b == 0) 41 if (b == 0)
@@ -43,17 +43,17 @@ __lshrdi3 (DItype u, word_type b)
43 43
44 uu.ll = u; 44 uu.ll = u;
45 45
46 bm = (sizeof (SItype) * BITS_PER_UNIT) - b; 46 bm = (sizeof (s32) * BITS_PER_UNIT) - b;
47 if (bm <= 0) 47 if (bm <= 0)
48 { 48 {
49 w.s.high = 0; 49 w.s.high = 0;
50 w.s.low = (USItype)uu.s.high >> -bm; 50 w.s.low = (u32)uu.s.high >> -bm;
51 } 51 }
52 else 52 else
53 { 53 {
54 USItype carries = (USItype)uu.s.high << bm; 54 u32 carries = (u32)uu.s.high << bm;
55 w.s.high = (USItype)uu.s.high >> b; 55 w.s.high = (u32)uu.s.high >> b;
56 w.s.low = ((USItype)uu.s.low >> b) | carries; 56 w.s.low = ((u32)uu.s.low >> b) | carries;
57 } 57 }
58 58
59 return w.ll; 59 return w.ll;
diff --git a/arch/arm/lib/muldi3.c b/arch/arm/lib/muldi3.c
index 44d611b1cfdb..5b649fa9e2f7 100644
--- a/arch/arm/lib/muldi3.c
+++ b/arch/arm/lib/muldi3.c
@@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */
32#include "gcclib.h" 32#include "gcclib.h"
33 33
34#define umul_ppmm(xh, xl, a, b) \ 34#define umul_ppmm(xh, xl, a, b) \
35{register USItype __t0, __t1, __t2; \ 35{register u32 __t0, __t1, __t2; \
36 __asm__ ("%@ Inlined umul_ppmm \n\ 36 __asm__ ("%@ Inlined umul_ppmm \n\
37 mov %2, %5, lsr #16 \n\ 37 mov %2, %5, lsr #16 \n\
38 mov %0, %6, lsr #16 \n\ 38 mov %0, %6, lsr #16 \n\
@@ -46,11 +46,11 @@ Boston, MA 02111-1307, USA. */
46 addcs %0, %0, #65536 \n\ 46 addcs %0, %0, #65536 \n\
47 adds %1, %1, %3, lsl #16 \n\ 47 adds %1, %1, %3, lsl #16 \n\
48 adc %0, %0, %3, lsr #16" \ 48 adc %0, %0, %3, lsr #16" \
49 : "=&r" ((USItype) (xh)), \ 49 : "=&r" ((u32) (xh)), \
50 "=r" ((USItype) (xl)), \ 50 "=r" ((u32) (xl)), \
51 "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \ 51 "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \
52 : "r" ((USItype) (a)), \ 52 : "r" ((u32) (a)), \
53 "r" ((USItype) (b)));} 53 "r" ((u32) (b)));}
54 54
55 55
56#define __umulsidi3(u, v) \ 56#define __umulsidi3(u, v) \
@@ -59,8 +59,8 @@ Boston, MA 02111-1307, USA. */
59 __w.ll; }) 59 __w.ll; })
60 60
61 61
62DItype 62s64
63__muldi3 (DItype u, DItype v) 63__muldi3 (s64 u, s64 v)
64{ 64{
65 DIunion w; 65 DIunion w;
66 DIunion uu, vv; 66 DIunion uu, vv;
@@ -69,8 +69,8 @@ __muldi3 (DItype u, DItype v)
69 vv.ll = v; 69 vv.ll = v;
70 70
71 w.ll = __umulsidi3 (uu.s.low, vv.s.low); 71 w.ll = __umulsidi3 (uu.s.low, vv.s.low);
72 w.s.high += ((USItype) uu.s.low * (USItype) vv.s.high 72 w.s.high += ((u32) uu.s.low * (u32) vv.s.high
73 + (USItype) uu.s.high * (USItype) vv.s.low); 73 + (u32) uu.s.high * (u32) vv.s.low);
74 74
75 return w.ll; 75 return w.ll;
76} 76}
diff --git a/arch/arm/lib/ucmpdi2.c b/arch/arm/lib/ucmpdi2.c
index 6c6ae63efa02..3eb438c065b3 100644
--- a/arch/arm/lib/ucmpdi2.c
+++ b/arch/arm/lib/ucmpdi2.c
@@ -31,20 +31,20 @@ Boston, MA 02111-1307, USA. */
31 31
32#include "gcclib.h" 32#include "gcclib.h"
33 33
34word_type 34int
35__ucmpdi2 (DItype a, DItype b) 35__ucmpdi2 (s64 a, s64 b)
36{ 36{
37 DIunion au, bu; 37 DIunion au, bu;
38 38
39 au.ll = a, bu.ll = b; 39 au.ll = a, bu.ll = b;
40 40
41 if ((USItype) au.s.high < (USItype) bu.s.high) 41 if ((u32) au.s.high < (u32) bu.s.high)
42 return 0; 42 return 0;
43 else if ((USItype) au.s.high > (USItype) bu.s.high) 43 else if ((u32) au.s.high > (u32) bu.s.high)
44 return 2; 44 return 2;
45 if ((USItype) au.s.low < (USItype) bu.s.low) 45 if ((u32) au.s.low < (u32) bu.s.low)
46 return 0; 46 return 0;
47 else if ((USItype) au.s.low > (USItype) bu.s.low) 47 else if ((u32) au.s.low > (u32) bu.s.low)
48 return 2; 48 return 2;
49 return 1; 49 return 1;
50} 50}
diff --git a/arch/arm/lib/udivdi3.c b/arch/arm/lib/udivdi3.c
index d25195f673f4..df1d5ef62bc7 100644
--- a/arch/arm/lib/udivdi3.c
+++ b/arch/arm/lib/udivdi3.c
@@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */
32#include "gcclib.h" 32#include "gcclib.h"
33#include "longlong.h" 33#include "longlong.h"
34 34
35static const UQItype __clz_tab[] = 35static const u8 __clz_tab[] =
36{ 36{
37 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 37 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
38 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 38 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
@@ -44,15 +44,15 @@ static const UQItype __clz_tab[] =
44 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 44 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
45}; 45};
46 46
47UDItype 47u64
48__udivmoddi4 (UDItype n, UDItype d, UDItype *rp) 48__udivmoddi4 (u64 n, u64 d, u64 *rp)
49{ 49{
50 DIunion ww; 50 DIunion ww;
51 DIunion nn, dd; 51 DIunion nn, dd;
52 DIunion rr; 52 DIunion rr;
53 USItype d0, d1, n0, n1, n2; 53 u32 d0, d1, n0, n1, n2;
54 USItype q0, q1; 54 u32 q0, q1;
55 USItype b, bm; 55 u32 b, bm;
56 56
57 nn.ll = n; 57 nn.ll = n;
58 dd.ll = d; 58 dd.ll = d;
@@ -185,7 +185,7 @@ __udivmoddi4 (UDItype n, UDItype d, UDItype *rp)
185 } 185 }
186 else 186 else
187 { 187 {
188 USItype m1, m0; 188 u32 m1, m0;
189 /* Normalize. */ 189 /* Normalize. */
190 190
191 b = SI_TYPE_SIZE - bm; 191 b = SI_TYPE_SIZE - bm;
@@ -224,16 +224,16 @@ __udivmoddi4 (UDItype n, UDItype d, UDItype *rp)
224 return ww.ll; 224 return ww.ll;
225} 225}
226 226
227UDItype 227u64
228__udivdi3 (UDItype n, UDItype d) 228__udivdi3 (u64 n, u64 d)
229{ 229{
230 return __udivmoddi4 (n, d, (UDItype *) 0); 230 return __udivmoddi4 (n, d, (u64 *) 0);
231} 231}
232 232
233UDItype 233u64
234__umoddi3 (UDItype u, UDItype v) 234__umoddi3 (u64 u, u64 v)
235{ 235{
236 UDItype w; 236 u64 w;
237 237
238 (void) __udivmoddi4 (u ,v, &w); 238 (void) __udivmoddi4 (u ,v, &w);
239 239