diff options
Diffstat (limited to 'zap/src/mem/memfill.S')
-rw-r--r-- | zap/src/mem/memfill.S | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/zap/src/mem/memfill.S b/zap/src/mem/memfill.S new file mode 100644 index 0000000..63a1aad --- /dev/null +++ b/zap/src/mem/memfill.S @@ -0,0 +1,45 @@ +/* + 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_memfill + +zap_memfill: + + /* + void const * ptr + zap_sz num + unsigned char val + */ + +#if defined(__amd64__) + + # rdi: Address of the current element. + # rsi: Address of the element after the last element. + # rdx: Byte value. + + addq %rdi,%rsi + + # Iterate over buffer: +.loop: + + # Check if we have reached the final element: + cmpq %rdi,%rsi + je .done # Exit loop if we have. + + # Set the value of the current element: + movb %dl,(%rdi) + + # Continue to next element: + incq %rdi + jmp .loop + + # Finish: +.done: + ret + +#endif |