⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memset.s

📁 linux-2.6.15.6
💻 S
字号:
/* *  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 * *//* $Id$ */#include <linux/config.h>	.text	.global	memset#ifdef CONFIG_ISA_DUAL_ISSUE	.align 4memset:	mv      r4, r0		    ||	cmpz	r2	jc	r14	cmpui	r2, #16	bnc	qword_align_check	cmpui	r2, #4	bc	byte_setword_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_setword_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, #-4word_set_loop:	st	r1, @+r4	    ||	addi	r2, #-4	bgtz	r2, word_set_loop	bnez	r2, byte_set_wrap	st	r1, @+r4	jmp	r14qword_align_check:			/* len >= 16 */	and3	r3, r4, #15	bnez	r3, word_align_checkqword_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, #16qword_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	r14set_remainder:	cmpui	r2, #4	bc	byte_set_wrap1	addi	r2, #-4	bra	word_set_loopbyte_set_wrap:	addi	r2, #4	cmpz	r2	jc	r14byte_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#endifend_memset:	jmp	r14#else /* not CONFIG_ISA_DUAL_ISSUE */	.align 4memset:	mv      r4, r0	beqz	r2, end_memset	cmpui	r2, #16	bnc	qword_align_check	cmpui	r2, #4	bc	byte_setword_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_setword_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, #-4word_set_loop:	st	r1, @+r4	addi	r2, #-4	bgtz    r2, word_set_loop	bnez	r2, byte_set_wrap	st	r1, @+r4	jmp	r14qword_align_check:			/* len >= 16 */	and3	r3, r4, #15	bnez	r3, word_align_checkqword_set:	and3	r1, r1, #0x00ff		/* r1: abababab <-- ??????ab */	sll3	r3, r1, #8	or	r1, r3	sll3	r3, r1, #16	or	r1, r3	addi	r4, #-4qword_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	r14set_remainder:	cmpui	r2, #4	bc	byte_set_wrap1	addi	r2, #-4	bra	word_set_loopbyte_set_wrap:	addi	r2, #4	beqz	r2, end_memsetbyte_set_wrap1:	addi	r4, #4byte_set:	addi	r2, #-1	stb	r1, @r4	addi	r4, #1	bnez	r2, byte_setend_memset:	jmp	r14#endif /* not CONFIG_ISA_DUAL_ISSUE */	.end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -