diff options
Diffstat (limited to 'zap/src/mem/strfill.S')
-rw-r--r-- | zap/src/mem/strfill.S | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/zap/src/mem/strfill.S b/zap/src/mem/strfill.S new file mode 100644 index 0000000..277865e --- /dev/null +++ b/zap/src/mem/strfill.S @@ -0,0 +1,48 @@ +/* + 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 <zap/priv.h> + +.globl zap_strfill + +zap_strfill: + + /* + char * str + char chr + */ + +#if defined(__amd64__) + + # rdi: Address of the first character of the string. + # rsi: Fill character. + # rax: Address of the current character. + + movq %rdi,%rax + + # Iterate over string: +.loop: + + # Check if we have reached the null-terminator: + cmpb $0x0,(%rax) + je .done # Exit loop if we have. + + # Set the value of the current element: + movb %sil,(%rax) + + # Continue to next character: + incq %rax + jmp .loop + + # Finish: +.done: + + # Get the length of the string: + subq %rdi,%rax + + ret + +#endif |