aboutsummaryrefslogtreecommitdiff
path: root/kernel/strlen.S
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/strlen.S')
-rw-r--r--kernel/strlen.S22
1 files changed, 22 insertions, 0 deletions
diff --git a/kernel/strlen.S b/kernel/strlen.S
new file mode 100644
index 0000000..6185b94
--- /dev/null
+++ b/kernel/strlen.S
@@ -0,0 +1,22 @@
+.globl strlen
+.type strlen, @function
+
+/*
+ * Defined in include/fbos/string.h
+ *
+ * size_t strlen(const char *str)
+ *
+ * Returns (a0): string length.
+ * Parameter (a0): string to measure.
+ * Clobbers: t0, t1.
+ */
+strlen:
+ mv t1, a0
+1:
+ lbu t0, 0(t1)
+ beqz t0, 2f
+ addi t1, t1, 1
+ j 1b
+2:
+ sub a0, t1, a0
+ ret