diff options
Diffstat (limited to 'zap/source/amd64/mem/fndbyte.S')
-rw-r--r-- | zap/source/amd64/mem/fndbyte.S | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/zap/source/amd64/mem/fndbyte.S b/zap/source/amd64/mem/fndbyte.S new file mode 100644 index 0000000..9298b73 --- /dev/null +++ b/zap/source/amd64/mem/fndbyte.S @@ -0,0 +1,44 @@ +# 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_fndbyte + +zap_fndbyte: + # rax: Address of the current element. + # rdi: Address of the first element. + # rsi: Address of the element after the last element. + # rdx: Byte value. + # rcx: Current byte. + + movq %rdi,%rax + + addq %rdi,%rsi + + # Iterate over the array: +.loop: + + # Check if we have reached the end of the array: + cmpq %rax,%rsi + je .nfnd + + # Check if we have found the byte value: + movb (%rax),%cl + cmpb %cl,%dl + je .fnd + + # Continue to the next byte: + incq %rax + jmp .loop + + # Found: +.fnd: + + subq %rdi,%rax + ret + + # Not found: +.nfnd: + + movq $0xFFFFFFFFFFFFFFFF,%rax + ret |