| // EABI ldivmod and uldivmod implementation based on libcompiler-rt |
| // |
| // This file is dual licensed under the MIT and the University of Illinois Open |
| // Source Licenses. |
| |
| .syntax unified |
| .align 2 |
| .globl __aeabi_uldivmod |
| .type __aeabi_uldivmod, %function |
| __aeabi_uldivmod: |
| push {r11, lr} |
| sub sp, sp, #16 |
| add r12, sp, #8 |
| str r12, [sp] // third argument to __udivmoddi4 |
| bl __udivmoddi4 |
| ldr r2, [sp, #8] // remainder returned in r2-r3 |
| ldr r3, [sp, #12] |
| add sp, sp, #16 |
| pop {r11, pc} |
| |
| .globl __aeabi_ldivmod |
| .type __aeabi_ldivmod, %function |
| __aeabi_ldivmod: |
| push {r11, lr} |
| sub sp, sp, #16 |
| add r12, sp, #8 |
| str r12, [sp] // third argument to __divmoddi4 |
| bl __divmoddi4 |
| ldr r2, [sp, #8] // remainder returned in r2-r3 |
| ldr r3, [sp, #12] |
| add sp, sp, #16 |
| pop {r11, pc} |