| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | !    Copyright (C) 2013 Imagination Technologies Ltd.!    Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.	.text	.global	_strcpy	.type	_strcpy,function! D1Ar1 dst! D0Ar2 src_strcpy:	MOV	A1.2, D1Ar1	! test 4 byte alignment of src	ANDS	D0Ar4, D0Ar2, #3	BNZ	$Lbyteloop	! test 4 byte alignment of dest	ANDS	D1Ar5, D1Ar1, #3	BNZ	$Lbyteloop	! load mask values for aligned loops	MOVT	D1Ar3, #HI(0xfefefeff)	ADD	D1Ar3, D1Ar3, #LO(0xfefefeff)	MOVT	D0FrT, #HI(0x80808080)	ADD	D0FrT, D0FrT, #LO(0x80808080)	! test 8 byte alignment of src	ANDS	D0Ar4, D0Ar2, #7	BNZ	$Lwordloop	! test 8 byte alignment of dest	ANDS	D1Ar5, D1Ar1, #7	BNZ	$Lwordloop$L8byteloop:	GETL	D1Ar5, D0Ar6, [D0Ar2++]	MOV	D1Re0, D1Ar5	MOV	D0Re0, D1Ar5	ADD	D1Re0, D1Re0, D1Ar3	XOR	D0Re0, D0Re0, #-1	AND	D1Re0, D1Re0, D0Re0	ANDS	D1Re0, D1Re0, D0FrT	BNZ	$Lnullfound		! NULL in first word	MOV	D1Re0, D0Ar6	MOV	D0Re0, D0Ar6	ADD	D1Re0, D1Re0, D1Ar3	XOR	D0Re0, D0Re0, #-1	AND	D1Re0, D1Re0, D0Re0	ANDS	D1Re0, D1Re0, D0FrT	BNZ	$Lnullfound2		! NULL in the second word	SETL	[A1.2++], D1Ar5, D0Ar6	B	$L8byteloop$Lwordloop:	GETD	D0Ar6, [D0Ar2++]	MOV	D1Re0, D0Ar6	MOV	D0Re0, D0Ar6	ADD	D1Re0, D1Re0, D1Ar3	XOR	D0Re0, D0Re0, #-1	AND	D1Re0, D1Re0, D0Re0	ANDS	D1Re0, D1Re0, D0FrT	MOV	D1Ar5, D0Ar6	BNZ	$Lnullfound	SETD	[A1.2++], D0Ar6	B	$Lwordloop$Lnullfound2:	SETD	[A1.2++], D1Ar5	MOV	D1Ar5, D0Ar6$Lnullfound:	SETB	[A1.2++], D1Ar5	ANDS	D0Ar6, D1Ar5, #0xff	LSR	D1Ar5, D1Ar5, #8	BNZ	$Lnullfound	B	$Lend$Lbyteloop:	GETB	D0Ar6, [D0Ar2++]	SETB	[A1.2++], D0Ar6	CMP	D0Ar6, #0	BNZ	$Lbyteloop$Lend:	MOV	D0Re0, D1Ar1	MOV	PC, D1RtP	.size _strcpy,.-_strcpylibc_hidden_def(strcpy)
 |