2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync; $Id$
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync;; @file
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync; VMM - All Contexts Assembly Routines.
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync;
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync;
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync; Copyright (C) 2009-2010 Oracle Corporation
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync;
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync; This file is part of VirtualBox Open Source Edition (OSE), as
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync; available from http://www.virtualbox.org. This file is free software;
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync; you can redistribute it and/or modify it under the terms of the GNU
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync; General Public License (GPL) as published by the Free Software
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync; Foundation, in version 2 as it comes in the "COPYING" file of the
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync;
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync;*******************************************************************************
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync;* Header Files *
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync;*******************************************************************************
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync%include "VBox/asmdefs.mac"
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync;*******************************************************************************
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync;* Defined Constants And Macros *
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync;*******************************************************************************
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync%ifdef IN_RING3
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync %ifdef RT_ARCH_AMD64
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync %define VMM_TRASH_XMM_REGS
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync %endif
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync%endif
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync%ifdef IN_RING0
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync %ifdef RT_ARCH_AMD64
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync %ifdef RT_OS_WINDOWS
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync %define VMM_TRASH_XMM_REGS
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync %endif
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync %endif
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync%endif
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync%ifndef VMM_TRASH_XMM_REGS
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync %ifdef VBOX_WITH_KERNEL_USING_XMM
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync %define VMM_TRASH_XMM_REGS
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync %endif
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync%endif
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsyncBEGINCODE
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync;;
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync; Trashes the volatile XMM registers in the current ABI.
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync;
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsyncBEGINPROC VMMTrashVolatileXMMRegs
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync%ifdef VMM_TRASH_XMM_REGS
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync push xBP
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync mov xBP, xSP
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync ; take whatever is on the stack.
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync and xSP, ~15
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync sub xSP, 80h
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm0, [xSP + 0]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm1, [xSP + 010h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm2, [xSP + 020h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm3, [xSP + 030h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm4, [xSP + 040h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm5, [xSP + 050h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync %ifdef ASM_CALL64_GCC
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm6, [xSP + 060h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm7, [xSP + 070h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm8, [xSP + 000h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm9, [xSP + 010h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm10,[xSP + 020h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm11,[xSP + 030h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm12,[xSP + 040h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm13,[xSP + 050h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm14,[xSP + 060h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync movdqa xmm15,[xSP + 070h]
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync %endif
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync leave
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync%endif ; VMM_TRASH_XMM_REGS
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync xor eax, eax ; for good measure.
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync ret
8f245de2f25e603dc46523ddec4ac5feabccac89vboxsyncENDPROC VMMTrashVolatileXMMRegs
2679bbf2b163ca8c105a04c1bbb82d245a91e22evboxsync