diff options
Diffstat (limited to 'zap/source/amd64/mem/streq.S')
-rw-r--r-- | zap/source/amd64/mem/streq.S | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/zap/source/amd64/mem/streq.S b/zap/source/amd64/mem/streq.S new file mode 100644 index 0000000..4270e7d --- /dev/null +++ b/zap/source/amd64/mem/streq.S @@ -0,0 +1,43 @@ +# Copyright 2022 Gabriel Jensen. +# This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. +# If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. + +.globl zap_streq + +zap_streq: + # rdi: Address of the current left character. + # rsi: Address of the current right character. + # rax: Current left character. + # rdx: Current right character. + + # Iterate over the strings: +.loop: + + # Copy the characters into registers: + movb (%rdi),%al + movb (%rsi),%dl + + # Check if the characters are equal: + cmpb %al,%dl + jne .neq # If not, the strings also aren't equal. + + # Check if we have reached the null-terminator: + testb %al,%al + jz .eq # If so, all previous characters have compared equal, and the strings are equal. + + # Continue to the next characters: + incq %rdi + incq %rsi + jmp .loop + + # The strings have compared equal: +.eq: + + movb $0xFF,%al + ret + + /* The strings have compared unequal: */ +.neq: + + movb $0x0,%al + ret |