VLC 4.0.0-dev
Loading...
Searching...
No Matches
vlc_cpu.h File Reference

This file provides CPU features detection. More...

Include dependency graph for vlc_cpu.h:

Go to the source code of this file.

Macros

#define HAVE_FPU   1
 Are single precision floating point operations "fast"?
#define set_cpu_funcs(name, activate, priority)

Functions

unsigned vlc_CPU (void)
 Retrieves CPU capability flags.
void vlc_CPU_set (unsigned mask)
 Masks CPU capability flags.
unsigned vlc_CPU_raw (void)
 Computes CPU capability flags.
void vlc_CPU_functions_init (const char *name, void *restrict funcs)
 Initialises DSP functions.
static void vlc_CPU_functions_init_once (const char *name, void *restrict funcs)
 Initialises DSP functions once.

Detailed Description

This file provides CPU features detection.

Macro Definition Documentation

◆ HAVE_FPU

#define HAVE_FPU   1

Are single precision floating point operations "fast"?

If this preprocessor constant is zero, floating point should be avoided (especially relevant for audio codecs).

◆ set_cpu_funcs

#define set_cpu_funcs ( name,
activate,
priority )
Value:
set_callback(VLC_CHECKED_TYPE(void (*)(void *), activate)) \
set_capability(name, priority)
const char name[16]
Definition httpd.c:1298
#define set_callback(activate)
Definition vlc_plugin.h:387
#define VLC_CHECKED_TYPE(type, value)
Definition vlc_plugin.h:325

Function Documentation

◆ vlc_CPU()

unsigned vlc_CPU ( void )

Retrieves CPU capability flags.

References cpu_flags, unlikely, and vlc_CPU_raw().

◆ vlc_CPU_functions_init()

void vlc_CPU_functions_init ( const char * name,
void *restrict funcs )

Initialises DSP functions.

This helper looks for accelerated Digital Signal Processing functions identified by the supplied type name. Those functions ares typically implemented using architecture-specific assembler code with Single Instruction Multiple Data (SIMD) opcodes for faster processing.

The exact purposes and semantics of the DSP functions is uniquely identified by a nul-terminated string.

Note
This function should not be used directly. It is recommended to use the convenience wrapper vlc_CPU_functions_init_once() instead.
Parameters
namenul-terminated type identifier (cannot be NULL)
[in,out]funcstype-specific data structure to be initialised

References init, likely, vlc_module_map(), and vlc_module_match().

Referenced by vlc_CPU_functions_init_once().

◆ vlc_CPU_functions_init_once()

void vlc_CPU_functions_init_once ( const char * name,
void *restrict funcs )
inlinestatic

Initialises DSP functions once.

This is a convenience wrapper for vlc_CPU_functions_init(). It only initialises the functions the first time it is evaluated.

References name, vlc_CPU_functions_init(), vlc_once_begin, vlc_once_complete(), and VLC_STATIC_ONCE.

◆ vlc_CPU_raw()

unsigned vlc_CPU_raw ( void )

Computes CPU capability flags.

Do not call this function directly. Call vlc_CPU() instead, which caches the correct value.

Computes CPU capability flags.

References VLC_WEAK.

Referenced by vlc_CPU(), and vlc_CPU_set().

◆ vlc_CPU_set()

void vlc_CPU_set ( unsigned mask)

Masks CPU capability flags.

This overrides the cached CPU capability flags with the intersection of the actually-detected CPU capabilities and the supplied mask. Bits cannot be added, only cleared: masking never reports a capability that hardware doesn't actually have.

This is intended for testing purposes only (e.g. checkasm), to force code paths for lesser CPU capabilities to be exercised.

Warning
This function is not thread-safe with respect to vlc_CPU(): it must be called before any thread makes its first call to vlc_CPU(), otherwise the lazy initialisation in vlc_CPU() may race with and overwrite the masked value.

References cpu_flags, and vlc_CPU_raw().