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