]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivmoddi4.S
Updating ArmLib.h to add functions needed to turn on paging in CpuDxe. Also added...
[mirror_edk2.git] / ArmPkg / Library / CompilerIntrinsicsLib / Arm / udivmoddi4.S
1 #------------------------------------------------------------------------------
2 #
3 # Copyright (c) 2008-2009 Apple Inc. All rights reserved.
4 #
5 # All rights reserved. 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 .align 2
17 .globl ___udivmoddi4
18 ___udivmoddi4:
19 @ args = 8, pretend = 0, frame = 16
20 @ frame_needed = 1, uses_anonymous_args = 0
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 ___umodsi3
39 mov r1, #0
40 stmia r6, {r0-r1}
41 L8:
42 ldr r1, [sp, #0]
43 mov r0, r10
44 b L45
45 L6:
46 cmp r6, #0
47 movne r1, #0
48 stmneia r6, {r0-r1}
49 b L2
50 L4:
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 ___umodsi3
62 mov r1, #0
63 stmia r6, {r0-r1}
64 L16:
65 ldr r1, [sp, #4]
66 mov r0, r11
67 L45:
68 bl ___udivsi3
69 L46:
70 mov r10, r0
71 mov r11, #0
72 b L10
73 L14:
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 ___umodsi3
81 mov r4, r10
82 mov r5, r0
83 stmia r6, {r4-r5}
84 b L16
85 L18:
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 stmneia r6, {r4-r5}
93 L24:
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
100 L22:
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
116 L12:
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 stmneia r6, {r2-r3}
128 L34:
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
143 L32:
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
171 L30:
172 clz r2, r3
173 clz r3, ip
174 rsb r3, r3, r2
175 cmp r3, #31
176 bls L37
177 L48:
178 cmp r6, #0
179 stmneia r6, {r10-r11}
180 b L2
181 L37:
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
194 L29:
195 mov ip, #0
196 mov r10, ip
197 b L40
198 L41:
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
224 L40:
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 stmneia r6, {r4-r5}
234 b L10
235 L2:
236 mov r10, #0
237 mov r11, #0
238 L10:
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}