--- cpuid.asm 2006/12/06 19:55:07 1.10 +++ cpuid.asm 2008/11/11 20:46:24 1.13 @@ -19,7 +19,7 @@ ; * along with this program ; if not, write to the Free Software ; * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; * -; * $Id: cpuid.asm,v 1.10 2006/12/06 19:55:07 Isibaar Exp $ +; * $Id: cpuid.asm,v 1.13 2008/11/11 20:46:24 Isibaar Exp $ ; * ; ***************************************************************************/ @@ -30,15 +30,19 @@ %ifdef MARK_FUNCS global _%1:function %1.endfunc-%1 %define %1 _%1:function %1.endfunc-%1 + %define ENDFUNC .endfunc %else global _%1 %define %1 _%1 + %define ENDFUNC %endif %else %ifdef MARK_FUNCS global %1:function %1.endfunc-%1 + %define ENDFUNC .endfunc %else global %1 + %define ENDFUNC %endif %endif %endmacro @@ -85,13 +89,13 @@ ; Macros ;============================================================================= -%macro CHECK_FEATURE 3 - mov ecx, %1 - and ecx, edx - neg ecx - sbb ecx, ecx - and ecx, %2 - or %3, ecx +%macro CHECK_FEATURE 4 + mov eax, %1 + and eax, %4 + neg eax + sbb eax, eax + and eax, %2 + or %3, eax %endmacro ;============================================================================= @@ -142,19 +146,19 @@ cpuid ; RDTSC command ? - CHECK_FEATURE CPUID_TSC, XVID_CPU_TSC, ebp + CHECK_FEATURE CPUID_TSC, XVID_CPU_TSC, ebp, edx ; MMX support ? - CHECK_FEATURE CPUID_MMX, XVID_CPU_MMX, ebp + CHECK_FEATURE CPUID_MMX, XVID_CPU_MMX, ebp, edx ; SSE support ? - CHECK_FEATURE CPUID_SSE, (XVID_CPU_MMXEXT|XVID_CPU_SSE), ebp + CHECK_FEATURE CPUID_SSE, (XVID_CPU_MMXEXT|XVID_CPU_SSE), ebp, edx ; SSE2 support? - CHECK_FEATURE CPUID_SSE2, XVID_CPU_SSE2, ebp + CHECK_FEATURE CPUID_SSE2, XVID_CPU_SSE2, ebp, edx ; SSE3 support? - CHECK_FEATURE CPUID_SSE3, XVID_CPU_SSE3, ebp + CHECK_FEATURE CPUID_SSE3, XVID_CPU_SSE3, ebp, ecx ; extended functions? mov eax, 0x80000000 @@ -174,13 +178,13 @@ jnz .cpu_quit ; 3DNow! support ? - CHECK_FEATURE EXT_CPUID_3DNOW, XVID_CPU_3DNOW, ebp + CHECK_FEATURE EXT_CPUID_3DNOW, XVID_CPU_3DNOW, ebp, edx ; 3DNOW extended ? - CHECK_FEATURE EXT_CPUID_AMD_3DNOWEXT, XVID_CPU_3DNOWEXT, ebp + CHECK_FEATURE EXT_CPUID_AMD_3DNOWEXT, XVID_CPU_3DNOWEXT, ebp, edx ; extended MMX ? - CHECK_FEATURE EXT_CPUID_AMD_MMXEXT, XVID_CPU_MMXEXT, ebp + CHECK_FEATURE EXT_CPUID_AMD_MMXEXT, XVID_CPU_MMXEXT, ebp, edx .cpu_quit: @@ -194,7 +198,7 @@ pop ebx ret -.endfunc +ENDFUNC ; sse/sse2 operating support detection routines ; these will trigger an invalid instruction signal if not supported. @@ -203,7 +207,7 @@ sse_os_trigger: xorps xmm0, xmm0 ret -.endfunc +ENDFUNC ALIGN 16 @@ -211,7 +215,7 @@ sse2_os_trigger: xorpd xmm0, xmm0 ret -.endfunc +ENDFUNC ; enter/exit mmx state @@ -220,7 +224,7 @@ emms_mmx: emms ret -.endfunc +ENDFUNC ; faster enter/exit mmx state ALIGN 16 @@ -228,6 +232,11 @@ emms_3dn: femms ret -.endfunc +ENDFUNC + +%ifidn __OUTPUT_FORMAT__,elf +section ".note.GNU-stack" noalloc noexec nowrite progbits +%endif +