16f8846540385a2be120c7430c1b61ce938c718bvboxsync; $Id$
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;; @file
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; IPRT - ASMAtomicCmpXchgU64().
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;
e64031e20c39650a7bc902a3e1aba613b9415deevboxsync; Copyright (C) 2006-2010 Oracle Corporation
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; This file is part of VirtualBox Open Source Edition (OSE), as
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; available from http://www.virtualbox.org. This file is free software;
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; you can redistribute it and/or modify it under the terms of the GNU
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; General Public License (GPL) as published by the Free Software
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; Foundation, in version 2 as it comes in the "COPYING" file of the
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; The contents of this file may alternatively be used under the terms
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; of the Common Development and Distribution License Version 1.0
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; VirtualBox OSE distribution, in which case the provisions of the
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; CDDL are applicable instead of those of the GPL.
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; You may elect to license modified versions of this file under the
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync; terms and conditions of either the GPL or the CDDL or both.
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;*******************************************************************************
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;* Header Files *
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;*******************************************************************************
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync%include "iprt/asmdefs.mac"
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsyncBEGINCODE
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;;
16f8846540385a2be120c7430c1b61ce938c718bvboxsync; Atomically compares and exchanges an unsigned 64-bit int.
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync; @param pu64 x86:ebp+8 gcc:rdi msc:rcx
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync; @param u64New x86:ebp+c gcc:rsi msc:rdx
26404ab75e1085a73cd6dd83cb8b725a432c8e8bvboxsync; @param u64Old x86:ebp+14 gcc:rdx msc:r8
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync; @returns bool result: true if successfully exchanged, false if not.
16f8846540385a2be120c7430c1b61ce938c718bvboxsync; x86:al
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync;
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsyncBEGINPROC_EXPORTED ASMAtomicCmpXchgU64
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync%ifdef RT_ARCH_AMD64
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync %ifdef ASM_CALL64_MSC
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync mov rax, r8
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync lock cmpxchg [rcx], rdx
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync %else
26404ab75e1085a73cd6dd83cb8b725a432c8e8bvboxsync mov rax, rdx
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync lock cmpxchg [rdi], rsi
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync %endif
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync setz al
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync movzx eax, al
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync ret
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync%endif
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync%ifdef RT_ARCH_X86
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync push ebp
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync mov ebp, esp
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync push ebx
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync push edi
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync
502f3694e61f9d40b249816e5592baf18a83a047vboxsync mov ebx, dword [ebp+0ch]
502f3694e61f9d40b249816e5592baf18a83a047vboxsync mov ecx, dword [ebp+0ch + 4]
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync mov edi, [ebp+08h]
502f3694e61f9d40b249816e5592baf18a83a047vboxsync mov eax, dword [ebp+14h]
502f3694e61f9d40b249816e5592baf18a83a047vboxsync mov edx, dword [ebp+14h + 4]
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync lock cmpxchg8b [edi]
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync setz al
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync movzx eax, al
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync pop edi
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync pop ebx
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync leave
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync ret
4a06653ba40bc32430ffb04702f50c72493e5826vboxsync%endif
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsyncENDPROC ASMAtomicCmpXchgU64
d90117211898573c15902b5dbc39f5f3e6f0c439vboxsync