From db582cc3f1c3053dfcfc2012f0429cb47efa539d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 19 Nov 2008 21:54:37 +0000 Subject: [PATCH] Implement RtlCompareMemory is assembly, not used yet. svn path=/branches/ros-amd64-bringup/; revision=37473 --- reactos/lib/rtl/amd64/rtlmem.S | 78 ++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 reactos/lib/rtl/amd64/rtlmem.S diff --git a/reactos/lib/rtl/amd64/rtlmem.S b/reactos/lib/rtl/amd64/rtlmem.S new file mode 100644 index 00000000000..81154735373 --- /dev/null +++ b/reactos/lib/rtl/amd64/rtlmem.S @@ -0,0 +1,78 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Run-Time Library + * PURPOSE: Memory functions for amd64 + * FILE: lib/rtl/i386/rtlswap.S + * PROGRAMER: Timo Kreuzer (timo.kreuzer@reactos.org) + */ + +/* INCLUDES ******************************************************************/ + +#include + +/* FUNCTIONS *****************************************************************/ +.intel_syntax noprefix + +/* SIZE_T + * RtlCompareMemory( + * IN CONST VOID *Source1, + * IN CONST VOID *Source2, + * IN SIZE_T Length + * ); + */ +.proc RtlCompareMemory + + /* Save registers */ + push rsi + .pushreg rsi + push rdi + .pushreg rdi + + /* Setup registers for compare */ + mov rsi, rcx + mov rdi, rdx + + /* Clear direction flag */ + cli + + /* Get number of qwords */ + mov rcx, r8 + shr rcx, 3 + jz 2f + + /* Compare qwords */ + repe cmpsq + jnz 4f + +2: /* Compare rest */ + mov rcx, r8 + and rcx, 7 + jz 3f + + repe cmpsb + jnz 5f + +3: /* All equal */ + /* Return the full count */ + mov rax, rcx + jmp 6f + +4: /* Not equal after comparing qwords */ + /* Compare the last qword */ + sub rsi, 8 + sub rdi, 8 + mov rcx, 8 + repe cmpsb + +5: /* Not equal after comparing bytes */ + /* Return difference */ + sub rdi, rdx + dec rdi + mov rax, rdi + +6: /* Cleanup and return */ + pop rdi + pop rsi + ret +.endproc +