[Flac-dev] FreeBSD 4.x problem resolved
Christian Weisgerber
naddy at mips.inka.de
Sat Jan 15 08:55:34 PST 2005
Bryan Levin reported a problem of the FreeBSD flac port dumping
core on FreeBSD 4.x:
http://sourceforge.net/tracker/index.php?func=detail&aid=1099004&group_id=13478&atid=113478
It turns out that the port enabled SSE support, but FreeBSD 4.x
does not support SSE by default. (FreeBSD 5.x and later do.) I
have added a small patch to the port to check at runtime whether
the system handles SSE.
(The semantics of hw.instruction_sse are that a value of 1 means
that the kernel includes SSE handling *and* the CPU supports SSE.
A value of 0 means that the kernel will not handle SSE so it can't
be used, although the system CPU may or may not support it.)
--- src/libFLAC/cpu.c.orig
+++ src/libFLAC/cpu.c
@@ -25,6 +25,11 @@
#include <config.h>
#endif
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#endif
+
const unsigned FLAC__CPUINFO_IA32_CPUID_CMOV = 0x00008000;
const unsigned FLAC__CPUINFO_IA32_CPUID_MMX = 0x00800000;
const unsigned FLAC__CPUINFO_IA32_CPUID_FXSR = 0x01000000;
@@ -52,6 +57,15 @@
#ifndef FLAC__SSE_OS
info->data.ia32.fxsr = info->data.ia32.sse = info->data.ia32.sse2 = false;
+#else
+#if defined(__FreeBSD__)
+ {
+ int sse;
+ size_t len = sizeof(sse);
+ if (sysctlbyname("hw.instruction_sse", &sse, &len, NULL, 0) || !sse)
+ info->data.ia32.fxsr = info->data.ia32.sse = info->data.ia32.sse2 = false;
+ }
+#endif
#endif
#ifdef FLAC__USE_3DNOW
--
Christian "naddy" Weisgerber naddy at mips.inka.de
More information about the Flac-dev
mailing list