xref: /plan9-contrib/sys/src/libc/amd64/strcat.s (revision 272efad760864ee41cfe633b56aea9b4f5cf3ae7)
1	TEXT	strcat(SB),$0
2
3	MOVL	$0, AX
4	MOVQ	$-1, CX
5	CLD
6
7/*
8 * find length of second string
9 */
10
11	MOVQ	p2+8(FP), DI
12	REPN;	SCASB
13
14	MOVQ	DI, BX
15	SUBQ	p2+8(FP), BX
16
17/*
18 * find end of first string
19 */
20
21	MOVQ	RARG, DI
22	REPN;	SCASB
23
24/*
25 * copy the memory
26 */
27	SUBQ	$1, DI
28	MOVQ	p2+8(FP), SI
29/*
30 * copy whole longs, if aligned
31 */
32	MOVQ	DI, CX
33	ORQ	SI, CX
34	ANDL	$3, CX
35	JNE	c3
36	MOVQ	BX, CX
37	SHRQ	$2, CX
38	REP;	MOVSL
39/*
40 * copy the rest, by bytes
41 */
42	ANDL	$3, BX
43c3:
44	MOVQ	BX, CX
45	REP;	MOVSB
46
47	MOVQ	RARG, AX
48	RET
49