From 2f7293b09fc9694f84b37f414ed0f9b4082cb7e7 Mon Sep 17 00:00:00 2001 From: Josh Coalson Date: Sat, 12 Feb 2005 16:55:39 +0000 Subject: [PATCH] add patch: on freebsd, detect via sysctl whether OS supports SSE --- src/libFLAC/cpu.c | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/src/libFLAC/cpu.c b/src/libFLAC/cpu.c index 1e6b2799..86ecad0f 100644 --- a/src/libFLAC/cpu.c +++ b/src/libFLAC/cpu.c @@ -38,19 +38,25 @@ #endif #if defined FLAC__CPU_PPC -#if !defined FLAC__NO_ASM -#if defined FLAC__SYS_DARWIN -#include -#include -#include -#include -#include -#ifndef CPU_SUBTYPE_POWERPC_970 -#define CPU_SUBTYPE_POWERPC_970 ((cpu_subtype_t) 100) -#endif -#else /* FLAC__SYS_DARWIN */ -#include -#include +# if !defined FLAC__NO_ASM +# if defined FLAC__SYS_DARWIN +# include +# include +# include +# include +# include +# ifndef CPU_SUBTYPE_POWERPC_970 +# define CPU_SUBTYPE_POWERPC_970 ((cpu_subtype_t) 100) +# endif +# else /* FLAC__SYS_DARWIN */ + +# ifdef __FreeBSD__ +# include +# include +# endif + +# include +# include static sigjmp_buf jmpbuf; static volatile sig_atomic_t canjump = 0; @@ -64,8 +70,8 @@ static void sigill_handler (int sig) canjump = 0; siglongjmp (jmpbuf, 1); } -#endif /* FLAC__SYS_DARWIN */ -#endif /* FLAC__NO_ASM */ +# endif /* FLAC__SYS_DARWIN */ +# endif /* FLAC__NO_ASM */ #endif /* FLAC__CPU_PPC */ const unsigned FLAC__CPUINFO_IA32_CPUID_CMOV = 0x00008000; @@ -95,6 +101,14 @@ void FLAC__cpu_info(FLAC__CPUInfo *info) #ifndef FLAC__SSE_OS info->data.ia32.fxsr = info->data.ia32.sse = info->data.ia32.sse2 = false; +#elif defined(__FreeBSD__) + /* on FreeBSD we can double-check via sysctl whether the OS supports SSE */ + { + 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 #ifdef FLAC__USE_3DNOW