1/*
2 * Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
3 *
4 * This program and the accompanying materials
5 * are licensed and made available under the terms and conditions of the BSD License
6 * which accompanies this distribution.  The full text of the license may be found at
7 * http://opensource.org/licenses/bsd-license.php
8 *
9 * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11 */
12
13#include <arm/asm_help.h>
14
15.extern ___umodsi3
16.extern ___udivsi3
17
18EnterARM(__udivmoddi4)
19  stmfd  sp!, {r4, r5, r6, r7, lr}
20  add  r7, sp, #12
21  stmfd  sp!, {r10, r11}
22  sub  sp, sp, #20
23  stmia  sp, {r2-r3}
24  ldr  r6, [sp, #48]
25  orrs  r2, r2, r3
26  mov  r10, r0
27  mov  r11, r1
28  beq  l2
29  subs  ip, r1, #0
30  bne  l4
31  cmp  r3, #0
32  bne  l6
33  cmp  r6, #0
34  beq  l8
35  mov  r1, r2
36  bl  ___umodsi3
37  mov  r1, #0
38  stmia  r6, {r0-r1}
39l8:
40  ldr  r1, [sp, #0]
41  mov  r0, r10
42  b  l45
43l6:
44  cmp  r6, #0
45  movne  r1, #0
46  stmiane  r6, {r0-r1}
47  b  l2
48l4:
49  ldr  r1, [sp, #0]
50  cmp  r1, #0
51  bne  l12
52  ldr  r2, [sp, #4]
53  cmp  r2, #0
54  bne  l14
55  cmp  r6, #0
56  beq  l16
57  mov  r1, r2
58  mov  r0, r11
59  bl  ___umodsi3
60  mov  r1, #0
61  stmia  r6, {r0-r1}
62l16:
63  ldr  r1, [sp, #4]
64  mov  r0, r11
65l45:
66  bl  ___udivsi3
67l46:
68  mov  r10, r0
69  mov  r11, #0
70  b  l10
71l14:
72  subs  r1, r0, #0
73  bne  l18
74  cmp  r6, #0
75  beq  l16
76  ldr  r1, [sp, #4]
77  mov  r0, r11
78  bl  ___umodsi3
79  mov  r4, r10
80  mov  r5, r0
81  stmia  r6, {r4-r5}
82  b  l16
83l18:
84  sub  r3, r2, #1
85  tst  r2, r3
86  bne  l22
87  cmp  r6, #0
88  movne  r4, r0
89  andne  r5, ip, r3
90  stmiane  r6, {r4-r5}
91l24:
92  rsb  r3, r2, #0
93  and  r3, r2, r3
94  clz  r3, r3
95  rsb  r3, r3, #31
96  mov  r0, ip, lsr r3
97  b  l46
98l22:
99  clz  r2, r2
100  clz  r3, ip
101  rsb  r3, r3, r2
102  cmp  r3, #30
103  bhi  l48
104  rsb  r2, r3, #31
105  add  lr, r3, #1
106  mov  r3, r1, asl r2
107  str  r3, [sp, #12]
108  mov  r3, r1, lsr lr
109  ldr  r0, [sp, #0]
110  mov  r5, ip, lsr lr
111  orr  r4, r3, ip, asl r2
112  str  r0, [sp, #8]
113  b  l29
114l12:
115  ldr  r3, [sp, #4]
116  cmp  r3, #0
117  bne  l30
118  sub  r3, r1, #1
119  tst  r1, r3
120  bne  l32
121  cmp  r6, #0
122  andne  r3, r3, r0
123  movne  r2, r3
124  movne  r3, #0
125  stmiane  r6, {r2-r3}
126l34:
127  cmp  r1, #1
128  beq  l10
129  rsb  r3, r1, #0
130  and  r3, r1, r3
131  clz  r3, r3
132  rsb  r0, r3, #31
133  mov  r1, ip, lsr r0
134  rsb  r3, r0, #32
135  mov  r0, r10, lsr r0
136  orr  ip, r0, ip, asl r3
137  str  r1, [sp, #12]
138  str  ip, [sp, #8]
139  ldrd  r10, r11, [sp, #8]
140  b  l10
141l32:
142  clz  r2, r1
143  clz  r3, ip
144  rsb  r3, r3, r2
145  rsb  r4, r3, #31
146  mov  r2, r0, asl r4
147  mvn  r1, r3
148  and  r2, r2, r1, asr #31
149  add  lr, r3, #33
150  str  r2, [sp, #8]
151  add  r2, r3, #1
152  mov  r3, r3, asr #31
153  and  r0, r3, r0, asl r1
154  mov  r3, r10, lsr r2
155  orr  r3, r3, ip, asl r4
156  and  r3, r3, r1, asr #31
157  orr  r0, r0, r3
158  mov  r3, ip, lsr lr
159  str  r0, [sp, #12]
160  mov  r0, r10, lsr lr
161  and  r5, r3, r2, asr #31
162  rsb  r3, lr, #31
163  mov  r3, r3, asr #31
164  orr  r0, r0, ip, asl r1
165  and  r3, r3, ip, lsr r2
166  and  r0, r0, r2, asr #31
167  orr  r4, r3, r0
168  b  l29
169l30:
170  clz  r2, r3
171  clz  r3, ip
172  rsb  r3, r3, r2
173  cmp  r3, #31
174  bls  l37
175l48:
176  cmp  r6, #0
177  stmiane  r6, {r10-r11}
178  b  l2
179l37:
180  rsb  r1, r3, #31
181  mov  r0, r0, asl r1
182  add  lr, r3, #1
183  mov  r2, #0
184  str  r0, [sp, #12]
185  mov  r0, r10, lsr lr
186  str  r2, [sp, #8]
187  sub  r2, r3, #31
188  and  r0, r0, r2, asr #31
189  mov  r3, ip, lsr lr
190  orr  r4, r0, ip, asl r1
191  and  r5, r3, r2, asr #31
192l29:
193  mov  ip, #0
194  mov  r10, ip
195  b  l40
196l41:
197  ldr  r1, [sp, #12]
198  ldr  r2, [sp, #8]
199  mov  r3, r4, lsr #31
200  orr  r5, r3, r5, asl #1
201  mov  r3, r1, lsr #31
202  orr  r4, r3, r4, asl #1
203  mov  r3, r2, lsr #31
204  orr  r0, r3, r1, asl #1
205  orr  r1, ip, r2, asl #1
206  ldmia  sp, {r2-r3}
207  str  r0, [sp, #12]
208  subs  r2, r2, r4
209  sbc  r3, r3, r5
210  str  r1, [sp, #8]
211  subs  r0, r2, #1
212  sbc  r1, r3, #0
213  mov  r2, r1, asr #31
214  ldmia  sp, {r0-r1}
215  mov  r3, r2
216  and  ip, r2, #1
217  and  r3, r3, r1
218  and  r2, r2, r0
219  subs  r4, r4, r2
220  sbc  r5, r5, r3
221  add  r10, r10, #1
222l40:
223  cmp  r10, lr
224  bne  l41
225  ldrd  r0, r1, [sp, #8]
226  adds  r0, r0, r0
227  adc  r1, r1, r1
228  cmp  r6, #0
229  orr  r10, r0, ip
230  mov  r11, r1
231  stmiane  r6, {r4-r5}
232  b  l10
233l2:
234  mov  r10, #0
235  mov  r11, #0
236l10:
237  mov  r0, r10
238  mov  r1, r11
239  sub  sp, r7, #20
240  ldmfd  sp!, {r10, r11}
241  ldmfd  sp!, {r4, r5, r6, r7, pc}
242