ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
avx2/luminance.c
Go to the documentation of this file.
4#include <immintrin.h>
5#include <string.h>
7
8int glyph_shape_correlation_avx2(const int16_t samples[16], const int16_t mask[16]) {
9 __m256i a = _mm256_loadu_si256((const __m256i *)(const void *)samples);
10 __m256i b = _mm256_loadu_si256((const __m256i *)(const void *)mask);
11 __m256i products = _mm256_madd_epi16(a, b);
12 __m128i sums = _mm_add_epi32(_mm256_castsi256_si128(products), _mm256_extracti128_si256(products, 1));
13 int32_t lanes[4];
14 _mm_storeu_si128((__m128i *)(void *)lanes, sums);
15 return lanes[0] + lanes[1] + lanes[2] + lanes[3];
16}
17void simd_luminance_avx2(const uint8_t *rgb, uint8_t *out, size_t width) {
18 const rgb_pixel_t *row = (const rgb_pixel_t *)rgb;
19 size_t x = 0;
20 for (; width - x >= 32; x += 32) {
21 avx2_load_rgb32_optimized(row + x, avx2_r_buffer, avx2_g_buffer, avx2_b_buffer);
22 avx2_compute_luminance_32(avx2_r_buffer, avx2_g_buffer, avx2_b_buffer, avx2_luminance_buffer);
23 memcpy(out + x, avx2_luminance_buffer, 32);
24 }
25 simd_luminance_scalar((const uint8_t *)(row + x), out + x, width - x);
26}
int glyph_shape_correlation_avx2(const int16_t samples[16], const int16_t mask[16])
void simd_luminance_avx2(const uint8_t *rgb, uint8_t *out, size_t width)
void simd_luminance_scalar(const uint8_t *rgb, uint8_t *out, size_t count)
Definition dispatch.c:57
unsigned int width
Definition fft.c:23
unsigned char uint8_t
Definition common.h:60
static bool size_t gotel_query_t * out
Definition queries.h:8
🔤 String Manipulation and Shell Escaping Utilities
Shared AVX2 helper functions.
SIMD-optimized ASCII conversion interface.