summaryrefslogtreecommitdiff
path: root/newlib/libc/machine/h8300/reg_memcpy.S
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/machine/h8300/reg_memcpy.S')
-rw-r--r--newlib/libc/machine/h8300/reg_memcpy.S33
1 files changed, 33 insertions, 0 deletions
diff --git a/newlib/libc/machine/h8300/reg_memcpy.S b/newlib/libc/machine/h8300/reg_memcpy.S
new file mode 100644
index 00000000000..772a43c2781
--- /dev/null
+++ b/newlib/libc/machine/h8300/reg_memcpy.S
@@ -0,0 +1,33 @@
+#include "defines.h"
+
+#ifdef __H8300H__
+ .h8300h
+#endif
+
+#ifdef __H8300S__
+ .h8300s
+#endif
+
+
+ ; dst A0
+ ; src A1
+ ; len A2
+ .global ___reg_memcpy
+___reg_memcpy:
+
+ MOVP A0P,A3P ; keep copy of result
+ ADDP A2P,A0P ; point to end of dst
+ ADDP A2P,A1P ; point to end of src
+ CMPP A0P,A3P ; see if anything to do
+ beq quit
+
+
+loop: subs #1,A1P ; point to byte
+ mov.b @A1P,A2L ; get byte
+ mov.b A2L,@-A0P ; save byte
+ CMPP A0P,A3P ; at the front again ?
+ bne loop
+
+ ; return with A0 pointing to dst
+quit: rts
+