about summary refs log tree commit diff
path: root/src/string/arm/__aeabi_memset.s
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2017-02-21 00:07:34 +0000
committerRich Felker <dalias@aerifal.cx>2017-06-22 18:34:06 -0400
commite6def544358afd5648a428d2e02c147a1f901048 (patch)
tree9210513645e1a5dc230e1f128237dbe978e94ee7 /src/string/arm/__aeabi_memset.s
parent91d34c4533e6bf6eacad7a9f001f28f9e5ebc656 (diff)
downloadmusl-e6def544358afd5648a428d2e02c147a1f901048.tar.gz
musl-e6def544358afd5648a428d2e02c147a1f901048.tar.xz
musl-e6def544358afd5648a428d2e02c147a1f901048.zip
fix arm run-time abi string functions
in arm rtabi these __aeabi_* functions have special abi (they are
only allowed to clobber r0,r1,r2,r3,ip,lr,cpsr), so they cannot
be simple wrappers around normal string functions (which may
clobber other registers), the safest solution is to write them in
asm, a minimalistic implementation works because these are not
supposed to be emitted by compilers or used in general.
Diffstat (limited to 'src/string/arm/__aeabi_memset.s')
-rw-r--r--src/string/arm/__aeabi_memset.s31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/string/arm/__aeabi_memset.s b/src/string/arm/__aeabi_memset.s
new file mode 100644
index 00000000..f9f60583
--- /dev/null
+++ b/src/string/arm/__aeabi_memset.s
@@ -0,0 +1,31 @@
+.syntax unified
+
+.global __aeabi_memclr8
+.global __aeabi_memclr4
+.global __aeabi_memclr
+.global __aeabi_memset8
+.global __aeabi_memset4
+.global __aeabi_memset
+
+.type __aeabi_memclr8,%function
+.type __aeabi_memclr4,%function
+.type __aeabi_memclr,%function
+.type __aeabi_memset8,%function
+.type __aeabi_memset4,%function
+.type __aeabi_memset,%function
+
+__aeabi_memclr8:
+__aeabi_memclr4:
+__aeabi_memclr:
+	movs  r2, #0
+__aeabi_memset8:
+__aeabi_memset4:
+__aeabi_memset:
+	cmp   r1, #0
+	beq   2f
+	adds  r1, r0, r1
+1:	strb  r2, [r0]
+	adds  r0, r0, #1
+	cmp   r1, r0
+	bne   1b
+2:	bx    lr