#ifndef PROCESS_CSV #define PROCESS_CSV #include #include // Define feature macros for SIMD support with carryless multiplication // We need both SIMD instructions AND carryless multiplication for the CSV parser #if defined(__AVX2__) && defined(__PCLMUL__) #define HAS_SIMD_CSV 1 #define USE_AVX2 1 #include #include #elif defined(__ARM_NEON) && (defined(__ARM_FEATURE_AES) || defined(__ARM_FEATURE_CRYPTO)) // Note: __ARM_FEATURE_CRYPTO is deprecated; prefer __ARM_FEATURE_AES // We need polynomial multiply (vmull_p64/PMULL) for carryless multiplication // Runtime check: 'pmull' flag in /proc/cpuinfo on Linux // We support both macros for compatibility with older compilers #define HAS_SIMD_CSV 1 #define USE_NEON 1 #include #endif // CSV parsing constants #define COMMA_CHAR 0x2C #define NEWLINE_CHAR 0x0A #define QUOTE_CHAR 0x22 #define ALL_ONES_MASK ~0ULL #define ALL_ZEROS_MASK 0ULL // Only expose a portable API in the public header. // Implementation may use platform-specific intrinsics internally. size_t get_delimiter_indices(uint8_t *buf, size_t len, size_t* indices); #endif