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

📄 memmove.s

📁 著名操作系统Plan 9的第三版的部分核心源代码。现在很难找到了。Plan 9是bell实验室开发的Unix后继者。
💻 S
字号:
#define QUAD	8#define ALIGN	64#define BLOCK	64TEXT memmove(SB), $0_memmove:	MOVL	from+4(FP), R7	MOVL	n+8(FP), R10	MOVQ	R0, R6	CMPUGE	R7, R0, R5	BNE	R5, _forward	MOVQ	R6, R8			/* end to address */	ADDL	R10, R6, R6		/* to+n */	ADDL	R10, R7, R7		/* from+n */	CMPUGE	$ALIGN, R10, R1		/* need at least ALIGN bytes */	BNE	R1, _b1tail_balign:	AND	$(ALIGN-1), R6, R1	BEQ	R1, _baligned	MOVBU	-1(R7), R2	ADDL	$-1, R6, R6	MOVB	R2, (R6)	ADDL	$-1, R7, R7	JMP	_balign	_baligned:	AND	$(QUAD-1), R7, R1	/* is the source quad-aligned */	BNE	R1, _bunaligned	ADDL	$(BLOCK-1), R8, R9_bblock:	CMPUGE	R9, R6, R1	BNE	R1, _b8tail	MOVQ	-64(R7), R22	MOVQ	-56(R7), R23	MOVQ	-48(R7), R24	MOVQ	-40(R7), R25	MOVQ	-32(R7), R2	MOVQ	-24(R7), R3	MOVQ	-16(R7), R4	MOVQ	-8(R7), R5	SUBL	$64, R6, R6	SUBL	$64, R7, R7	MOVQ	R22, (R6)	MOVQ	R23, 8(R6)	MOVQ	R24, 16(R6)	MOVQ	R25, 24(R6)	MOVQ	R2, 32(R6)	MOVQ	R3, 40(R6)	MOVQ	R4, 48(R6)	MOVQ	R5, 56(R6)	JMP	_bblock_b8tail:	ADDL	$(QUAD-1), R8, R9_b8block:	CMPUGE	R9, R6, R1	BNE	R1, _b1tail	MOVQ	-8(R7), R2	SUBL	$8, R6	MOVQ	R2, (R6)	SUBL	$8, R7	JMP	_b8block_b1tail:	CMPUGE	R8, R6, R1	BNE	R1, _ret	MOVBU	-1(R7), R2	SUBL	$1, R6, R6	MOVB	R2, (R6)	SUBL	$1, R7, R7	JMP	_b1tail_ret:	RET_bunaligned:	ADDL	$(16-1), R8, R9_bu8block:	CMPUGE	R9, R6, R1	BNE	R1, _b1tail	MOVQU	-16(R7), R4	MOVQU	-8(R7), R3	MOVQU	(R7), R2	SUBL	$16, R6	EXTQH	R7, R2, R2	EXTQL	R7, R3, R5	OR	R5, R2, R11	EXTQH	R7, R3, R3	EXTQL	R7, R4, R4	OR	R3, R4, R13	MOVQ	R11, 8(R6)	MOVQ	R13, (R6)	SUBL	$16, R7	JMP	_bu8block_forward:	ADDL	R10, R6, R8		/* end to address */	CMPUGE	$ALIGN, R10, R1		/* need at least ALIGN bytes */	BNE	R1, _f1tail_falign:	AND	$(ALIGN-1), R6, R1	BEQ	R1, _faligned	MOVBU	(R7), R2	ADDL	$1, R6, R6	ADDL	$1, R7, R7	MOVB	R2, -1(R6)	JMP	_falign_faligned:	AND	$(QUAD-1), R7, R1	/* is the source quad-aligned */	BNE	R1, _funaligned	SUBL	$(BLOCK-1), R8, R9_fblock:	CMPUGT	R9, R6, R1	BEQ	R1, _f8tail	MOVQ	(R7), R2	MOVQ	8(R7), R3	MOVQ	16(R7), R4	MOVQ	24(R7), R5	MOVQ	32(R7), R22	MOVQ	40(R7), R23	MOVQ	48(R7), R24	MOVQ	56(R7), R25	ADDL	$64, R6, R6	ADDL	$64, R7, R7	MOVQ	R2, -64(R6)	MOVQ	R3, -56(R6)	MOVQ	R4, -48(R6)	MOVQ	R5, -40(R6)	MOVQ	R22, -32(R6)	MOVQ	R23, -24(R6)	MOVQ	R24, -16(R6)	MOVQ	R25, -8(R6)	JMP	_fblock_f8tail:	SUBL	$(QUAD-1), R8, R9_f8block:	CMPUGT	R9, R6, R1	BEQ	R1, _f1tail	MOVQ	(R7), R2	ADDL	$8, R6	ADDL	$8, R7	MOVQ	R2, -8(R6)	JMP	_f8block_f1tail:	CMPUGT	R8, R6, R1	BEQ	R1, _fret	MOVBU	(R7), R2	ADDL	$1, R6, R6	ADDL	$1, R7, R7	MOVB	R2, -1(R6)	JMP	_f1tail_fret:	RET_funaligned:	SUBL	$(16-1), R8, R9_fu8block:	CMPUGT	R9, R6, R1	BEQ	R1, _f1tail	MOVQU	(R7), R2	MOVQU	8(R7), R3	MOVQU	16(R7), R4	EXTQL	R7, R2, R2	EXTQH	R7, R3, R5	OR	R5, R2, R11	EXTQL	R7, R3, R3	MOVQ	R11, (R6)	EXTQH	R7, R4, R4	OR	R3, R4, R11	MOVQ	R11, 8(R6)	ADDL	$16, R6	ADDL	$16, R7	JMP	_fu8blockTEXT	memcpy(SB), $0	JMP	_memmove

⌨️ 快捷键说明

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