#------------------------------------------------------------------------------ # # Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at # http://opensource.org/licenses/bsd-license.php # # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. # #------------------------------------------------------------------------------ #include .syntax unified ASM_FUNC(__udivmoddi4) stmfd sp!, {r4, r5, r6, r7, lr} add r7, sp, #12 stmfd sp!, {r10, r11} sub sp, sp, #20 stmia sp, {r2-r3} ldr r6, [sp, #48] orrs r2, r2, r3 mov r10, r0 mov r11, r1 beq L2 subs ip, r1, #0 bne L4 cmp r3, #0 bne L6 cmp r6, #0 beq L8 mov r1, r2 bl ASM_PFX(__umodsi3) mov r1, #0 stmia r6, {r0-r1} L8: ldr r1, [sp, #0] mov r0, r10 b L45 L6: cmp r6, #0 movne r1, #0 stmiane r6, {r0-r1} b L2 L4: ldr r1, [sp, #0] cmp r1, #0 bne L12 ldr r2, [sp, #4] cmp r2, #0 bne L14 cmp r6, #0 beq L16 mov r1, r2 mov r0, r11 bl ASM_PFX(__umodsi3) mov r1, #0 stmia r6, {r0-r1} L16: ldr r1, [sp, #4] mov r0, r11 L45: bl ASM_PFX(__udivsi3) L46: mov r10, r0 mov r11, #0 b L10 L14: subs r1, r0, #0 bne L18 cmp r6, #0 beq L16 ldr r1, [sp, #4] mov r0, r11 bl ASM_PFX(__umodsi3) mov r4, r10 mov r5, r0 stmia r6, {r4-r5} b L16 L18: sub r3, r2, #1 tst r2, r3 bne L22 cmp r6, #0 movne r4, r0 andne r5, ip, r3 stmiane r6, {r4-r5} L24: rsb r3, r2, #0 and r3, r2, r3 clz r3, r3 rsb r3, r3, #31 mov r0, ip, lsr r3 b L46 L22: clz r2, r2 clz r3, ip rsb r3, r3, r2 cmp r3, #30 bhi L48 rsb r2, r3, #31 add lr, r3, #1 mov r3, r1, asl r2 str r3, [sp, #12] mov r3, r1, lsr lr ldr r0, [sp, #0] mov r5, ip, lsr lr orr r4, r3, ip, asl r2 str r0, [sp, #8] b L29 L12: ldr r3, [sp, #4] cmp r3, #0 bne L30 sub r3, r1, #1 tst r1, r3 bne L32 cmp r6, #0 andne r3, r3, r0 movne r2, r3 movne r3, #0 stmiane r6, {r2-r3} L34: cmp r1, #1 beq L10 rsb r3, r1, #0 and r3, r1, r3 clz r3, r3 rsb r0, r3, #31 mov r1, ip, lsr r0 rsb r3, r0, #32 mov r0, r10, lsr r0 orr ip, r0, ip, asl r3 str r1, [sp, #12] str ip, [sp, #8] ldrd r10, [sp, #8] b L10 L32: clz r2, r1 clz r3, ip rsb r3, r3, r2 rsb r4, r3, #31 mov r2, r0, asl r4 mvn r1, r3 and r2, r2, r1, asr #31 add lr, r3, #33 str r2, [sp, #8] add r2, r3, #1 mov r3, r3, asr #31 and r0, r3, r0, asl r1 mov r3, r10, lsr r2 orr r3, r3, ip, asl r4 and r3, r3, r1, asr #31 orr r0, r0, r3 mov r3, ip, lsr lr str r0, [sp, #12] mov r0, r10, lsr lr and r5, r3, r2, asr #31 rsb r3, lr, #31 mov r3, r3, asr #31 orr r0, r0, ip, asl r1 and r3, r3, ip, lsr r2 and r0, r0, r2, asr #31 orr r4, r3, r0 b L29 L30: clz r2, r3 clz r3, ip rsb r3, r3, r2 cmp r3, #31 bls L37 L48: cmp r6, #0 stmiane r6, {r10-r11} b L2 L37: rsb r1, r3, #31 mov r0, r0, asl r1 add lr, r3, #1 mov r2, #0 str r0, [sp, #12] mov r0, r10, lsr lr str r2, [sp, #8] sub r2, r3, #31 and r0, r0, r2, asr #31 mov r3, ip, lsr lr orr r4, r0, ip, asl r1 and r5, r3, r2, asr #31 L29: mov ip, #0 mov r10, ip b L40 L41: ldr r1, [sp, #12] ldr r2, [sp, #8] mov r3, r4, lsr #31 orr r5, r3, r5, asl #1 mov r3, r1, lsr #31 orr r4, r3, r4, asl #1 mov r3, r2, lsr #31 orr r0, r3, r1, asl #1 orr r1, ip, r2, asl #1 ldmia sp, {r2-r3} str r0, [sp, #12] subs r2, r2, r4 sbc r3, r3, r5 str r1, [sp, #8] subs r0, r2, #1 sbc r1, r3, #0 mov r2, r1, asr #31 ldmia sp, {r0-r1} mov r3, r2 and ip, r2, #1 and r3, r3, r1 and r2, r2, r0 subs r4, r4, r2 sbc r5, r5, r3 add r10, r10, #1 L40: cmp r10, lr bne L41 ldrd r0, [sp, #8] adds r0, r0, r0 adc r1, r1, r1 cmp r6, #0 orr r10, r0, ip mov r11, r1 stmiane r6, {r4-r5} b L10 L2: mov r10, #0 mov r11, #0 L10: mov r0, r10 mov r1, r11 sub sp, r7, #20 ldmfd sp!, {r10, r11} ldmfd sp!, {r4, r5, r6, r7, pc}