47 lines
		
	
	
		
			547 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			547 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /*	
 | |
|  * 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
 |