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

📄 memmove.s

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 S
字号:
#define	BDNZ	BC	16,0,	TEXT	memcpy(SB), $0	BR	move	TEXT	memmove(SB), $0move:/* * performance: * (tba) */	MOVW	R3, s1+0(FP)	MOVW	n+8(FP), R9		/* R9 is count */	MOVW	R3, R10			/* R10 is to-pointer */	CMP	R9, $0	BEQ	ret	BLT	trap	MOVW	s2+4(FP), R11		/* R11 is from-pointer *//* * if no more than 16 bytes, just use one lsw/stsw */	CMP	R9, $16	BLE	fout	ADD	R9,R11, R13		/* R13 is end from-pointer */	ADD	R9,R10, R12		/* R12 is end to-pointer *//* * easiest test is copy backwards if * destination string has higher mem address */	CMPU	R10, R11	BGT	back/* * test if both pointers * are similarly word aligned */	XOR	R10,R11, R7	ANDCC	$3,R7	BNE	fbad/* * move a few bytes to align pointers */	ANDCC	$3,R10,R7	BEQ	f2	SUBC	R7, $4, R7	SUB	R7, R9	MOVW	R7, XER	LSW	(R11), R16	ADD	R7, R11	STSW	R16, (R10)	ADD	R7, R10/* * turn R14 into doubleword count * copy 16 bytes at a time while there's room. */f2:	SRAWCC	$4, R9, R14	BLE	fout	MOVW	R14, CTR	SUB	$4, R11	SUB	$4, R10f3:	MOVWU	4(R11), R16	MOVWU	R16, 4(R10)	MOVWU	4(R11), R17	MOVWU	R17, 4(R10)	MOVWU	4(R11), R16	MOVWU	R16, 4(R10)	MOVWU	4(R11), R17	MOVWU	R17, 4(R10)	BDNZ	f3	RLWNMCC	$0, R9, $15, R9	/* residue */	BEQ	ret	ADD	$4, R11	ADD	$4, R10/* * move up to 16 bytes through R16 .. R19; aligned and unaligned */fout:	MOVW	R9, XER	LSW	(R11), R16	STSW	R16, (R10)	BR	ret/* * loop for unaligned copy, then copy up to 15 remaining bytes */fbad:	SRAWCC	$4, R9, R14	BLE	f6	MOVW	R14, CTRf5:	LSW	(R11), $16, R16	ADD	$16, R11	STSW	R16, $16, (R10)	ADD	$16, R10	BDNZ	f5	RLWNMCC	$0, R9, $15, R9	/* residue */	BEQ	retf6:	MOVW	R9, XER	LSW	(R11), R16	STSW	R16, (R10)	BR	ret/* * whole thing repeated for backwards */back:	CMP	R9, $4	BLT	bout	XOR	R12,R13, R7	ANDCC	$3,R7	BNE	boutb1:	ANDCC	$3,R13, R7	BEQ	b2	MOVBZU	-1(R13), R16	MOVBZU	R16, -1(R12)	SUB	$1, R9	BR	b1b2:	SRAWCC	$4, R9, R14	BLE	b4	MOVW	R14, CTRb3:	MOVWU	-4(R13), R16	MOVWU	R16, -4(R12)	MOVWU	-4(R13), R17	MOVWU	R17, -4(R12)	MOVWU	-4(R13), R16	MOVWU	R16, -4(R12)	MOVWU	-4(R13), R17	MOVWU	R17, -4(R12)	BDNZ	b3	RLWNMCC	$0, R9, $15, R9	/* residue */	BEQ	retb4:	SRAWCC	$2, R9, R14	BLE	bout	MOVW	R14, CTRb5:	MOVWU	-4(R13), R16	MOVWU	R16, -4(R12)	BDNZ	b5	RLWNMCC	$0, R9, $3, R9	/* residue */	BEQ	retbout:	CMPU	R13, R11	BLE	ret	MOVBZU	-1(R13), R16	MOVBZU	R16, -1(R12)	BR	bouttrap:	MOVW	$0, R0	MOVW	0(R0), R0ret:	MOVW	s1+0(FP), R3	RETURN

⌨️ 快捷键说明

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