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