;//========================================================================== ;// ;// 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. ;// ;//-------------------------------------------------------------------------- ; ; **-Does9xOSSupportXMM ; ; This function will verify if the operating system supports the XMM ; instructions. According to Intel documentation ; ; Intel Architecture ; Software Developer ; Manual ; Volume 1: ; Basic Architecture ; ; The following needs to be true for the OS to suppor the XMM instructions ; ; CR0.EM(bit 2) = 0 (emulation disabled) ; CR4.OSFXSR(bit 9) = 1 (OS supports saving SIMD floating-point state during context ; switches) ; ; * * * N O T E * * * * * * N O T E * * * * * * N O T E * * * * * * N O T E * * * * * * N O T E * * * * * * N O T E * * * ; ; This function will NOT run on windows NT systems. The function reads control registers ; which are protected under Windows NT. If you attempt to run this function under Windows NT a ; protected mode access violation will be generated. ; ; * * * N O T E * * * * * * N O T E * * * * * * N O T E * * * * * * N O T E * * * * * * N O T E * * * * * * N O T E * * * ; ; Assumptions: ; Access to system control registers CR0 and CR4 are not protected ; ; Input: ; None ; ; Output: ; 1 Returned if OS supports XMM instructions ; 0 Returned if OS does not support XMM instructions ; ; .586 .MODEL flat, SYSCALL, os_dos .DATA NAME x86cpuid PUBLIC Does9xOSSupportXMM_ PUBLIC _Does9xOSSupportXMM .CODE ; int Does9xOSSupportXMM( void ) Does9xOSSupportXMM_: _Does9xOSSupportXMM: push esi ;safety sh*& push edi push ebp push ebx push ecx push edx ; check to see if OS supports SIMD instructions mov edx,cr0 bt edx,2 ; ensure no emulation jnae NoXMMSupport mov edx,cr4 bt edx,9 ; OS support SIMD jnc NoXMMSupport ; we support XMM instructions mov eax,1 jmp Exit NoXMMSupport: ; mov eax,0 ; OS does not support XMM instructions Exit: pop edx ;safety sh*& pop ecx pop ebx pop ebp pop edi pop esi ret ;************************************************ END