winamp/Src/libvpShared/corelibs/CpuID/Win32/VerifyXMMReg.asm

100 lines
2.1 KiB
NASM

;//==========================================================================
;//
;// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
;// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
;// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
;// PURPOSE.
;//
;// Copyright (c) 1999 - 2001 On2 Technologies Inc. All Rights Reserved.
;//
;//--------------------------------------------------------------------------
;
; **-VerifyXMMReg
;
; This function is meant to be run on a Windows NT system to
; try and determine if the OS supports the XMM registers or
; not.
;
; This function is number 3 in a set of three. The other
; functions are...
;
; InitXMMReg
; TrashXMMReg
;
; Assumptions:
; Assumes that InitXMMReg was called to initilize the XMM registers.
; Assumes that TrashXMMReg was called from a different thread to clear
; the values in the XMM registers.
;
; Input:
; None
;
; Output:
; Return 1 (True) if the XMM registers are at the correct values.
; (os supports XMM registers)
;
; Return 0 (False) if the XMM registers are not at the correct values.
; (os does not support the XMM registers)
;
.686P
.XMM
.MODEL flat, SYSCALL, os_dos
.DATA
TORQ_CX_DATA SEGMENT PAGE PUBLIC USE32 'DATA'
ALIGN 32
NAME VerifyXMMReg
PUBLIC VerifyXMMReg_
PUBLIC _VerifyXMMReg
EXTERN XMM0Init:REAL4
EXTERN XMM1Init:REAL4
EXTERN XMM2Init:REAL4
.CODE
; int VerifyXMMReg( void )
VerifyXMMReg_:
_VerifyXMMReg:
push esi ;safety sh*&
push edi
push ebp
push ebx
push ecx
push edx
mov eax,0 ; assume will fail
comiss xmm0,XMM0Init ; check XMM0
jne Exit
comiss xmm1,XMM1Init
jne Exit
comiss xmm2,XMM2Init
jne Exit
mov eax,1 ; OS supports XMM registers
Exit:
pop edx ;safety sh*&
pop ecx
pop ebx
pop ebp
pop edi
pop esi
ret
;************************************************
END