root/arch/sh/lib/div64.S
/* 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