1 #------------------------------------------------------------------------------ 2 # 3 # Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> 4 # 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 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 .syntax unified 17 .align 2 18 GCC_ASM_EXPORT(__udivmoddi4) 19 20 ASM_PFX(__udivmoddi4): 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 ASM_PFX(__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 stmiane 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 ASM_PFX(__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 ASM_PFX(__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 ASM_PFX(__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 stmiane 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 stmiane 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 stmiane 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 stmiane 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} 244