1/*
2Copyright (c) 1990 The Regents of the University of California.
3All rights reserved.
4
5Redistribution and use in source and binary forms are permitted
6provided that the above copyright notice and this paragraph are
7duplicated in all such forms and that any documentation,
8and/or other materials related to such
9distribution and use acknowledge that the software was developed
10by the University of California, Berkeley.  The name of the
11University may not be used to endorse or promote products derived
12from this software without specific prior written permission.
13THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16 */
17#include <picolibc.h>
18
19#include "setarch.h"
20
21#include "defines.h"
22
23	; dst A0
24	; src A1
25	; len A2
26	.global ___reg_memcpy
27___reg_memcpy:
28
29	MOVP	A0P,A3P	; keep copy of result
30	ADDP	A2P,A0P	; point to end of dst
31	ADDP	A2P,A1P	; point to end of src
32	CMPP	A0P,A3P	; see if anything to do
33	beq	quit
34
35loop:
36#ifdef __NORMAL_MODE__
37	sub     #1,A1P		; point to byte
38#else
39	subs    #1,A1P          ; point to byte
40#endif
41	mov.b	@A1P,A2L	; get byte
42	mov.b	A2L,@-A0P	; save byte
43	CMPP	A0P,A3P 	; at the front again ?
44	bne 	loop
45
46	; return with A0 pointing to dst
47quit:	rts
48
49