trunc.asm revision c58f1213e628a545081c70e26c6b67a841cff880
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; $Id$
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync;; @file
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; IPRT - No-CRT trunc - AMD64 & X86.
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync;
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync;
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; Copyright (C) 2006-2010 Oracle Corporation
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync;
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; This file is part of VirtualBox Open Source Edition (OSE), as
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; available from http://www.virtualbox.org. This file is free software;
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; you can redistribute it and/or modify it under the terms of the GNU
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; General Public License (GPL) as published by the Free Software
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; Foundation, in version 2 as it comes in the "COPYING" file of the
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync;
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; The contents of this file may alternatively be used under the terms
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; of the Common Development and Distribution License Version 1.0
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; VirtualBox OSE distribution, in which case the provisions of the
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; CDDL are applicable instead of those of the GPL.
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync;
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; You may elect to license modified versions of this file under the
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; terms and conditions of either the GPL or the CDDL or both.
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync;
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync%include "iprt/asmdefs.mac"
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsyncBEGINCODE
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync;;
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; Round to truncated integer value.
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; @returns 32-bit: st(0) 64-bit: xmm0
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync; @param rd 32-bit: [ebp + 8] 64-bit: xmm0
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsyncBEGINPROC RT_NOCRT(trunc)
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync push xBP
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync mov xBP, xSP
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync sub xSP, 10h
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync%ifdef RT_ARCH_AMD64
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync movsd [xSP], xmm0
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync fld qword [xSP]
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync%else
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync fld qword [xBP + xS*2]
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync%endif
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync ; Make it truncate up by modifying the fpu control word.
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync fstcw [xBP - 10h]
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync mov eax, [xBP - 10h]
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync or eax, 00c00h
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync mov [xBP - 08h], eax
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync fldcw [xBP - 08h]
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync ; Round ST(0) to integer.
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync frndint
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync ; Restore the fpu control word.
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync fldcw [xBP - 10h]
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync%ifdef RT_ARCH_AMD64
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync fstp qword [xSP]
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync movsd xmm0, [xSP]
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync%endif
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync leave
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync ret
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsyncENDPROC RT_NOCRT(trunc)
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync
7847c123aebebc6d3d5c1406619cfba1ab6457c1vboxsync