ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
video/ascii/neon/common.h
Go to the documentation of this file.
1
9#pragma once
10
11#if SIMD_SUPPORT_NEON
12
13#include <stdint.h>
14#include <stdbool.h>
15#include <arm_neon.h>
19
20// Build NEON lookup tables inline (faster than caching - 30ns rebuild vs 50ns lookup)
21static inline void build_neon_lookup_tables(utf8_palette_cache_t *utf8_cache, uint8x16x4_t *tbl, uint8x16x4_t *char_lut,
22 uint8x16x4_t *length_lut, uint8x16x4_t *char_byte0_lut,
23 uint8x16x4_t *char_byte1_lut, uint8x16x4_t *char_byte2_lut,
24 uint8x16x4_t *char_byte3_lut);
25
26// NEON-optimized RLE detection: find run length for char+color pairs
27static inline int find_rle_run_length_neon(const uint8_t *char_buf, const uint8_t *color_buf, int start_pos,
28 int max_len, uint8_t target_char, uint8_t target_color);
29
30// NEON-optimized truecolor sequence assembly
31static inline size_t neon_assemble_truecolor_sequences_true_simd(const uint8_t *char_indices, const uint8_t *r_vals,
32 const uint8_t *g_vals, const uint8_t *b_vals,
33 utf8_palette_cache_t *utf8_cache, outbuf_t *ob,
34 int num_chars);
35
36// Check if all character lengths in NEON register are the same
37static inline bool all_same_length_neon(const uint8_t *lengths, uint8_t *uniform_length);
38
39// Helper: NEON dithering
40static inline uint8x16_t apply_ordered_dither(uint8x16_t vals, int x, int y);
41
42// Helper: NEON luma calculation
43static inline uint8x16_t simd_luma_neon(uint8x16_t r, uint8x16_t g, uint8x16_t b);
44
45// Helper: Convert u8 to Q6 fixed point
46static inline uint8x16_t q6_from_u8(uint8x16_t u8_vals);
47
48#endif // SIMD_SUPPORT_NEON
unsigned char uint8_t
Definition common.h:56
ClangTool/LibTooling compatibility shim for stdbool.h.
Dynamic output buffer (auto-expanding)
SIMD-optimized ASCII conversion interface.