1 //------------------------------------------------------------------------------
3 // Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
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
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.
13 //------------------------------------------------------------------------------
18 INCLUDE AsmMacroExport.inc
28 RVCT_ASM_EXPORT __aeabi_uldivmod
29 stmdb sp!, {r4, r5, r6, lr}
33 orrs ip, r3, r2, lsr #31
34 bne __aeabi_uldivmod_label1
38 addeq r6, r6, #16 ; 0x10
42 addeq r6, r6, #8 ; 0x8
45 addeq r6, r6, #4 ; 0x4
48 addeq r6, r6, #2 ; 0x2
51 addeq r6, r6, #1 ; 0x1
53 __aeabi_uldivmod_label1
54 tst r3, #-2147483648 ; 0x80000000
55 bne __aeabi_uldivmod_label2
57 addeq r6, r6, #16 ; 0x10
61 addeq r6, r6, #8 ; 0x8
64 addeq r6, r6, #4 ; 0x4
67 addeq r6, r6, #2 ; 0x2
69 addeq r6, r6, #1 ; 0x1
70 rsb r3, r6, #32 ; 0x20
72 orr ip, ip, r2, lsr r3
75 __aeabi_uldivmod_label2
83 subcs r4, r4, ip, lsl #1
84 addcs r3, r3, #2 ; 0x2
88 add r2, r6, #32 ; 0x20
91 bcc _ll_udiv_small_label1
92 orrs r0, r4, r5, lsr #30
95 subeq r2, r2, #32 ; 0x20
99 bcc _ll_udiv_small_label2
101 moveq r4, r4, lsl #16
102 addeq r1, r1, #16 ; 0x10
103 _ll_udiv_small_label2
106 bcc _ll_udiv_small_label3
109 addeq r1, r1, #8 ; 0x8
110 _ll_udiv_small_label3
111 rsb r0, r1, #32 ; 0x20
113 orr r4, r4, r5, lsr r0
116 bcc _ll_udiv_small_label5
120 adds r0, r0, r0, lsl #1
121 add pc, pc, r0, lsl #2
123 _ll_udiv_small_label4
125 adcs r4, ip, r4, lsl #1
128 adcs r4, ip, r4, lsl #1
131 adcs r4, ip, r4, lsl #1
134 adcs r4, ip, r4, lsl #1
137 adcs r4, ip, r4, lsl #1
140 adcs r4, ip, r4, lsl #1
143 adcs r4, ip, r4, lsl #1
146 adcs r4, ip, r4, lsl #1
150 bpl _ll_udiv_small_label4
151 _ll_udiv_small_label5
153 bic r4, r4, r2, lsl r6
156 add r1, r1, r3, lsl r6
158 ldmia sp!, {r4, r5, r6, pc}
166 adcs r3, r3, #0 ; 0x0
171 adcs r3, r3, #0 ; 0x0
176 adcs r3, r3, #0 ; 0x0
178 rsbs lr, lr, #0 ; 0x0
181 bcc _ll_udiv_big_label1
183 moveq r4, r4, lsl #16
184 addeq r1, r1, #16 ; 0x10
188 bcc _ll_udiv_big_label2
191 addeq r1, r1, #8 ; 0x8
193 rsb r0, r1, #32 ; 0x20
195 orr r4, r4, r5, lsr r0
198 bcc _ll_udiv_big_label4
202 adds r0, r0, r0, lsl #1
203 add pc, pc, r0, lsl #3
232 bpl _ll_udiv_big_label3
236 bic r5, r5, r2, lsl r6
241 bic r4, r4, r3, lsl r6
244 orr r2, r2, r4, ror r6
246 ldmia sp!, {r4, r5, r6, pc}
255 ldmia sp!, {r4, r5, r6, pc}
258 ldmia sp!, {r4, r5, r6, lr}