1 //------------------------------------------------------------------------------
3 // Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
4 // Copyright (c) 2018, Pete Batard. All rights reserved.<BR>
6 // This program and the accompanying materials
7 // are licensed and made available under the terms and conditions of the BSD License
8 // which accompanies this distribution. The full text of the license may be found at
9 // http://opensource.org/licenses/bsd-license.php
11 // THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 //------------------------------------------------------------------------------
17 EXPORT __aeabi_uldivmod
20 AREA s___aeabi_uldivmod, CODE, READONLY, ARM
33 ; Swap r0-r1 and r2-r3
51 stmdb sp!, {r4, r5, r6, lr}
55 orrs ip, r3, r2, lsr #31
56 bne __aeabi_uldivmod_label1
60 addeq r6, r6, #16 ; 0x10
64 addeq r6, r6, #8 ; 0x8
67 addeq r6, r6, #4 ; 0x4
70 addeq r6, r6, #2 ; 0x2
73 addeq r6, r6, #1 ; 0x1
75 __aeabi_uldivmod_label1
76 tst r3, #-2147483648 ; 0x80000000
77 bne __aeabi_uldivmod_label2
79 addeq r6, r6, #16 ; 0x10
83 addeq r6, r6, #8 ; 0x8
86 addeq r6, r6, #4 ; 0x4
89 addeq r6, r6, #2 ; 0x2
91 addeq r6, r6, #1 ; 0x1
92 rsb r3, r6, #32 ; 0x20
94 orr ip, ip, r2, lsr r3
97 __aeabi_uldivmod_label2
105 subcs r4, r4, ip, lsl #1
106 addcs r3, r3, #2 ; 0x2
109 adcs r3, r3, #0 ; 0x0
110 add r2, r6, #32 ; 0x20
113 bcc _ll_udiv_small_label1
114 orrs r0, r4, r5, lsr #30
117 subeq r2, r2, #32 ; 0x20
118 _ll_udiv_small_label1
121 bcc _ll_udiv_small_label2
123 moveq r4, r4, lsl #16
124 addeq r1, r1, #16 ; 0x10
125 _ll_udiv_small_label2
128 bcc _ll_udiv_small_label3
131 addeq r1, r1, #8 ; 0x8
132 _ll_udiv_small_label3
133 rsb r0, r1, #32 ; 0x20
135 orr r4, r4, r5, lsr r0
138 bcc _ll_udiv_small_label5
142 adds r0, r0, r0, lsl #1
143 add pc, pc, r0, lsl #2
145 _ll_udiv_small_label4
147 adcs r4, ip, r4, lsl #1
150 adcs r4, ip, r4, lsl #1
153 adcs r4, ip, r4, lsl #1
156 adcs r4, ip, r4, lsl #1
159 adcs r4, ip, r4, lsl #1
162 adcs r4, ip, r4, lsl #1
165 adcs r4, ip, r4, lsl #1
168 adcs r4, ip, r4, lsl #1
172 bpl _ll_udiv_small_label4
173 _ll_udiv_small_label5
175 bic r4, r4, r2, lsl r6
178 add r1, r1, r3, lsl r6
180 ldmia sp!, {r4, r5, r6, pc}
188 adcs r3, r3, #0 ; 0x0
193 adcs r3, r3, #0 ; 0x0
198 adcs r3, r3, #0 ; 0x0
200 rsbs lr, lr, #0 ; 0x0
203 bcc _ll_udiv_big_label1
205 moveq r4, r4, lsl #16
206 addeq r1, r1, #16 ; 0x10
210 bcc _ll_udiv_big_label2
213 addeq r1, r1, #8 ; 0x8
215 rsb r0, r1, #32 ; 0x20
217 orr r4, r4, r5, lsr r0
220 bcc _ll_udiv_big_label4
224 adds r0, r0, r0, lsl #1
225 add pc, pc, r0, lsl #3
254 bpl _ll_udiv_big_label3
258 bic r5, r5, r2, lsl r6
263 bic r4, r4, r3, lsl r6
266 orr r2, r2, r4, ror r6
268 ldmia sp!, {r4, r5, r6, pc}
277 ldmia sp!, {r4, r5, r6, pc}
280 ldmia sp!, {r4, r5, r6, lr}