ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
dispatch.c File Reference

Go to the source code of this file.

Functions

const simd_backend_t * simd_select_backend (uint32_t features)
const simd_backend_t * simd_backend (void)
void simd_luminance_scalar (const uint8_t *rgb, uint8_t *out, size_t count)

Function Documentation

◆ simd_backend()

const simd_backend_t * simd_backend ( void )

Immutable dispatch table cached per thread; no startup constructors required.

Definition at line 36 of file dispatch.c.

36 {
37 static _Thread_local const simd_backend_t *selected;
38 if (!selected) {
39 uint32_t features = platform_cpu_features();
40 selected = simd_select_backend(features);
41 const char *requested = simd_backend_override();
42 if (requested && requested[0] && strcmp(requested, "auto") != 0) {
43 // A diagnostic override can never bypass the CPU/OS safety check.
44 selected = simd_select_backend(0);
45 for (size_t i = 0; i < sizeof(backends) / sizeof(backends[0]); i++) {
46 if (strcmp(requested, backends[i].name) == 0 &&
47 (features & backends[i].required_features) == backends[i].required_features) {
48 selected = &backends[i];
49 break;
50 }
51 }
52 }
53 }
54 return selected;
55}
const simd_backend_t * simd_select_backend(uint32_t features)
Definition dispatch.c:28
unsigned int uint32_t
Definition common.h:62
simd backend keeps the values that move through the subsystem: name, required_features,...
Definition dispatch.h:12

References simd_select_backend().

Referenced by main(), and simd_cells_backend().

◆ simd_luminance_scalar()

void simd_luminance_scalar ( const uint8_t * rgb,
uint8_t * out,
size_t count )

Definition at line 57 of file dispatch.c.

57 {
58 for (size_t i = 0; i < count; i++)
59 out[i] = (uint8_t)((77u * rgb[3 * i] + 150u * rgb[3 * i + 1] + 29u * rgb[3 * i + 2] + 128u) >> 8);
60}
unsigned char uint8_t
Definition common.h:60
static bool size_t gotel_query_t * out
Definition queries.h:8

References out.

Referenced by simd_luminance_avx2(), simd_luminance_neon(), simd_luminance_sse2(), and simd_luminance_ssse3().

◆ simd_select_backend()

const simd_backend_t * simd_select_backend ( uint32_t features)

Select only from compiled implementations whose requirements are satisfied.

Definition at line 28 of file dispatch.c.

28 {
29 for (size_t i = 0; i < sizeof(backends) / sizeof(backends[0]); i++) {
30 if ((features & backends[i].required_features) == backends[i].required_features)
31 return &backends[i];
32 }
33 return &backends[sizeof(backends) / sizeof(backends[0]) - 1];
34}

Referenced by simd_backend().