/* 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/. */ #include .globl zap_fndbyte zap_fndbyte: /* void const * ptr zap_sz num unsigned char byte */ #if defined(__amd64__) # 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 #endif