genmemcpy.s

来自「linux 内核源代码」· S 代码 · 共 122 行

S
122
字号
/* GENmemcpy.S: Generic sparc64 memcpy. * * Copyright (C) 2007 David S. Miller (davem@davemloft.net) */#ifdef __KERNEL__#define GLOBAL_SPARE	%g7#else#define GLOBAL_SPARE	%g5#endif#ifndef EX_LD#define EX_LD(x)	x#endif#ifndef EX_ST#define EX_ST(x)	x#endif#ifndef EX_RETVAL#define EX_RETVAL(x)	x#endif#ifndef LOAD#define LOAD(type,addr,dest)	type [addr], dest#endif#ifndef STORE#define STORE(type,src,addr)	type src, [addr]#endif#ifndef FUNC_NAME#define FUNC_NAME	GENmemcpy#endif#ifndef PREAMBLE#define PREAMBLE#endif#ifndef XCC#define XCC xcc#endif	.register	%g2,#scratch	.register	%g3,#scratch	.text	.align		64	.globl	FUNC_NAME	.type	FUNC_NAME,#functionFUNC_NAME:	/* %o0=dst, %o1=src, %o2=len */	srlx		%o2, 31, %g2	cmp		%g2, 0	tne		%XCC, 5	PREAMBLE	mov		%o0, GLOBAL_SPARE	cmp		%o2, 0	be,pn		%XCC, 85f	 or		%o0, %o1, %o3	cmp		%o2, 16	blu,a,pn	%XCC, 80f	 or		%o3, %o2, %o3	xor		%o0, %o1, %o4	andcc		%o4, 0x7, %g0	bne,a,pn	%XCC, 90f	 sub		%o0, %o1, %o3	and		%o0, 0x7, %o4	sub		%o4, 0x8, %o4	sub		%g0, %o4, %o4	sub		%o2, %o4, %o21:	subcc		%o4, 1, %o4	EX_LD(LOAD(ldub, %o1, %g1))	EX_ST(STORE(stb, %g1, %o0))	add		%o1, 1, %o1	bne,pt		%XCC, 1b	add		%o0, 1, %o0	andn		%o2, 0x7, %g1	sub		%o2, %g1, %o21:	subcc		%g1, 0x8, %g1	EX_LD(LOAD(ldx, %o1, %g2))	EX_ST(STORE(stx, %g2, %o0))	add		%o1, 0x8, %o1	bne,pt		%XCC, 1b	 add		%o0, 0x8, %o0	brz,pt		%o2, 85f	 sub		%o0, %o1, %o3	ba,a,pt		%XCC, 90f	.align		6480: /* 0 < len <= 16 */	andcc		%o3, 0x3, %g0	bne,pn		%XCC, 90f	 sub		%o0, %o1, %o31:	subcc		%o2, 4, %o2	EX_LD(LOAD(lduw, %o1, %g1))	EX_ST(STORE(stw, %g1, %o1 + %o3))	bgu,pt		%XCC, 1b	 add		%o1, 4, %o185:	retl	 mov		EX_RETVAL(GLOBAL_SPARE), %o0	.align		3290:	subcc		%o2, 1, %o2	EX_LD(LOAD(ldub, %o1, %g1))	EX_ST(STORE(stb, %g1, %o1 + %o3))	bgu,pt		%XCC, 90b	 add		%o1, 1, %o1	retl	 mov		EX_RETVAL(GLOBAL_SPARE), %o0	.size		FUNC_NAME, .-FUNC_NAME

⌨️ 快捷键说明

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