summaryrefslogtreecommitdiff
path: root/rgo/src/memeq.S
diff options
context:
space:
mode:
Diffstat (limited to 'rgo/src/memeq.S')
-rw-r--r--rgo/src/memeq.S94
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