Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Stefan Strogin
flac
Commits
23778a3a
Commit
23778a3a
authored
Jun 25, 2016
by
Erik de Castro Lopo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
libFLAC/cpu.c: More pre-processor cleanups
parent
36a0ab10
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
36 additions
and
39 deletions
+36
-39
src/libFLAC/cpu.c
src/libFLAC/cpu.c
+36
-39
No files found.
src/libFLAC/cpu.c
View file @
23778a3a
...
...
@@ -37,12 +37,36 @@
#include "private/cpu.h"
#include <stdlib.h>
#include <memory.h>
#ifdef DEBUG
# include <stdio.h>
# include <stdio.h>
#endif
#if defined (__NetBSD__) || defined(__OpenBSD__)
# include <sys/param.h>
# include <sys/sysctl.h>
# include <machine/cpu.h>
#endif
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__APPLE__)
# include <sys/types.h>
# include <sys/sysctl.h>
#endif
#if defined(__linux__) && defined(FLAC__CPU_IA32) && !defined FLAC__NO_ASM && (defined FLAC__HAS_NASM || FLAC__HAS_X86INTRIN) && !FLAC__SSE_OS
# include <sys/ucontext.h>
#endif
#if defined(_MSC_VER)
# include <windows.h>
# include <intrin.h>
/* for __cpuid() and _xgetbv() */
#endif
#if defined __GNUC__ && defined HAVE_CPUID_H
# include <cpuid.h>
/* for __get_cpuid() and __get_cpuid_max() */
#endif
#if defined FLAC__CPU_IA32
# include <signal.h>
static
void
disable_sse
(
FLAC__CPUInfo
*
info
)
{
...
...
@@ -71,17 +95,6 @@ static void disable_avx(FLAC__CPUInfo *info)
}
#endif
#if defined (__NetBSD__) || defined(__OpenBSD__)
#include <sys/param.h>
#include <sys/sysctl.h>
#include <machine/cpu.h>
#endif
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__APPLE__)
#include <sys/types.h>
#include <sys/sysctl.h>
#endif
#ifdef FLAC__CPU_IA32
/* these are flags in EDX of CPUID AX=00000001 */
static
const
unsigned
FLAC__CPUINFO_IA32_CPUID_CMOV
=
0x00008000
;
...
...
@@ -109,8 +122,7 @@ static const unsigned FLAC__CPUINFO_IA32_CPUID_AVX2 = 0x00000020;
/*
* Extra stuff needed for detection of OS support for SSE on IA-32
*/
#if defined(FLAC__CPU_IA32) && !defined FLAC__NO_ASM && (defined FLAC__HAS_NASM || FLAC__HAS_X86INTRIN) && !FLAC__SSE_OS
# if defined(__linux__)
#if defined(__linux__) && defined(FLAC__CPU_IA32) && !defined FLAC__NO_ASM && (defined FLAC__HAS_NASM || FLAC__HAS_X86INTRIN) && !FLAC__SSE_OS
/*
* If the OS doesn't support SSE, we will get here with a SIGILL. We
* modify the return address to jump over the offending SSE instruction
...
...
@@ -124,15 +136,11 @@ static const unsigned FLAC__CPUINFO_IA32_CPUID_AVX2 = 0x00000020;
* 6 bytes extra in case our estimate is wrong
* 12 bytes puts us in the NOP "landing zone"
*/
# include <sys/ucontext.h>
static
void
sigill_handler_sse_os
(
int
signal
,
siginfo_t
*
si
,
void
*
uc
)
{
(
void
)
signal
,
(
void
)
si
;
((
ucontext_t
*
)
uc
)
->
uc_mcontext
.
gregs
[
14
/*REG_EIP*/
]
+=
3
+
3
+
6
;
}
# elif defined(_MSC_VER)
# include <windows.h>
# endif
static
void
sigill_handler_sse_os
(
int
signal
,
siginfo_t
*
si
,
void
*
uc
)
{
(
void
)
signal
,
(
void
)
si
;
((
ucontext_t
*
)
uc
)
->
uc_mcontext
.
gregs
[
14
/*REG_EIP*/
]
+=
3
+
3
+
6
;
}
#endif
...
...
@@ -206,10 +214,7 @@ void FLAC__cpu_info(FLAC__CPUInfo *info)
* now have to check for OS support of SSE instructions
*/
if
(
info
->
ia32
.
sse
)
{
#if !FLAC__SSE_OS
/* assume user knows better than us; turn it off */
disable_sse
(
info
);
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__APPLE__)
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__APPLE__)
int
sse
=
0
;
size_t
len
;
/* at least one of these must work: */
...
...
@@ -407,18 +412,11 @@ void FLAC__cpu_info(FLAC__CPUInfo *info)
#if (defined FLAC__CPU_IA32 || defined FLAC__CPU_X86_64) && FLAC__HAS_X86INTRIN
#if defined _MSC_VER
#include <intrin.h>
/* for __cpuid() and _xgetbv() */
#elif defined __GNUC__ && defined HAVE_CPUID_H
#include <cpuid.h>
/* for __get_cpuid() and __get_cpuid_max() */
#endif
FLAC__uint32
FLAC__cpu_have_cpuid_x86
(
void
)
{
#ifdef FLAC__CPU_X86_64
return
1
;
#else
# if defined _MSC_VER || defined __INTEL_COMPILER
/* Do they support CPUs w/o CPUID support (or OSes that work on those CPUs)? */
#elif defined _MSC_VER || defined __INTEL_COMPILER
/* Do they support CPUs w/o CPUID support (or OSes that work on those CPUs)? */
FLAC__uint32
flags1
,
flags2
;
__asm
{
pushfd
...
...
@@ -437,14 +435,13 @@ FLAC__uint32 FLAC__cpu_have_cpuid_x86(void)
return
1
;
else
return
0
;
#
elif defined __GNUC__ && defined HAVE_CPUID_H
#elif defined __GNUC__ && defined HAVE_CPUID_H
if
(
__get_cpuid_max
(
0
,
0
)
!=
0
)
return
1
;
else
return
0
;
#
else
#else
return
0
;
# endif
#endif
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment