Date: Sat, 21 May 2005 19:44:12 +0200 From: Pav Lucistnik <pav@oook.cz> To: Axel Gonzalez <loox@e-shell.net> Cc: freebsd-amd64@freebsd.org Subject: Re: mplayer, amd64, and CPU flags [patch] Message-ID: <1116697452.79313.31.camel@hood.oook.cz> In-Reply-To: <200505211237.00974.loox@e-shell.net> References: <20050521022130.GW52914@afflictions.org> <20050521105451.V92958@fw.reifenberger.com> <200505211237.00974.loox@e-shell.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Axel Gonzalez p=ED=B9e v so 21. 05. 2005 v 12:37 -0500: > Maybe this is a little unnecesary since its amd64 and should support all = extra=20 > flags (at the end its a patch to the makefile), and the only file broken = is=20 > to get the configure arguments, cpu detection inside the mplayer binary w= orks=20 > perfectly >=20 > on TOOLS/cpuinfo.c: >=20 > 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" > : "=3Dm" (regs.eax), "=3Dm" (regs.ebx), "=3Dm" (regs.ecx)= ,=20 > "=3Dm" (regs.edx) > : "g" (func) > : "%eax", "%ecx", "%edx"); >=20 > printf(""); // **** NOTE this *extra* printf() > return regs; > } >=20 >=20 > with the printf: >=20 > # 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 mc= a=20 > 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+ >=20 > w/o the printf() >=20 > # TOOLS/cpuinfo > vendor_id :=20 > model name : Unknown CPU >=20 >=20 > why this works, i have no idea. Maybe its something to do with the regist= ers,=20 > 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 CP= U=20 > (and the printf seems to fix the problem anyways) >=20 >=20 > this is a commitable patch to the makefile: >=20 > --- Makefile.orig Sat May 21 10:58:38 2005 > +++ Makefile Sat May 21 11:01:44 2005 > @@ -353,6 +353,15 @@ > PLIST_SUB+=3D VIDIX=3D"@comment " > .endif > =20 > +.if ${ARCH} =3D=3D "amd64" > +CONFIGURE_ARGS+=3D --enable-mmx \ > + --enable-mmx2 \ > + --enable-3dnow \ > + --enable-3dnowex \ > + --enable-sse \ > + --enable-sse2 > +.endif > + > #.if exists(${LOCALBASE}/modules/rtc.ko) > #WITH_RTC=3D yes > #.endif I'll mail maintainer what he thinks about this Makefile patch. (I'd rather put inside WITHOUT_RUNTIME_CPUDETECTION section first.) --=20 Pav Lucistnik <pav@oook.cz> <pav@FreeBSD.org> Legolas: Nazgulove museli otravit muj lembas...
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1116697452.79313.31.camel>