xref: /plan9-contrib/sys/src/ape/lib/ap/386/strcat.s (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1	TEXT	strcat(SB),$0
2
3	MOVL	$0, AX
4	MOVL	$-1, CX
5	CLD
6
7/*
8 * find length of second string
9 */
10
11	MOVL	p2+4(FP), DI
12	REPN;	SCASB
13
14	MOVL	DI, BX
15	SUBL	p2+4(FP), BX
16
17/*
18 * find end of first string
19 */
20
21	MOVL	p1+0(FP), DI
22	REPN;	SCASB
23
24/*
25 * copy the memory
26 */
27	SUBL	$1, DI
28	MOVL	p2+4(FP), SI
29/*
30 * copy whole longs
31 */
32	MOVL	BX, CX
33	SHRL	$2, CX
34	REP;	MOVSL
35/*
36 * copy the rest, by bytes
37 */
38	ANDL	$3, BX
39	MOVL	BX, CX
40	REP;	MOVSB
41
42	MOVL	p1+0(FP), AX
43	RET
44