mplayer, amd64, and CPU flags [patch]

Pav Lucistnik pav at oook.cz
Sat May 21 10:44:24 PDT 2005


Axel Gonzalez píše v so 21. 05. 2005 v 12:37 -0500:

> Maybe this is a little unnecesary since its amd64 and should support all extra 
> flags (at the end its a patch to the makefile), and the only file broken is 
> to get the configure arguments, cpu detection inside the mplayer binary works 
> perfectly
> 
> on TOOLS/cpuinfo.c:
> 
> static cpuid_regs_t
> cpuid(int func) {
>         cpuid_regs_t regs;
> #define CPUID   ".byte 0x0f, 0xa2; "
>         asm("push %%ebx; "
>             "movl %4,%%eax; " CPUID
>             "movl %%eax,%0; movl %%ebx,%1; movl %%ecx,%2; movl %%edx,%3; "
>             "pop %%ebx"
>                 : "=m" (regs.eax), "=m" (regs.ebx), "=m" (regs.ecx), 
> "=m" (regs.edx)
>                 : "g" (func)
>                 : "%eax", "%ecx", "%edx");
> 
> printf(""); // **** NOTE this *extra* printf()
>         return regs;
> }
> 
> 
> with the printf:
> 
> # TOOLS/cpuinfo
> vendor_id       : AuthenticAMD
> cpu family      : 15
> model           : 12
> stepping        : 0
> flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca 
> cmov pat pse36 cflsh mmx fxsr sse sse2 mmxext 3dnowext 3dnow k6_mtrr
> cpu MHz         : 2000.021
> model name      : AMD Athlon(tm) 64 Processor 3000+
> 
> w/o the printf()
> 
> # TOOLS/cpuinfo
> vendor_id       : 
> model name      : Unknown CPU
> 
> 
> why this works, i have no idea. Maybe its something to do with the registers, 
> etc.

It don't work with any optimization level in gcc, ie.

gcc -o cpuinfo cpuinfo.c

works, but

gcc -O -o cpuinfo cpuinfo.c

prints garbage.

> I won't try to debug it further since we already know the flags of the CPU 
> (and the printf seems to fix the problem anyways)
> 
> 
> this is a commitable patch to the makefile:
> 
> --- Makefile.orig	Sat May 21 10:58:38 2005
> +++ Makefile	Sat May 21 11:01:44 2005
> @@ -353,6 +353,15 @@
>  PLIST_SUB+=	VIDIX="@comment "
>  .endif
>  
> +.if ${ARCH} == "amd64"
> +CONFIGURE_ARGS+=	--enable-mmx \
> +			--enable-mmx2 \
> +			--enable-3dnow \
> +			--enable-3dnowex \
> +			--enable-sse \
> +			--enable-sse2
> +.endif
> +
>  #.if exists(${LOCALBASE}/modules/rtc.ko)
>  #WITH_RTC=	yes
>  #.endif

I'll mail maintainer what he thinks about this Makefile patch. (I'd
rather put inside WITHOUT_RUNTIME_CPUDETECTION section first.)

-- 
Pav Lucistnik <pav at oook.cz>
              <pav at FreeBSD.org>

Legolas: Nazgulove museli otravit muj lembas...


More information about the freebsd-amd64 mailing list