From 5f3cbbb8a499f6740b0992baa4fe68f1d018e6c5 Mon Sep 17 00:00:00 2001 From: Wesley Moore <wes@wezm.net> Date: Thu, 6 Mar 2025 20:59:32 +1000 Subject: [PATCH] Implement streq routine --- tests/harness.s | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/harness.s b/tests/harness.s index b6899fd..37b709e 100644 --- a/tests/harness.s +++ b/tests/harness.s @@ -55,3 +55,30 @@ read: li a0, 0 # 0 = standard input (stdin) ecall # invoke syscall ret + + +# Determine if two strings are equal +# arguments: +# a0: address of first string +# a1: length of first string +# a2: address of second string +# a3: length of second string +# return: +# a0: 1 if equal, 0 otherwise +streq: + bne a1, a2, 2f # If the lengths are not the same then the strings are different +1: + beqz a1, 3f # If the remaining length is zero, string are the same + lbu a4, 0(a0) # load byte from string 1 + lbu a5, 0(a2) # load byte from string 2 + bne a4, a5, 2f # return false if bytes are not equal + addi a1, a1, -1 # decrement a1 + addi a0, a0, 1 # go to next byte of string 1 + addi a2, a2, 1 # go to next byte of string 2 + j 1b # loop +2: + li a0, 0 # 0 = false + ret +3: + li a0, 1 # 1 = true + ret