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

📄 memset.s

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 S
字号:
/* *  linux/arch/arm/lib/memset.S * *  Copyright (C) 1995-2000 Russell King * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * *  ASM optimised string functions */#include <linux/linkage.h>#include <asm/assembler.h>	.text	.align	5	.word	01:	subs	r2, r2, #4		@ 1 do we have enough	blt	5f			@ 1 bytes to align with?	cmp	r3, #2			@ 1	strltb	r1, [r0], #1		@ 1	strleb	r1, [r0], #1		@ 1	strb	r1, [r0], #1		@ 1	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3))/* * The pointer is now aligned and the length is adjusted.  Try doing the * memzero again. */ENTRY(memset)	ands	r3, r0, #3		@ 1 unaligned?	bne	1b			@ 1/* * we know that the pointer in r0 is aligned to a word boundary. */	orr	r1, r1, r1, lsl #8	orr	r1, r1, r1, lsl #16	mov	r3, r1	cmp	r2, #16	blt	4f/* * We need an extra register for this loop - save the return address and * use the LR */	str	lr, [sp, #-4]!	mov	ip, r1	mov	lr, r12:	subs	r2, r2, #64	stmgeia	r0!, {r1, r3, ip, lr}	@ 64 bytes at a time.	stmgeia	r0!, {r1, r3, ip, lr}	stmgeia	r0!, {r1, r3, ip, lr}	stmgeia	r0!, {r1, r3, ip, lr}	bgt	2b	LOADREGS(eqfd, sp!, {pc})	@ Now <64 bytes to go./* * No need to correct the count; we're only testing bits from now on */	tst	r2, #32	stmneia	r0!, {r1, r3, ip, lr}	stmneia	r0!, {r1, r3, ip, lr}	tst	r2, #16	stmneia	r0!, {r1, r3, ip, lr}	ldr	lr, [sp], #44:	tst	r2, #8	stmneia	r0!, {r1, r3}	tst	r2, #4	strne	r1, [r0], #4/* * When we get here, we've got less than 4 bytes to zero.  We * may have an unaligned pointer as well. */5:	tst	r2, #2	strneb	r1, [r0], #1	strneb	r1, [r0], #1	tst	r2, #1	strneb	r1, [r0], #1	RETINSTR(mov,pc,lr)

⌨️ 快捷键说明

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