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