summaryrefslogtreecommitdiff
path: root/zap/source/amd64/mem/memeq.S
diff options
context:
space:
mode:
Diffstat (limited to 'zap/source/amd64/mem/memeq.S')
-rw-r--r--zap/source/amd64/mem/memeq.S74
1 files changed, 0 insertions, 74 deletions
diff --git a/zap/source/amd64/mem/memeq.S b/zap/source/amd64/mem/memeq.S
deleted file mode 100644
index b30a884..0000000
--- a/zap/source/amd64/mem/memeq.S
+++ /dev/null
@@ -1,74 +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/.
-
-.globl zap_memeq
-
-zap_memeq:
-# Left pointer:
-#define laddr %rdi
-# Number of remaining elements:
-#define rem %rsi
-# Right pointer:
-#define raddr %rdx
-# Current left element:
-#define lval8 %rax
-#define lval1 %al
-# Current right element:
-#define rval8 %rcx
-#define rval1 %cl
-
- # Compare words:
-.wrdcmp:
-
- # Check if there's at least one word left:
- cmpq $0x8,rem # if (rem == 8)
- jl .bytecmp # goto bytecmp
-
- # Copy the values into registers:
- movq (laddr),lval8 # lval8 = *laddr
- movq (raddr),rval8 # rval8 = *raddr
-
- # Check if the words are equal:
- cmpq lval8,rval8 # if (lval8 != rval8)
- jne .neq # goto neq
-
- # Mark eight more bytes as equal:
- addq $0x8,laddr # laddr += 0x8
- addq $0x8,raddr # raddr += 0x8
- subq $0x8,rem # rem -= 0x8
-
- # Continue to the next word:
- jmp .wrdcmp # goto wrdcmp
-
- # Compare bytes:
-.bytecmp:
-
- # Check if there are any bytes left:
- testq rem,rem # if (rem == 0x0)
- jz .eq # goto eq // If we have reached the final element, all previous elements have compared equal, and the memory sequences are equal.
-
- # Copy the values into registers:
- movb (laddr),lval1 # lval1 = *laddr
- movb (raddr),rval1 # rval1 = *raddr
-
- cmpb lval1,rval1 # if (lval1 != rval1)
- jne .neq # goto neq
-
- # Mark another byte as equal:
- incq laddr # ++laddr
- incq raddr # ++raddr
- decq rem # --rem
-
- # Continue to the next byte:
- jmp .bytecmp # goto bytecmp
-
- # The memory sequences have compared equal:
-.eq:
- movb $0xFF,%al
- ret # return FF
-
- # The memory sequences have compared NOT equal:
-.neq:
- movb $0x0,%al
- ret # return 0