 fabb626ad6
			
		
	
	
	fabb626ad6
	
	
	
		
			
			Cosmetic updates and trivial fixes of m32r arch-dependent files. - Remove RCS ID strings and trailing white lines - Other misc. cosmetic updates Signed-off-by: Hirokazu Takata <takata@linux-m32r.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
			
				
	
	
		
			178 lines
		
	
	
	
		
			3.1 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
	
		
			3.1 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /*
 | |
|  *  linux/arch/m32r/lib/memset.S
 | |
|  *
 | |
|  *  Copyright (C) 2001,2002  Hiroyuki Kondo, and Hirokazu Takata
 | |
|  *  Copyright (C) 2004  Hirokazu Takata
 | |
|  *
 | |
|  *  void *memset(void *dst, int val, int len);
 | |
|  *
 | |
|  *        dst: r0
 | |
|  *        val: r1
 | |
|  *        len: r2
 | |
|  *        ret: r0
 | |
|  *
 | |
|  */
 | |
| 
 | |
| 	.text
 | |
| 	.global	memset
 | |
| 
 | |
| #ifdef CONFIG_ISA_DUAL_ISSUE
 | |
| 
 | |
| 	.align 4
 | |
| memset:
 | |
| 	mv      r4, r0		    ||	cmpz	r2
 | |
| 	jc	r14
 | |
| 	cmpui	r2, #16
 | |
| 	bnc	qword_align_check
 | |
| 	cmpui	r2, #4
 | |
| 	bc	byte_set
 | |
| word_align_check:			/* len >= 4 */
 | |
| 	and3	r3, r4, #3
 | |
| 	beqz	r3, word_set
 | |
| 	addi	r3, #-4
 | |
| 	neg	r3, r3			/* r3 = -(r3 - 4) */
 | |
| align_word:
 | |
| 	stb	r1, @r4		    ||	addi	r4, #1
 | |
| 	addi	r2, #-1		    ||	addi	r3, #-1
 | |
| 	bnez	r3, align_word
 | |
| 	cmpui	r2, #4
 | |
| 	bc	byte_set
 | |
| word_set:
 | |
| 	and3	r1, r1, #0x00ff		/* r1: abababab <-- ??????ab */
 | |
| 	sll3	r3, r1, #8
 | |
| 	or	r1, r3		    ||	addi	r4, #-4
 | |
| 	sll3	r3, r1, #16
 | |
| 	or	r1, r3		    ||	addi	r2, #-4
 | |
| word_set_loop:
 | |
| 	st	r1, @+r4	    ||	addi	r2, #-4
 | |
| 	bgtz	r2, word_set_loop
 | |
| 	bnez	r2, byte_set_wrap
 | |
| 	st	r1, @+r4
 | |
| 	jmp	r14
 | |
| 
 | |
| qword_align_check:			/* len >= 16 */
 | |
| 	and3	r3, r4, #15
 | |
| 	bnez	r3, word_align_check
 | |
| qword_set:
 | |
| 	and3	r1, r1, #0x00ff		/* r1: abababab <-- ??????ab */
 | |
| 	sll3	r3, r1, #8
 | |
| 	or	r1, r3		    ||	addi	r4, #-4
 | |
| 	sll3	r3, r1, #16
 | |
| 	or	r1, r3		    ||	ldi	r5, #16
 | |
| qword_set_loop:
 | |
| 	ld	r3, @(4,r4)		/* cache line allocate */
 | |
| 	st	r1, @+r4	    ||	addi	r2, #-16
 | |
| 	st	r1, @+r4	    ||	cmpu	r2, r5
 | |
| 	st	r1, @+r4
 | |
| 	st	r1, @+r4
 | |
| 	bnc	qword_set_loop	    ||  cmpz	r2
 | |
| 	jc	r14
 | |
| set_remainder:
 | |
| 	cmpui	r2, #4
 | |
| 	bc	byte_set_wrap1
 | |
| 	addi	r2, #-4
 | |
| 	bra	word_set_loop
 | |
| 
 | |
| byte_set_wrap:
 | |
| 	addi	r2, #4
 | |
| 	cmpz	r2
 | |
| 	jc	r14
 | |
| byte_set_wrap1:
 | |
| 	addi	r4, #4
 | |
| #if defined(CONFIG_ISA_M32R2)
 | |
| byte_set:
 | |
| 	addi	r2, #-1		    ||	stb	r1, @r4+
 | |
| 	bnez	r2, byte_set
 | |
| #elif defined(CONFIG_ISA_M32R)
 | |
| byte_set:
 | |
| 	addi	r2, #-1		    ||	stb	r1, @r4
 | |
| 	addi	r4, #1
 | |
| 	bnez	r2, byte_set
 | |
| #else
 | |
| #error unknown isa configuration
 | |
| #endif
 | |
| end_memset:
 | |
| 	jmp	r14
 | |
| 
 | |
| #else /* not CONFIG_ISA_DUAL_ISSUE */
 | |
| 
 | |
| 	.align 4
 | |
| memset:
 | |
| 	mv      r4, r0
 | |
| 	beqz	r2, end_memset
 | |
| 	cmpui	r2, #16
 | |
| 	bnc	qword_align_check
 | |
| 	cmpui	r2, #4
 | |
| 	bc	byte_set
 | |
| word_align_check:			/* len >= 4 */
 | |
| 	and3	r3, r4, #3
 | |
| 	beqz	r3, word_set
 | |
| 	addi	r3, #-4
 | |
| 	neg	r3, r3			/* r3 = -(r3 - 4) */
 | |
| align_word:
 | |
| 	stb	r1, @r4
 | |
| 	addi	r4, #1
 | |
| 	addi	r2, #-1
 | |
| 	addi	r3, #-1
 | |
| 	bnez	r3, align_word
 | |
| 	cmpui	r2, #4
 | |
| 	bc	byte_set
 | |
| word_set:
 | |
| 	and3	r1, r1, #0x00ff		/* r1: abababab <-- ??????ab */
 | |
| 	sll3	r3, r1, #8
 | |
| 	or	r1, r3
 | |
| 	sll3	r3, r1, #16
 | |
| 	or	r1, r3
 | |
| 	addi	r2, #-4
 | |
| 	addi	r4, #-4
 | |
| word_set_loop:
 | |
| 	st	r1, @+r4
 | |
| 	addi	r2, #-4
 | |
| 	bgtz    r2, word_set_loop
 | |
| 	bnez	r2, byte_set_wrap
 | |
| 	st	r1, @+r4
 | |
| 	jmp	r14
 | |
| 
 | |
| qword_align_check:			/* len >= 16 */
 | |
| 	and3	r3, r4, #15
 | |
| 	bnez	r3, word_align_check
 | |
| qword_set:
 | |
| 	and3	r1, r1, #0x00ff		/* r1: abababab <-- ??????ab */
 | |
| 	sll3	r3, r1, #8
 | |
| 	or	r1, r3
 | |
| 	sll3	r3, r1, #16
 | |
| 	or	r1, r3
 | |
| 	addi	r4, #-4
 | |
| qword_set_loop:
 | |
| 	ld	r3, @(4,r4)		/* cache line allocate */
 | |
| 	addi	r2, #-16
 | |
| 	st	r1, @+r4
 | |
| 	st	r1, @+r4
 | |
| 	cmpui	r2, #16
 | |
| 	st	r1, @+r4
 | |
| 	st	r1, @+r4
 | |
| 	bnc	qword_set_loop
 | |
| 	bnez	r2, set_remainder
 | |
| 	jmp	r14
 | |
| set_remainder:
 | |
| 	cmpui	r2, #4
 | |
| 	bc	byte_set_wrap1
 | |
| 	addi	r2, #-4
 | |
| 	bra	word_set_loop
 | |
| 
 | |
| byte_set_wrap:
 | |
| 	addi	r2, #4
 | |
| 	beqz	r2, end_memset
 | |
| byte_set_wrap1:
 | |
| 	addi	r4, #4
 | |
| byte_set:
 | |
| 	addi	r2, #-1
 | |
| 	stb	r1, @r4
 | |
| 	addi	r4, #1
 | |
| 	bnez	r2, byte_set
 | |
| end_memset:
 | |
| 	jmp	r14
 | |
| 
 | |
| #endif /* not CONFIG_ISA_DUAL_ISSUE */
 | |
| 
 | |
| 	.end
 |