1 #------------------------------------------------------------------------------
3 # Copyright (c) 2011, ARM. All rights reserved.<BR>
5 # SPDX-License-Identifier: BSD-2-Clause-Patent
7 #------------------------------------------------------------------------------
11 GCC_ASM_EXPORT(__aeabi_uidiv)
12 GCC_ASM_EXPORT(__aeabi_uidivmod)
13 GCC_ASM_EXPORT(__aeabi_idiv)
14 GCC_ASM_EXPORT(__aeabi_idivmod)
16 # AREA Math, CODE, READONLY
27 ASM_PFX(__aeabi_uidiv):
28 ASM_PFX(__aeabi_uidivmod):
29 rsbs r12, r1, r0, LSR #4
31 bcc ASM_PFX(__arm_div4)
32 rsbs r12, r1, r0, LSR #8
33 bcc ASM_PFX(__arm_div8)
35 b ASM_PFX(__arm_div_large)
45 ASM_PFX(__aeabi_idiv):
46 ASM_PFX(__aeabi_idivmod):
48 bmi ASM_PFX(__arm_div_negative)
49 rsbs r12, r1, r0, LSR #1
51 bcc ASM_PFX(__arm_div1)
52 rsbs r12, r1, r0, LSR #4
53 bcc ASM_PFX(__arm_div4)
54 rsbs r12, r1, r0, LSR #8
55 bcc ASM_PFX(__arm_div8)
57 b ASM_PFX(__arm_div_large)
59 rsbs r12, r1, r0, LSR #7
60 subcs r0, r0, r1, LSL #7
62 rsbs r12, r1, r0,LSR #6
63 subcs r0, r0, r1, LSL #6
65 rsbs r12, r1, r0, LSR #5
66 subcs r0, r0, r1, LSL #5
68 rsbs r12, r1, r0, LSR #4
69 subcs r0, r0, r1, LSL #4
72 rsbs r12, r1, r0, LSR #3
73 subcs r0, r0, r1, LSL #3
75 rsbs r12, r1, r0, LSR #2
76 subcs r0, r0, r1, LSL #2
78 rsbs r12, r1, r0, LSR #1
79 subcs r0, r0, r1, LSL #1
86 ASM_PFX(__arm_div_negative):
87 ands r2, r1, #0x80000000
89 eors r3, r2, r0, ASR #32
91 rsbs r12, r1, r0, LSR #4
93 rsbs r12, r1, r0, LSR #8
95 ASM_PFX(__arm_div_large):
97 rsbs r12, r1, r0, LSR #8
98 orr r2, r2, #0xfc000000
101 rsbs r12, r1, r0, LSR #8
102 orr r2, r2, #0x3f00000
105 rsbs r12, r1, r0, LSR #8
107 orrcs r2, r2, #0x3f00
110 bcs ASM_PFX(__aeabi_idiv0)
114 rsbs r12, r1, r0, LSR #7
115 subcs r0, r0, r1, LSL #7
117 rsbs r12, r1, r0, LSR #6
118 subcs r0, r0, r1, LSL #6
120 rsbs r12, r1, r0, LSR #5
121 subcs r0, r0, r1, LSL #5
123 rsbs r12, r1, r0, LSR #4
124 subcs r0, r0, r1, LSL #4
127 rsbs r12, r1, r0, LSR #3
128 subcs r0, r0, r1, LSL #3
130 rsbs r12, r1, r0, LSR #2
131 subcs r0, r0, r1, LSL #2
134 rsbs r12, r1, r0, LSR #1
135 subcs r0, r0, r1, LSL #1
145 @ What to do about division by zero? For now, just return.
146 ASM_PFX(__aeabi_idiv0):