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