summaryrefslogtreecommitdiffstats
path: root/newlib/libc/machine/rx/strncpy.S
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/machine/rx/strncpy.S')
-rw-r--r--newlib/libc/machine/rx/strncpy.S18
1 files changed, 18 insertions, 0 deletions
diff --git a/newlib/libc/machine/rx/strncpy.S b/newlib/libc/machine/rx/strncpy.S
new file mode 100644
index 000000000..e04922a59
--- /dev/null
+++ b/newlib/libc/machine/rx/strncpy.S
@@ -0,0 +1,18 @@
+ .file "strncpy.S"
+
+ .section .text
+ .global _strncpy
+ .type _strncpy,@function
+_strncpy:
+ mov r1, r4 ; Save a copy of the dest pointer.
+ mov r3, r5 ; Save a copy of the byte count
+ smovu ; Copy the bytes
+ cmp #0, r3 ; If we have copied the number of bytes requested
+ beq 1f ; then skip the next bit:
+ add r4, r5, r1 ; Point to the last byte that we are supposed to write.
+ sub r3, r1 ; Subtract the number of bytes left to be written.
+ mov #0, r2 ; Fill the remaining bytes with NULs,
+ sstr.b
+1:
+ mov r4, r1 ; Return the destination pointer
+ rts