1/* 2 * Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> 3 * 4 * This program and the accompanying materials 5 * are licensed and made available under the terms and conditions of the BSD License 6 * which accompanies this distribution. The full text of the license may be found at 7 * http://opensource.org/licenses/bsd-license.php 8 * 9 * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 */ 12 13#include <arm/asm_help.h> 14 15.extern ___umodsi3 16.extern ___udivsi3 17 18EnterARM(__udivmoddi4) 19 stmfd sp!, {r4, r5, r6, r7, lr} 20 add r7, sp, #12 21 stmfd sp!, {r10, r11} 22 sub sp, sp, #20 23 stmia sp, {r2-r3} 24 ldr r6, [sp, #48] 25 orrs r2, r2, r3 26 mov r10, r0 27 mov r11, r1 28 beq l2 29 subs ip, r1, #0 30 bne l4 31 cmp r3, #0 32 bne l6 33 cmp r6, #0 34 beq l8 35 mov r1, r2 36 bl ___umodsi3 37 mov r1, #0 38 stmia r6, {r0-r1} 39l8: 40 ldr r1, [sp, #0] 41 mov r0, r10 42 b l45 43l6: 44 cmp r6, #0 45 movne r1, #0 46 stmiane r6, {r0-r1} 47 b l2 48l4: 49 ldr r1, [sp, #0] 50 cmp r1, #0 51 bne l12 52 ldr r2, [sp, #4] 53 cmp r2, #0 54 bne l14 55 cmp r6, #0 56 beq l16 57 mov r1, r2 58 mov r0, r11 59 bl ___umodsi3 60 mov r1, #0 61 stmia r6, {r0-r1} 62l16: 63 ldr r1, [sp, #4] 64 mov r0, r11 65l45: 66 bl ___udivsi3 67l46: 68 mov r10, r0 69 mov r11, #0 70 b l10 71l14: 72 subs r1, r0, #0 73 bne l18 74 cmp r6, #0 75 beq l16 76 ldr r1, [sp, #4] 77 mov r0, r11 78 bl ___umodsi3 79 mov r4, r10 80 mov r5, r0 81 stmia r6, {r4-r5} 82 b l16 83l18: 84 sub r3, r2, #1 85 tst r2, r3 86 bne l22 87 cmp r6, #0 88 movne r4, r0 89 andne r5, ip, r3 90 stmiane r6, {r4-r5} 91l24: 92 rsb r3, r2, #0 93 and r3, r2, r3 94 clz r3, r3 95 rsb r3, r3, #31 96 mov r0, ip, lsr r3 97 b l46 98l22: 99 clz r2, r2 100 clz r3, ip 101 rsb r3, r3, r2 102 cmp r3, #30 103 bhi l48 104 rsb r2, r3, #31 105 add lr, r3, #1 106 mov r3, r1, asl r2 107 str r3, [sp, #12] 108 mov r3, r1, lsr lr 109 ldr r0, [sp, #0] 110 mov r5, ip, lsr lr 111 orr r4, r3, ip, asl r2 112 str r0, [sp, #8] 113 b l29 114l12: 115 ldr r3, [sp, #4] 116 cmp r3, #0 117 bne l30 118 sub r3, r1, #1 119 tst r1, r3 120 bne l32 121 cmp r6, #0 122 andne r3, r3, r0 123 movne r2, r3 124 movne r3, #0 125 stmiane r6, {r2-r3} 126l34: 127 cmp r1, #1 128 beq l10 129 rsb r3, r1, #0 130 and r3, r1, r3 131 clz r3, r3 132 rsb r0, r3, #31 133 mov r1, ip, lsr r0 134 rsb r3, r0, #32 135 mov r0, r10, lsr r0 136 orr ip, r0, ip, asl r3 137 str r1, [sp, #12] 138 str ip, [sp, #8] 139 ldrd r10, r11, [sp, #8] 140 b l10 141l32: 142 clz r2, r1 143 clz r3, ip 144 rsb r3, r3, r2 145 rsb r4, r3, #31 146 mov r2, r0, asl r4 147 mvn r1, r3 148 and r2, r2, r1, asr #31 149 add lr, r3, #33 150 str r2, [sp, #8] 151 add r2, r3, #1 152 mov r3, r3, asr #31 153 and r0, r3, r0, asl r1 154 mov r3, r10, lsr r2 155 orr r3, r3, ip, asl r4 156 and r3, r3, r1, asr #31 157 orr r0, r0, r3 158 mov r3, ip, lsr lr 159 str r0, [sp, #12] 160 mov r0, r10, lsr lr 161 and r5, r3, r2, asr #31 162 rsb r3, lr, #31 163 mov r3, r3, asr #31 164 orr r0, r0, ip, asl r1 165 and r3, r3, ip, lsr r2 166 and r0, r0, r2, asr #31 167 orr r4, r3, r0 168 b l29 169l30: 170 clz r2, r3 171 clz r3, ip 172 rsb r3, r3, r2 173 cmp r3, #31 174 bls l37 175l48: 176 cmp r6, #0 177 stmiane r6, {r10-r11} 178 b l2 179l37: 180 rsb r1, r3, #31 181 mov r0, r0, asl r1 182 add lr, r3, #1 183 mov r2, #0 184 str r0, [sp, #12] 185 mov r0, r10, lsr lr 186 str r2, [sp, #8] 187 sub r2, r3, #31 188 and r0, r0, r2, asr #31 189 mov r3, ip, lsr lr 190 orr r4, r0, ip, asl r1 191 and r5, r3, r2, asr #31 192l29: 193 mov ip, #0 194 mov r10, ip 195 b l40 196l41: 197 ldr r1, [sp, #12] 198 ldr r2, [sp, #8] 199 mov r3, r4, lsr #31 200 orr r5, r3, r5, asl #1 201 mov r3, r1, lsr #31 202 orr r4, r3, r4, asl #1 203 mov r3, r2, lsr #31 204 orr r0, r3, r1, asl #1 205 orr r1, ip, r2, asl #1 206 ldmia sp, {r2-r3} 207 str r0, [sp, #12] 208 subs r2, r2, r4 209 sbc r3, r3, r5 210 str r1, [sp, #8] 211 subs r0, r2, #1 212 sbc r1, r3, #0 213 mov r2, r1, asr #31 214 ldmia sp, {r0-r1} 215 mov r3, r2 216 and ip, r2, #1 217 and r3, r3, r1 218 and r2, r2, r0 219 subs r4, r4, r2 220 sbc r5, r5, r3 221 add r10, r10, #1 222l40: 223 cmp r10, lr 224 bne l41 225 ldrd r0, r1, [sp, #8] 226 adds r0, r0, r0 227 adc r1, r1, r1 228 cmp r6, #0 229 orr r10, r0, ip 230 mov r11, r1 231 stmiane r6, {r4-r5} 232 b l10 233l2: 234 mov r10, #0 235 mov r11, #0 236l10: 237 mov r0, r10 238 mov r1, r11 239 sub sp, r7, #20 240 ldmfd sp!, {r10, r11} 241 ldmfd sp!, {r4, r5, r6, r7, pc} 242