Skip site navigation (1)Skip section navigation (2)
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>