www.pudn.com > T264-src-0.02.zip > cpu.asm
;/***************************************************************************** ; * ; * T264 AVC CODEC ; * ; * Copyright(C) 2004-2005 llcc; * 2004-2005 visionany ; * ; * This program is free software ; you can redistribute it and/or modify ; * it under the terms of the GNU General Public License as published by ; * the Free Software Foundation ; either version 2 of the License, or ; * (at your option) any later version. ; * ; * This program is distributed in the hope that it will be useful, ; * but WITHOUT ANY WARRANTY ; without even the implied warranty of ; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; * GNU General Public License for more details. ; * ; * You should have received a copy of the GNU General Public License ; * along with this program ; if not, write to the Free Software ; * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; * ; ****************************************************************************/ bits 32 ; ideal from xvid %macro cglobal 1 global _%1 %define %1 _%1 %endmacro ; from xvid %macro CHECK_FEATURE 3 mov ecx, %1 and ecx, edx neg ecx sbb ecx, ecx and ecx, %2 or %3, ecx %endmacro %define T264_CPU_MMX 0x10 %define T264_CPU_SSE 0x1000 %define T264_CPU_SSE2 0x10000 %define CPUID_MMX 0x00800000 %define CPUID_SSE 0x02000000 %define CPUID_SSE2 0x04000000 section .data align 16 section .text ;====================================================== ; ; int32_t ; T264_detect_cpu(); ; ;====================================================== align 16 cglobal T264_detect_cpu T264_detect_cpu push ebx push ebp pushfd xor ebp, ebp ; cpuid support ? pushfd pop eax xor eax, 0x200000 mov ecx, eax push eax popfd pushfd pop eax popfd cmp eax, ecx jnz .quit ; cpuid mov eax ,1 cpuid ; MMX support ? CHECK_FEATURE CPUID_MMX, T264_CPU_MMX, ebp ; SSE support ? CHECK_FEATURE CPUID_SSE, T264_CPU_SSE, ebp ; SSE2 support? CHECK_FEATURE CPUID_SSE2, T264_CPU_SSE2, ebp .quit mov eax, ebp pop ebp pop ebx ret ;====================================================== ; ; void ; T264_emms_mmx(); ; ;====================================================== cglobal T264_emms_mmx T264_emms_mmx emms ret