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

📄 memcpy.s

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 S
字号:
/* *  linux/arch/arm/lib/memcpy.S * *  Copyright (C) 1995-1999 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>#include "constants.h"		.text#define ENTER	\		mov	ip,sp	;\		stmfd	sp!,{r4-r9,fp,ip,lr,pc}	;\		sub	fp,ip,#4#define EXIT	\		LOADREGS(ea, fp, {r4 - r9, fp, sp, pc})#define EXITEQ	\		LOADREGS(eqea, fp, {r4 - r9, fp, sp, pc})/* * Prototype: void memcpy(void *to,const void *from,unsigned long n); * ARM3: cant use memcopy here!!! */ENTRY(memcpy)ENTRY(memmove)		ENTER		cmp	r1, r0		bcc	19f		subs	r2, r2, #4		blt	6f		ands	ip, r0, #3		bne	7f		ands	ip, r1, #3		bne	8f1:		subs	r2, r2, #8		blt	5f		subs	r2, r2, #0x14		blt	3f2:		ldmia	r1!,{r3 - r9, ip}		stmia	r0!,{r3 - r9, ip}		subs	r2, r2, #32		bge	2b		cmn	r2, #16		ldmgeia	r1!, {r3 - r6}		stmgeia	r0!, {r3 - r6}		subge	r2, r2, #0x103:		adds	r2, r2, #0x144:		ldmgeia	r1!, {r3 - r5}		stmgeia	r0!, {r3 - r5}		subges	r2, r2, #12		bge	4b5:		adds	r2, r2, #8		blt	6f		subs	r2, r2, #4		ldrlt	r3, [r1], #4		ldmgeia	r1!, {r4, r5}		strlt	r3, [r0], #4		stmgeia	r0!, {r4, r5}		subge	r2, r2, #46:		adds	r2, r2, #4		EXITEQ		cmp	r2, #2		ldrb	r3, [r1], #1		ldrgeb	r4, [r1], #1		ldrgtb	r5, [r1], #1		strb	r3, [r0], #1		strgeb	r4, [r0], #1		strgtb	r5, [r0], #1		EXIT7:		rsb	ip, ip, #4		cmp	ip, #2		ldrb	r3, [r1], #1		ldrgeb	r4, [r1], #1		ldrgtb	r5, [r1], #1		strb	r3, [r0], #1		strgeb	r4, [r0], #1		strgtb	r5, [r0], #1		subs	r2, r2, ip		blt	6b		ands	ip, r1, #3		beq	1b8:		bic	r1, r1, #3		ldr	r7, [r1], #4		cmp	ip, #2		bgt	15f		beq	11f		cmp	r2, #12		blt	10f		sub	r2, r2, #129:		mov	r3, r7, lsr #8		ldmia	r1!, {r4 - r7}		orr	r3, r3, r4, lsl #24		mov	r4, r4, lsr #8		orr	r4, r4, r5, lsl #24		mov	r5, r5, lsr #8		orr	r5, r5, r6, lsl #24		mov	r6, r6, lsr #8		orr	r6, r6, r7, lsl #24		stmia	r0!, {r3 - r6}		subs	r2, r2, #16		bge	9b		adds	r2, r2, #12		blt	100f10:		mov	r3, r7, lsr #8		ldr	r7, [r1], #4		subs	r2, r2, #4		orr	r3, r3, r7, lsl #24		str	r3, [r0], #4		bge	10b100:		sub	r1, r1, #3		b	6b11:		cmp	r2, #12		blt	13f		/* */		sub	r2, r2, #1212:		mov	r3, r7, lsr #16		ldmia	r1!, {r4 - r7}		orr	r3, r3, r4, lsl #16		mov	r4, r4, lsr #16		orr	r4, r4, r5, lsl #16		mov	r5, r5, lsr #16		orr	r5, r5, r6, lsl #16		mov	r6, r6, lsr #16		orr	r6, r6, r7,LSL#16		stmia	r0!, {r3 - r6}		subs	r2, r2, #16		bge	12b		adds	r2, r2, #12		blt	14f13:		mov	r3, r7, lsr #16		ldr	r7, [r1], #4		subs	r2, r2, #4		orr	r3, r3, r7, lsl #16		str	r3, [r0], #4		bge	13b14:		sub	r1, r1, #2		b	6b15:		cmp	r2, #12		blt	17f		sub	r2, r2, #1216:		mov	r3, r7, lsr #24		ldmia	r1!,{r4 - r7}		orr	r3, r3, r4, lsl #8		mov	r4, r4, lsr #24		orr	r4, r4, r5, lsl #8		mov	r5, r5, lsr #24		orr	r5, r5, r6, lsl #8		mov	r6, r6, lsr #24		orr	r6, r6, r7, lsl #8		stmia	r0!, {r3 - r6}		subs	r2, r2, #16		bge	16b		adds	r2, r2, #12		blt	18f17:		mov	r3, r7, lsr #24		ldr	r7, [r1], #4		subs	r2, r2, #4		orr	r3, r3, r7, lsl#8		str	r3, [r0], #4		bge	17b18:		sub	r1, r1, #1		b	6b19:		add	r1, r1, r2		add	r0, r0, r2		subs	r2, r2, #4		blt	24f		ands	ip, r0, #3		bne	25f		ands	ip, r1, #3		bne	26f20:		subs	r2, r2, #8		blt	23f		subs	r2, r2, #0x14		blt	22f21:		ldmdb	r1!, {r3 - r9, ip}		stmdb	r0!, {r3 - r9, ip}		subs	r2, r2, #32		bge	21b22:		cmn	r2, #16		ldmgedb	r1!, {r3 - r6}		stmgedb	r0!, {r3 - r6}		subge	r2, r2, #16		adds	r2, r2, #20		ldmgedb	r1!, {r3 - r5}		stmgedb	r0!, {r3 - r5}		subge	r2, r2, #1223:		adds	r2, r2, #8		blt	24f		subs	r2, r2, #4		ldrlt	r3, [r1, #-4]!		ldmgedb	r1!, {r4, r5}		strlt	r3, [r0, #-4]!		stmgedb	r0!, {r4, r5}		subge	r2, r2, #424:		adds	r2, r2, #4		EXITEQ		cmp	r2, #2		ldrb	r3, [r1, #-1]!		ldrgeb	r4, [r1, #-1]!		ldrgtb	r5, [r1, #-1]!		strb	r3, [r0, #-1]!		strgeb	r4, [r0, #-1]!		strgtb	r5, [r0, #-1]!		EXIT25:		cmp	ip, #2		ldrb	r3, [r1, #-1]!		ldrgeb	r4, [r1, #-1]!		ldrgtb	r5, [r1, #-1]!		strb	r3, [r0, #-1]!		strgeb	r4, [r0, #-1]!		strgtb	r5, [r0, #-1]!		subs	r2, r2, ip		blt	24b		ands	ip, r1, #3		beq	20b26:		bic	r1, r1, #3		ldr	r3, [r1], #0		cmp	ip, #2		blt	34f		beq	30f		cmp	r2, #12		blt	28f		sub	r2, r2, #1227:		mov	r7, r3, lsl #8		ldmdb	r1!, {r3, r4, r5, r6}		orr	r7, r7, r6, lsr #24		mov	r6, r6, lsl #8		orr	r6, r6, r5, lsr #24		mov	r5, r5, lsl #8		orr	r5, r5, r4, lsr #24		mov	r4, r4, lsl #8		orr	r4, r4, r3, lsr #24		stmdb	r0!, {r4, r5, r6, r7}		subs	r2, r2, #16		bge	27b		adds	r2, r2, #12		blt	29f28:		mov	ip, r3, lsl #8		ldr	r3, [r1, #-4]!		subs	r2, r2, #4		orr	ip, ip, r3, lsr #24		str	ip, [r0, #-4]!		bge	28b29:		add	r1, r1, #3		b	24b30:		cmp	r2, #12		blt	32f		sub	r2, r2, #1231:		mov	r7, r3, lsl #16		ldmdb	r1!, {r3, r4, r5, r6}		orr	r7, r7, r6, lsr #16		mov	r6, r6, lsl #16		orr	r6, r6, r5, lsr #16		mov	r5, r5, lsl #16		orr	r5, r5, r4, lsr #16		mov	r4, r4, lsl #16		orr	r4, r4, r3, lsr #16		stmdb	r0!, {r4, r5, r6, r7}		subs	r2, r2, #16		bge	31b		adds	r2, r2, #12		blt	33f32:		mov	ip, r3, lsl #16		ldr	r3, [r1, #-4]!		subs	r2, r2, #4		orr	ip, ip, r3, lsr #16		str	ip, [r0, #-4]!		bge	32b33:		add	r1, r1, #2		b	24b34:		cmp	r2, #12		blt	36f		sub	r2, r2, #1235:		mov	r7, r3, lsl #24		ldmdb	r1!, {r3, r4, r5, r6}		orr	r7, r7, r6, lsr #8		mov	r6, r6, lsl #24		orr	r6, r6, r5, lsr #8		mov	r5, r5, lsl #24		orr	r5, r5, r4, lsr #8		mov	r4, r4, lsl #24		orr	r4, r4, r3, lsr #8		stmdb	r0!, {r4, r5, r6, r7}		subs	r2, r2, #16		bge	35b		adds	r2, r2, #12		blt	37f36:		mov	ip, r3, lsl #24		ldr	r3, [r1, #-4]!		subs	r2, r2, #4		orr	ip, ip, r3, lsr #8		str	ip, [r0, #-4]!		bge	36b37:		add	r1, r1, #1		b	24b		.align

⌨️ 快捷键说明

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