diff options
Diffstat (limited to 'rgo/src/memeq.S')
-rw-r--r-- | rgo/src/memeq.S | 94 |
1 files changed, 0 insertions, 94 deletions
diff --git a/rgo/src/memeq.S b/rgo/src/memeq.S deleted file mode 100644 index bd57f43..0000000 --- a/rgo/src/memeq.S +++ /dev/null @@ -1,94 +0,0 @@ -/* - 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 <rgo.h> - -.global rgo_memeq - -rgo_memeq: - /* - void const * lptr - size_t num - void const * rptr - */ -#if defined(__i386__) - /* eax: Address of the current left element. */ - movl 0x4(%esp),%eax - /* ecx: Number of remaining elements. */ - movl 0x8(%esp),%ecx - /* edx: Address of the current right element. */ - movl 0xC(%esp),%edx - /* ebx: Current left element. */ - pushl %ebx - /* ebx/esi: Current right element. */ - pushl %esi -.wrdcmp: - cmpl $0x4,%ecx - jl .bytecmp - movl (%eax),%ebx - movl (%edx),%esi - cmpl %ebx,%esi - jne .neq - addl $0x4,%eax - addl $0x4,%edx - subl $0x4,%ecx - jmp .wrdcmp -.bytecmp: - testl %ecx,%ecx - jne .eq /* If we have reached the final element, all previous elements have compared equal, and the memory sequences are equal. */ - movb (%eax),%bl - movb (%edx),%bh - cmpb %bl,%bh - jne .neq - incl %eax - incl %edx - decl %ecx - jmp .bytecmp -.eq: - popl %ebx - popl %esi - movb $0x1,%al - ret -.neq: - popl %ebx - popl %esi - movb $0x0,%al - ret -#elif defined(__x86_64__) - /* rdi: Address of the current left element. */ - /* rsi: Number of remaining elements. */ - /* rdx: Address of the current right element. */ - /* rax: Current left element. */ - /* rcx: Current right element. */ -.wrdcmp: - cmpq $0x8,%rsi - jl .bytecmp - movq (%rdi),%rax - movq (%rdx),%rcx - cmpq %rax,%rcx - jne .neq - addq $0x8,%rdi - addq $0x8,%rdx - subq $0x8,%rsi - jmp .wrdcmp -.bytecmp: - testq %rsi,%rsi - jne .eq /* If we have reached the final element, all previous elements have compared equal, and the memory sequences are equal. */ - movb (%rdi),%al - movb (%rdx),%cl - cmpb %al,%cl - jne .neq - incq %rdi - incq %rdx - decq %rsi - jmp .bytecmp -.eq: - movb $0x1,%al - ret -.neq: - movb $0x0,%al - ret -#endif |