aboutsummaryrefslogtreecommitdiffstats
path: root/common
Commit message (Collapse)AuthorAgeFilesLines
* Be less messy with PFFFTChris Robinson2023-12-092-15/+60
| | | | | Remove a 1-element array for an over-allocated struct array. Also add a wrapper struct for C++.
* Clean up some more clang-tidy warningsChris Robinson2023-12-081-1/+3
|
* Fix some clang-tidy warningsChris Robinson2023-12-089-123/+121
|
* Make sure the size is large enough for allocating a structChris Robinson2023-12-051-1/+2
|
* Assert that a value is in the expected rangeChris Robinson2023-12-041-0/+2
|
* Remove some unnecessary atomic wrappersChris Robinson2023-12-032-9/+6
|
* Handle systems that don't support std::cyl_bessel_iChris Robinson2023-11-181-2/+45
|
* Use the C++ standard's regular modified Bessel functionChris Robinson2023-11-081-29/+2
|
* Precompute a value used multiple timesChris Robinson2023-11-071-19/+9
|
* Remove an unnecessary struct memberChris Robinson2023-11-041-0/+3
|
* Remove unnecessary extra macrosChris Robinson2023-10-261-55/+37
|
* Don't make a float version of complex_fftChris Robinson2023-10-252-26/+19
|
* Use a more appropriate type trait to remove a pointerChris Robinson2023-10-191-1/+1
|
* Combine some more VADD(VMUL(... into VMADD(...Chris Robinson2023-10-171-48/+44
|
* Mark some output buffer pointers as RESTRICTChris Robinson2023-10-161-15/+17
|
* Replace some function-like macros with real functionsChris Robinson2023-10-161-117/+136
|
* Avoid some macros that use inputs multiple timesChris Robinson2023-10-161-25/+57
|
* Constify some parametersChris Robinson2023-10-162-19/+24
|
* Use a split filter for the FIR-based UHJ encodersChris Robinson2023-10-141-0/+4
| | | | | | | | This applies the all-pass filter in two steps, first as a relatively short time-domain FIR filter, then as a series of frequency domain convolutions (using complex multiplies). Time-domain convolution scales poorly, so larger convolutions benefit from being done in the frequency domain (though the first part is still done in the time domain, to avoid longer delays).
* Don't use al::vector where not neededChris Robinson2023-10-121-5/+3
|
* Remove an unnecessary deque with a custom allocatorChris Robinson2023-10-111-16/+0
|
* Make and use a separate zconvolve method without scalingChris Robinson2023-10-112-6/+89
| | | | | | When you're doing hundreds or thousands of separate zconvolve calls into the same buffer, it's more efficient to do the multiply once at the end instead of in each call.
* Fix conversion warningsChris Robinson2023-10-101-19/+21
|
* Fix array lookup indexChris Robinson2023-10-101-2/+3
|
* Use size_t and uint for non-negative values and indicesChris Robinson2023-10-102-210/+210
|
* Use an anonymous namespace instead of static functionsChris Robinson2023-10-101-194/+202
|
* Combine some VADD(VMUL(... to VMADD(...Chris Robinson2023-10-101-43/+43
|
* Use a bool instead of an int for 0/1Chris Robinson2023-10-091-25/+27
| | | | Also update some comments.
* Cleanup PFFFTChris Robinson2023-10-091-571/+604
| | | | | | Make stylization more consistent. Remove SVMUL (they all simulated it with a LD_PS1 on the scalar). Avoid calling LD_PS1 on the same value in a loop.
* Avoid std::aligned_storage, it's deprecated in newer C++Chris Robinson2023-10-081-3/+3
|
* Remove more type-punning from pffftChris Robinson2023-10-081-52/+63
|
* Clean up some more type-punning in pffftChris Robinson2023-10-081-22/+42
|
* Avoid some type-punning and clean up pffft a bitChris Robinson2023-10-081-161/+148
|
* Update and clarify some commentsChris Robinson2023-10-072-91/+93
|
* Add a generic GCC vector extension fallback for pffftChris Robinson2023-10-061-13/+80
| | | | Also combine multiple allocations into one.
* Improve NEON shufflingChris Robinson2023-10-061-21/+3
|
* Fix x86-64 MSVC checkChris Robinson2023-10-061-1/+1
|
* Include a copy of PFFFTChris Robinson2023-10-062-0/+2201
| | | | | This is a notably faster FFT implementation for 32-bit float signals, provided under a 3-clause BSD license.
* Clear the 0 and half-frequency bins for the phase shift filterChris Robinson2023-10-031-2/+5
| | | | | | This doesn't change the filter response, but is more correct since a real signal won't have an imaginary value on them (it can only have a magnitude with a phase of 0 or pi).
* Add a wrapper for COM initializationChris Robinson2023-09-291-0/+38
| | | | | This helps ensure COM is initialized and deinitialized in order relative to other objects (e.g. ComPtr).
* Use std::array instead of a C-style arrayChris Robinson2023-09-251-1/+2
|
* Compile with c++20 support (#920)Deal2023-09-252-6/+8
| | | | | * Compile with c++20 support * Update CMakeLists.txt
* Shift the appropriate typeChris Robinson2023-09-222-6/+12
|
* Rename noinline to NOINLINEChris Robinson2023-09-171-3/+3
| | | | To avoid clashes with compilers that use it as a keyword already
* Don't inline some big functionsChris Robinson2023-09-161-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is very dumb. Template functions are implicitly marked inline according to C++, and contrary to popular belief, "inline" *does* influence the compiler's decision to inline a function. A function the compiler may not have decided to inline normally may be inlined anyway, or issue a warning if it still decides not to inline, if explicitly or implicitly marked as such (or does inline it as requested, but then decides to not inline different functions it normally would because of a cumulative code size increase or something). Furthermore, once a function becomes inline due to being a template function, there's no way to undo it. Marking an inline function "noinline" pushes the problem the other way, causing the compiler to not inline a function it may have decided was beneficial to inline. There's no way to declare a template function to be inlined based solely on compiler heuristics, it will always be influenced by the implicit "inline" or explicit "noinline". That's what's happening here. A number of functions had been combined into a smaller number of large-ish template functions to reduce code duplication and ease maintanence, causing them to be implicitly inline as a side-effect. GCC then manages to inline these larger functions as implicitly requested, but in doing so prevents other smaller functions (which are explicitly marked inline) from being inlined due to excessive code increase and issue a warning. The "noinline" is a heavy-handed method of un-pessimizing the optimization pass, on the assumption the compiler apparently doesn't actually want to inline the template functions, but does so because they're technically marked inline. There's no good option here until it gets acknowledged that inline does mean something beyond allowing multiple definitions, and that template (and other types of) function definitions sometimes (if not most often) want to allow multiple definitions but don't want an artificial/detrimental boost in inline prioritization. /rant
* Improve the FFT bit reversal computationChris Robinson2023-09-092-34/+43
| | | | | This also allows to include 11-bit indices in the fast lookup table path, without exceeding GCC's internal limit of compile-time calculations.
* Optimize FFT calculations for lengths of 1024 or lessChris Robinson2023-09-091-23/+64
| | | | | This replaces sin/cos calls with an array of 10 complex values for lookup tables, and separates the first loop iteration with a constant x1 multiplier.
* Use a bit_cast instead of a union for type-punningChris Robinson2023-08-251-31/+16
|
* Fix conversion and maybe-unused warnings with my_fopenChris Robinson2023-08-181-3/+10
|
* Use a string_view for the backend open methodChris Robinson2023-08-062-10/+12
|