| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * unsigned long __xdiv64_32(unsigned long long n, unsigned long d); |
| */ |
| |
| #include <linux/linkage.h> |
| |
| .text |
| ENTRY(__xdiv64_32) |
| #ifdef CONFIG_CPU_LITTLE_ENDIAN |
| mov r4, r0 |
| mov r5, r1 |
| #else |
| mov r4, r1 |
| mov r5, r0 |
| #endif |
| cmp/hs r6, r1 |
| bf.s 1f |
| mov #0, r2 |
| |
| mov r1, r2 |
| mov #0, r3 |
| div0u |
| .rept 32 |
| rotcl r2 |
| div1 r6, r3 |
| .endr |
| rotcl r2 |
| mul.l r6, r2 |
| sts macl, r3 |
| sub r3, r1 |
| 1: |
| div0u |
| .rept 32 |
| rotcl r0 |
| div1 r6, r1 |
| .endr |
| #ifdef CONFIG_CPU_LITTLE_ENDIAN |
| mov r2, r1 |
| rts |
| rotcl r0 |
| #else |
| rotcl r0 |
| mov r0, r1 |
| rts |
| mov r2, r0 |
| #endif |