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                          [EMAIL PROTECTED]
_______________________________________________
Flac-dev mailing list
Flac-dev@xiph.org
http://lists.xiph.org/mailman/listinfo/flac-dev

Reply via email to