c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; $Id$
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync;; @file
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; IPRT - No-CRT strlen - AMD64 & X86.
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync;
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync;
c58f1213e628a545081c70e26c6b67a841cff880vboxsync; Copyright (C) 2006-2010 Oracle Corporation
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync;
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; This file is part of VirtualBox Open Source Edition (OSE), as
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; available from http://www.virtualbox.org. This file is free software;
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; you can redistribute it and/or modify it under the terms of the GNU
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; General Public License (GPL) as published by the Free Software
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; Foundation, in version 2 as it comes in the "COPYING" file of the
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync;
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; The contents of this file may alternatively be used under the terms
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; of the Common Development and Distribution License Version 1.0
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; VirtualBox OSE distribution, in which case the provisions of the
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; CDDL are applicable instead of those of the GPL.
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync;
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; You may elect to license modified versions of this file under the
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; terms and conditions of either the GPL or the CDDL or both.
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync;
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync%include "iprt/asmdefs.mac"
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsyncBEGINCODE
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync;;
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync; @param psz gcc: rdi msc: rcx x86: [esp+4]
c1f4d314cb8f8b75e2d67a3553ecabd081f1e1c6vboxsyncRT_NOCRT_BEGINPROC strlen
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync cld
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync%ifdef RT_ARCH_AMD64
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync %ifdef ASM_CALL64_MSC
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync mov r9, rdi ; save rdi
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync mov rdi, rcx
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync %endif
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync%else
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync mov edx, edi ; save edi
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync mov edi, [esp + 4]
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync%endif
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync ; do the search
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync mov xCX, -1
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync xor eax, eax
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync repne scasb
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync ; found it
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync neg xCX
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync lea xAX, [xCX - 2]
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync%ifdef ASM_CALL64_MSC
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync mov rdi, r9
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync%endif
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync%ifdef RT_ARCH_X86
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync mov edi, edx
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync%endif
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync ret
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsyncENDPROC RT_NOCRT(strlen)
c38dcd5b2fbcbaab170a1014a621343c4cf94391vboxsync