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

📄 memcpy.s

📁 glibc 2.9,最新版的C语言库函数
💻 S
📖 第 1 页 / 共 2 页
字号:
	subcc		%g1, 64, %g1	LOAD_BLK(%o4, %f0)	STORE_BLK(%f0, %o4 + %g3)	add		%o4, 64, %o4	bne,pt		%XCC, 1b	 LOAD(prefetch, %o4 + 64, #one_read)195:	add		%o4, %g3, %o0	membar		#Sync	VISExitHalf	/* %o2 contains any final bytes still needed to be copied	 * over. If anything is left, we copy it one byte at a time.	 */	brz,pt		%o2, 85f	 sub		%o0, %o1, %o3	ba,a,pt		%XCC, 90f	.align		6475: /* 16 < len <= 64 */	bne,pn		%XCC, 75f	 sub		%o0, %o1, %o372:	andn		%o2, 0xf, %o4	and		%o2, 0xf, %o21:	subcc		%o4, 0x10, %o4	LOAD(ldx, %o1, %o5)	add		%o1, 0x08, %o1	LOAD(ldx, %o1, %g1)	sub		%o1, 0x08, %o1	STORE(stx, %o5, %o1 + %o3)	add		%o1, 0x8, %o1	STORE(stx, %g1, %o1 + %o3)	bgu,pt		%XCC, 1b	 add		%o1, 0x8, %o173:	andcc		%o2, 0x8, %g0	be,pt		%XCC, 1f	 nop	sub		%o2, 0x8, %o2	LOAD(ldx, %o1, %o5)	STORE(stx, %o5, %o1 + %o3)	add		%o1, 0x8, %o11:	andcc		%o2, 0x4, %g0	be,pt		%XCC, 1f	 nop	sub		%o2, 0x4, %o2	LOAD(lduw, %o1, %o5)	STORE(stw, %o5, %o1 + %o3)	add		%o1, 0x4, %o11:	cmp		%o2, 0	be,pt		%XCC, 85f	 nop	ba,pt		%xcc, 90f	 nop75:	andcc		%o0, 0x7, %g1	sub		%g1, 0x8, %g1	be,pn		%icc, 2f	 sub		%g0, %g1, %g1	sub		%o2, %g1, %o21:	subcc		%g1, 1, %g1	LOAD(ldub, %o1, %o5)	STORE(stb, %o5, %o1 + %o3)	bgu,pt		%icc, 1b	 add		%o1, 1, %o12:	add		%o1, %o3, %o0	andcc		%o1, 0x7, %g1	bne,pt		%icc, 8f	 sll		%g1, 3, %g1	cmp		%o2, 16	bgeu,pt		%icc, 72b	 nop	ba,a,pt		%xcc, 73b8:	mov		64, %o3	andn		%o1, 0x7, %o1	LOAD(ldx, %o1, %g2)	sub		%o3, %g1, %o3	andn		%o2, 0x7, %o4	sllx		%g2, %g1, %g21:	add		%o1, 0x8, %o1	LOAD(ldx, %o1, %g3)	subcc		%o4, 0x8, %o4	srlx		%g3, %o3, %o5	or		%o5, %g2, %o5	STORE(stx, %o5, %o0)	add		%o0, 0x8, %o0	bgu,pt		%icc, 1b	 sllx		%g3, %g1, %g2	srl		%g1, 3, %g1	andcc		%o2, 0x7, %o2	be,pn		%icc, 85f	 add		%o1, %g1, %o1	ba,pt		%xcc, 90f	 sub		%o0, %o1, %o3	.align		6480: /* 0 < len <= 16 */	andcc		%o3, 0x3, %g0	bne,pn		%XCC, 90f	 sub		%o0, %o1, %o31:	subcc		%o2, 4, %o2	LOAD(lduw, %o1, %g1)	STORE(stw, %g1, %o1 + %o3)	bgu,pt		%XCC, 1b	 add		%o1, 4, %o185:	retl	 mov		%g5, %o0	.align		3290:	subcc		%o2, 1, %o2	LOAD(ldub, %o1, %g1)	STORE(stb, %g1, %o1 + %o3)	bgu,pt		%XCC, 90b	 add		%o1, 1, %o1	retl	 mov		%g5, %o0END(memcpy)#define RMOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3)	\	ldx		[%src - offset - 0x20], %t0; 		\	ldx		[%src - offset - 0x18], %t1; 		\	ldx		[%src - offset - 0x10], %t2; 		\	ldx		[%src - offset - 0x08], %t3; 		\	stw		%t0, [%dst - offset - 0x1c]; 		\	srlx		%t0, 32, %t0;				\	stw		%t0, [%dst - offset - 0x20]; 		\	stw		%t1, [%dst - offset - 0x14]; 		\	srlx		%t1, 32, %t1;				\	stw		%t1, [%dst - offset - 0x18]; 		\	stw		%t2, [%dst - offset - 0x0c]; 		\	srlx		%t2, 32, %t2;				\	stw		%t2, [%dst - offset - 0x10]; 		\	stw		%t3, [%dst - offset - 0x04];		\	srlx		%t3, 32, %t3;				\	stw		%t3, [%dst - offset - 0x08];#define RMOVE_BIGALIGNCHUNK(src, dst, offset, t0, t1, t2, t3)	\	ldx		[%src - offset - 0x20], %t0; 		\	ldx		[%src - offset - 0x18], %t1; 		\	ldx		[%src - offset - 0x10], %t2; 		\	ldx		[%src - offset - 0x08], %t3; 		\	stx		%t0, [%dst - offset - 0x20]; 		\	stx		%t1, [%dst - offset - 0x18]; 		\	stx		%t2, [%dst - offset - 0x10]; 		\	stx		%t3, [%dst - offset - 0x08];		\	ldx		[%src - offset - 0x40], %t0; 		\	ldx		[%src - offset - 0x38], %t1; 		\	ldx		[%src - offset - 0x30], %t2; 		\	ldx		[%src - offset - 0x28], %t3; 		\	stx		%t0, [%dst - offset - 0x40]; 		\	stx		%t1, [%dst - offset - 0x38]; 		\	stx		%t2, [%dst - offset - 0x30]; 		\	stx		%t3, [%dst - offset - 0x28];#define RMOVE_LASTCHUNK(src, dst, offset, t0, t1, t2, t3)	\	ldx		[%src + offset + 0x00], %t0;		\	ldx		[%src + offset + 0x08], %t1; 		\	stw		%t0, [%dst + offset + 0x04]; 		\	srlx		%t0, 32, %t2;				\	stw		%t2, [%dst + offset + 0x00]; 		\	stw		%t1, [%dst + offset + 0x0c]; 		\	srlx		%t1, 32, %t3;				\	stw		%t3, [%dst + offset + 0x08];#define RMOVE_LASTALIGNCHUNK(src, dst, offset, t0, t1)		\	ldx		[%src + offset + 0x00], %t0; 		\	ldx		[%src + offset + 0x08], %t1; 		\	stx		%t0, [%dst + offset + 0x00]; 		\	stx		%t1, [%dst + offset + 0x08];	.align		32228:	andcc		%o2, 1, %g0	be,pt		%icc, 2f+41:	 ldub		[%o1 - 1], %o5	sub		%o1, 1, %o1	sub		%o0, 1, %o0	subcc		%o2, 1, %o2	be,pn		%XCC, 229f	 stb		%o5, [%o0]2:	ldub		[%o1 - 1], %o5	sub		%o0, 2, %o0	ldub		[%o1 - 2], %g5	sub		%o1, 2, %o1	subcc		%o2, 2, %o2	stb		%o5, [%o0 + 1]	bne,pt		%XCC, 2b	 stb		%g5, [%o0]229:	retl	 mov		%g4, %o0out:	retl	 mov		%g5, %o0	.align		32ENTRY(memmove)	mov		%o0, %g5#ifndef USE_BPR	srl		%o2, 0, %o2#endif	brz,pn		%o2, out	 sub		%o0, %o1, %o4	cmp		%o4, %o2	bgeu,pt		%XCC, 218b	 mov		%o0, %g4	add		%o0, %o2, %o0220:	add		%o1, %o2, %o1	cmp		%o2, 15	bleu,pn		%XCC, 228b	 andcc		%o0, 7, %g2	sub		%o0, %o1, %g5	andcc		%g5, 3, %o5	bne,pn		%XCC, 232f	 andcc		%o1, 3, %g0	be,a,pt		%XCC, 236f	 andcc		%o1, 4, %g0	andcc		%o1, 1, %g0	be,pn		%XCC, 4f	 andcc		%o1, 2, %g0	ldub		[%o1 - 1], %g2	sub		%o1, 1, %o1	sub		%o0, 1, %o0	sub		%o2, 1, %o2	be,pn		%XCC, 5f	 stb		%g2, [%o0]4:	lduh		[%o1 - 2], %g2	sub		%o1, 2, %o1	sub		%o0, 2, %o0	sub		%o2, 2, %o2	sth		%g2, [%o0]5:	andcc		%o1, 4, %g0236:	be,a,pn		%XCC, 2f	 andcc		%o2, -128, %g6	lduw		[%o1 - 4], %g5	sub		%o1, 4, %o1	sub		%o0, 4, %o0	sub		%o2, 4, %o2	stw		%g5, [%o0]	andcc		%o2, -128, %g62:	be,pn		%XCC, 235f	 andcc		%o0, 4, %g0	be,pn		%XCC, 282f + 45:	RMOVE_BIGCHUNK(o1, o0, 0x00, g1, g3, g5, o5)	RMOVE_BIGCHUNK(o1, o0, 0x20, g1, g3, g5, o5)	RMOVE_BIGCHUNK(o1, o0, 0x40, g1, g3, g5, o5)	RMOVE_BIGCHUNK(o1, o0, 0x60, g1, g3, g5, o5)	subcc		%g6, 128, %g6	sub		%o1, 128, %o1	bne,pt		%XCC, 5b	 sub		%o0, 128, %o0235:	andcc		%o2, 0x70, %g641:	be,pn		%XCC, 280f	 andcc		%o2, 8, %g0279:	rd		%pc, %o5	sll		%g6, 1, %g5	sub		%o1, %g6, %o1	sub		%o5, %g5, %o5	jmpl		%o5 + %lo(280f - 279b), %g0	 sub		%o0, %g6, %o0	RMOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g5, o5)	RMOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g5, o5)	RMOVE_LASTCHUNK(o1, o0, 0x40, g2, g3, g5, o5)	RMOVE_LASTCHUNK(o1, o0, 0x30, g2, g3, g5, o5)	RMOVE_LASTCHUNK(o1, o0, 0x20, g2, g3, g5, o5)	RMOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g5, o5)	RMOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g5, o5)280:	be,pt		%XCC, 281f	 andcc		%o2, 4, %g0	ldx		[%o1 - 8], %g2	sub		%o0, 8, %o0	stw		%g2, [%o0 + 4]	sub		%o1, 8, %o1	srlx		%g2, 32, %g2	stw		%g2, [%o0]281:	be,pt		%XCC, 1f	 andcc		%o2, 2, %g0	lduw		[%o1 - 4], %g2	sub		%o1, 4, %o1	stw		%g2, [%o0 - 4]	sub		%o0, 4, %o01:	be,pt		%XCC, 1f	 andcc		%o2, 1, %g0	lduh		[%o1 - 2], %g2	sub		%o1, 2, %o1	sth		%g2, [%o0 - 2]	sub		%o0, 2, %o01:	be,pt		%XCC, 211f	 nop	ldub		[%o1 - 1], %g2	stb		%g2, [%o0 - 1]211:	retl	 mov		%g4, %o0282:	RMOVE_BIGALIGNCHUNK(o1, o0, 0x00, g1, g3, g5, o5)	RMOVE_BIGALIGNCHUNK(o1, o0, 0x40, g1, g3, g5, o5)	subcc		%g6, 128, %g6	sub		%o1, 128, %o1	bne,pt		%XCC, 282b	 sub		%o0, 128, %o0	andcc		%o2, 0x70, %g6	be,pn		%XCC, 284f	 andcc		%o2, 8, %g0283:	rd		%pc, %o5	sub		%o1, %g6, %o1	sub		%o5, %g6, %o5	jmpl		%o5 + %lo(284f - 283b), %g0	 sub		%o0, %g6, %o0	RMOVE_LASTALIGNCHUNK(o1, o0, 0x60, g2, g3)	RMOVE_LASTALIGNCHUNK(o1, o0, 0x50, g2, g3)	RMOVE_LASTALIGNCHUNK(o1, o0, 0x40, g2, g3)	RMOVE_LASTALIGNCHUNK(o1, o0, 0x30, g2, g3)	RMOVE_LASTALIGNCHUNK(o1, o0, 0x20, g2, g3)	RMOVE_LASTALIGNCHUNK(o1, o0, 0x10, g2, g3)	RMOVE_LASTALIGNCHUNK(o1, o0, 0x00, g2, g3)284:	be,pt		%XCC, 285f	 andcc		%o2, 4, %g0	ldx		[%o1 - 8], %g2	sub		%o0, 8, %o0	sub		%o1, 8, %o1	stx		%g2, [%o0]285:	be,pt		%XCC, 1f	 andcc		%o2, 2, %g0	lduw		[%o1 - 4], %g2	sub		%o0, 4, %o0	sub		%o1, 4, %o1	stw		%g2, [%o0]1:	be,pt		%XCC, 1f	 andcc		%o2, 1, %g0	lduh		[%o1 - 2], %g2	sub		%o0, 2, %o0	sub		%o1, 2, %o1	sth		%g2, [%o0]1:	be,pt		%XCC, 1f	 nop	ldub		[%o1 - 1], %g2	stb		%g2, [%o0 - 1]1:	retl	 mov		%g4, %o0232:	ldub		[%o1 - 1], %g5	sub		%o1, 1, %o1	sub		%o0, 1, %o0	subcc		%o2, 1, %o2	bne,pt		%XCC, 232b	 stb		%g5, [%o0]234:	retl	 mov		%g4, %o0END(memmove)#ifdef USE_BPRweak_alias (memcpy, __align_cpy_1)weak_alias (memcpy, __align_cpy_2)weak_alias (memcpy, __align_cpy_4)weak_alias (memcpy, __align_cpy_8)weak_alias (memcpy, __align_cpy_16)#endiflibc_hidden_builtin_def (memcpy)libc_hidden_builtin_def (memmove)

⌨️ 快捷键说明

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