/* * Copyright (c) 2010 The WebM project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef VPX_PORTS_X86_H #define VPX_PORTS_X86_H #include #include "config.h" #if defined(__GNUC__) && __GNUC__ #if ARCH_X86_64 #define cpuid(func,ax,bx,cx,dx)\ __asm__ __volatile__ (\ "cpuid \n\t" \ : "=a" (ax), "=b" (bx), "=c" (cx), "=d" (dx) \ : "a" (func)); #else #define cpuid(func,ax,bx,cx,dx)\ __asm__ __volatile__ (\ "pushl %%ebx \n\t" \ "cpuid \n\t" \ "movl %%ebx, %1 \n\t" \ "popl %%ebx \n\t" \ : "=a" (ax), "=r" (bx), "=c" (cx), "=d" (dx) \ : "a" (func)); #endif #else #if ARCH_X86_64 void __cpuid(int CPUInfo[4], int info_type); #pragma intrinsic(__cpuid) #define cpuid(func,a,b,c,d) do{\ int regs[4];\ __cpuid(regs,func); a=regs[0]; b=regs[1]; c=regs[2]; d=regs[3];\ } while(0) #else #define cpuid(func,a,b,c,d)\ __asm mov eax, func\ __asm cpuid\ __asm mov a, eax\ __asm mov b, ebx\ __asm mov c, ecx\ __asm mov d, edx #endif #endif #define HAS_MMX 0x01 #define HAS_SSE 0x02 #define HAS_SSE2 0x04 #define HAS_SSE3 0x08 #define HAS_SSSE3 0x10 #ifndef BIT #define BIT(n) (1<