1 //------------------------------------------------------------------------------
3 // Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
4 // Copyright (c) 2018, Pete Batard. All rights reserved.<BR>
6 // SPDX-License-Identifier: BSD-2-Clause-Patent
8 //------------------------------------------------------------------------------
11 EXPORT __aeabi_uldivmod
14 AREA s___aeabi_uldivmod, CODE, READONLY, ARM
27 ; Swap r0-r1 and r2-r3
45 stmdb sp!, {r4, r5, r6, lr}
49 orrs ip, r3, r2, lsr #31
50 bne __aeabi_uldivmod_label1
54 addeq r6, r6, #16 ; 0x10
58 addeq r6, r6, #8 ; 0x8
61 addeq r6, r6, #4 ; 0x4
64 addeq r6, r6, #2 ; 0x2
67 addeq r6, r6, #1 ; 0x1
69 __aeabi_uldivmod_label1
70 tst r3, #-2147483648 ; 0x80000000
71 bne __aeabi_uldivmod_label2
73 addeq r6, r6, #16 ; 0x10
77 addeq r6, r6, #8 ; 0x8
80 addeq r6, r6, #4 ; 0x4
83 addeq r6, r6, #2 ; 0x2
85 addeq r6, r6, #1 ; 0x1
86 rsb r3, r6, #32 ; 0x20
88 orr ip, ip, r2, lsr r3
91 __aeabi_uldivmod_label2
99 subcs r4, r4, ip, lsl #1
100 addcs r3, r3, #2 ; 0x2
103 adcs r3, r3, #0 ; 0x0
104 add r2, r6, #32 ; 0x20
107 bcc _ll_udiv_small_label1
108 orrs r0, r4, r5, lsr #30
111 subeq r2, r2, #32 ; 0x20
112 _ll_udiv_small_label1
115 bcc _ll_udiv_small_label2
117 moveq r4, r4, lsl #16
118 addeq r1, r1, #16 ; 0x10
119 _ll_udiv_small_label2
122 bcc _ll_udiv_small_label3
125 addeq r1, r1, #8 ; 0x8
126 _ll_udiv_small_label3
127 rsb r0, r1, #32 ; 0x20
129 orr r4, r4, r5, lsr r0
132 bcc _ll_udiv_small_label5
136 adds r0, r0, r0, lsl #1
137 add pc, pc, r0, lsl #2
139 _ll_udiv_small_label4
141 adcs r4, ip, r4, lsl #1
144 adcs r4, ip, r4, lsl #1
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
166 bpl _ll_udiv_small_label4
167 _ll_udiv_small_label5
169 bic r4, r4, r2, lsl r6
172 add r1, r1, r3, lsl r6
174 ldmia sp!, {r4, r5, r6, pc}
182 adcs r3, r3, #0 ; 0x0
187 adcs r3, r3, #0 ; 0x0
192 adcs r3, r3, #0 ; 0x0
194 rsbs lr, lr, #0 ; 0x0
197 bcc _ll_udiv_big_label1
199 moveq r4, r4, lsl #16
200 addeq r1, r1, #16 ; 0x10
204 bcc _ll_udiv_big_label2
207 addeq r1, r1, #8 ; 0x8
209 rsb r0, r1, #32 ; 0x20
211 orr r4, r4, r5, lsr r0
214 bcc _ll_udiv_big_label4
218 adds r0, r0, r0, lsl #1
219 add pc, pc, r0, lsl #3
248 bpl _ll_udiv_big_label3
252 bic r5, r5, r2, lsl r6
257 bic r4, r4, r3, lsl r6
260 orr r2, r2, r4, ror r6
262 ldmia sp!, {r4, r5, r6, pc}
271 ldmia sp!, {r4, r5, r6, pc}
274 ldmia sp!, {r4, r5, r6, lr}