| /* | |
| * 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 |