#include "twiddle_builder.hpp" #include #include namespace twiddle { double* build_twiddle(uint32_t log2N, double* dst) { uint32_t N = 1U << log2N; uint32_t N_quarter = N / 4; if (log2N < 11) { uint32_t stride = 1U << (10 - log2N); for (uint32_t k = 0; k < N_quarter; k++) { dst[k] = phase_table[k * stride]; } } else { double angle_step = (2.0 * M_PI) / N; for (uint32_t k = 0; k < N_quarter; k++) { dst[k] = k * angle_step; } } dst[N_quarter] = 1.0; uint8_t* p = reinterpret_cast(dst); uintptr_t aligned = (reinterpret_cast(p + N * 8 + 0x3f) & ~0x3f); return reinterpret_cast(aligned); } }