10#include "vendor/prelude/hint.h"
26[[nodiscard, gnu::const]]
27inline long double nec_wrapl(
long double phase) [[unsequenced]] {
28 return phase - floorl(phase);
32[[nodiscard, gnu::const]]
33inline double nec_wrap(
double phase) [[unsequenced]] {
34 return phase - floor(phase);
38[[nodiscard, gnu::const]]
39inline float nec_wrapf(
float phase) [[unsequenced]] {
40 return phase - floorf(phase);
50[[gnu::reproducible, gnu::nonnull]]
54 const long double *__restrict phase,
55 long double *__restrict output
57 const long double phase[restrict
static len],
58 long double output[restrict
static len]
62 for (
size_t i = 0; i < len; ++i) {
68[[gnu::reproducible, gnu::nonnull]]
72 const double *__restrict phase,
73 double *__restrict output
75 const double phase[restrict
static len],
76 double output[restrict
static len]
81 for (
size_t i = 0; i < len; ++i) {
87[[gnu::reproducible, gnu::nonnull]]
91 const float *__restrict phase,
92 float *__restrict output
94 const float phase[restrict
static len],
95 float output[restrict
static len]
100 for (
size_t i = 0; i < len; ++i) {
116[[nodiscard, gnu::const]]
118 assume(0.l <= phase && phase < 1.l);
119 return (-4.l * phase + 1.5l) / (phase + 1.5l);
123[[nodiscard, gnu::const]]
125 assume(0.0 <= phase && phase < 1.0);
126 return (-4.0 * phase + 1.5) / (phase + 1.5);
130[[nodiscard, gnu::const]]
132 assume(0.f <= phase && phase < 1.f);
133 return (-4.f * phase + 1.5f) / (phase + 1.5f);
143[[gnu::reproducible, gnu::nonnull]]
147 const long double *__restrict phase,
148 long double *__restrict output
150 const long double phase[restrict
static len],
151 long double output[restrict
static len]
155 for (
size_t i = 0; i < len; ++i) {
161[[gnu::reproducible, gnu::nonnull]]
165 const double *__restrict phase,
166 double *__restrict output
168 const double phase[restrict
static len],
169 double output[restrict
static len]
174 for (
size_t i = 0; i < len; ++i) {
180[[gnu::reproducible, gnu::nonnull]]
184 const float *__restrict phase,
185 float *__restrict output
187 const float phase[restrict
static len],
188 float output[restrict
static len]
193 for (
size_t i = 0; i < len; ++i) {
210[[nodiscard, gnu::const]]
212 assume(0.l <= phase && phase < 1.l);
213 assume(0.l <= duty && duty <= 1.l);
214 const auto amplitude = (-phase + 6.l) / (4.l * phase + 6.l);
215 return copysignl(amplitude, duty - phase);
219[[nodiscard, gnu::const]]
221 assume(0.0 <= phase && phase < 1.0);
222 assume(0.0 <= duty && duty <= 1.0);
223 const auto amplitude = (-phase + 6.0) / (4.0 * phase + 6.0);
224 return copysign(amplitude, duty - phase);
228[[nodiscard, gnu::const]]
230 assume(0.f <= phase && phase < 1.f);
231 assume(0.f <= duty && duty <= 1.f);
232 const auto amplitude = (-phase + 6.f) / (4.f * phase + 6.f);
233 return copysignf(amplitude, duty - phase);
244[[gnu::reproducible, gnu::nonnull]]
248 const long double *__restrict phase,
249 const long double *__restrict duty,
250 long double *__restrict output
252 const long double phase[restrict
static len],
253 const long double duty[restrict
static len],
254 long double output[restrict
static len]
258 for (
size_t i = 0; i < len; ++i) {
264[[gnu::reproducible, gnu::nonnull]]
268 const double *__restrict phase,
269 const double *__restrict duty,
270 double *__restrict output
272 const double phase[restrict
static len],
273 const double duty[restrict
static len],
274 double output[restrict
static len]
279 for (
size_t i = 0; i < len; ++i) {
285[[gnu::reproducible, gnu::nonnull]]
289 const float *__restrict phase,
290 const float *__restrict duty,
291 float *__restrict output
293 const float phase[restrict
static len],
294 const float duty[restrict
static len],
295 float output[restrict
static len]
300 for (
size_t i = 0; i < len; ++i) {
316[[nodiscard, gnu::const]]
318 assume(0.l <= phase && phase < 1.l);
323[[nodiscard, gnu::const]]
325 assume(0.0 <= phase && phase < 1.0);
330[[nodiscard, gnu::const]]
332 assume(0.f <= phase && phase < 1.f);
343[[gnu::reproducible, gnu::nonnull]]
347 const long double *__restrict phase,
348 long double *__restrict output
350 const long double phase[restrict
static len],
351 long double output[restrict
static len]
355 for (
size_t i = 0; i < len; ++i) {
361[[gnu::reproducible, gnu::nonnull]]
365 const double *__restrict phase,
366 double *__restrict output
368 const double phase[restrict
static len],
369 double output[restrict
static len]
374 for (
size_t i = 0; i < len; ++i) {
380[[gnu::reproducible, gnu::nonnull]]
384 const float *__restrict phase,
385 float *__restrict output
387 const float phase[restrict
static len],
388 float output[restrict
static len]
393 for (
size_t i = 0; i < len; ++i) {
408[[nodiscard, gnu::const]]
410 assume(0.l <= phase && phase < 1.l);
411 const auto x = 4.l * phase - 2.l;
412 return x * (fabsl(x) - 2.l);
416[[nodiscard, gnu::const]]
418 assume(0.0 <= phase && phase < 1.0);
419 const auto x = 4.0 * phase - 2.0;
420 return x * (fabs(x) - 2.0);
424[[nodiscard, gnu::const]]
426 assume(0.f <= phase && phase < 1.f);
427 const auto x = 4.f * phase - 2.f;
428 return x * (fabsf(x) - 2.f);
438[[gnu::reproducible, gnu::nonnull]]
442 const long double *__restrict phase,
443 long double *__restrict output
445 const long double phase[restrict
static len],
446 long double output[restrict
static len]
450 for (
size_t i = 0; i < len; ++i) {
456[[gnu::reproducible, gnu::nonnull]]
460 const double *__restrict phase,
461 double *__restrict output
463 const double phase[restrict
static len],
464 double output[restrict
static len]
469 for (
size_t i = 0; i < len; ++i) {
475[[gnu::reproducible, gnu::nonnull]]
479 const float *__restrict phase,
480 float *__restrict output
482 const float phase[restrict
static len],
483 float output[restrict
static len]
488 for (
size_t i = 0; i < len; ++i) {
512[[nodiscard, gnu::const]]
513inline long double nec_sinl(
long double phase) [[unsequenced]] {
515 return 0.225l * p * (fabsl(p) - 1.l) + p;
519[[nodiscard, gnu::const]]
520inline double nec_sin(
double phase) [[unsequenced]] {
522 return 0.225 * p * (fabs(p) - 1.0) + p;
526[[nodiscard, gnu::const]]
527inline float nec_sinf(
float phase) [[unsequenced]] {
529 return 0.225f * p * (fabsf(p) - 1.f) + p;
539[[gnu::reproducible, gnu::nonnull]]
543 const long double *__restrict phase,
544 long double *__restrict output
546 const long double phase[restrict
static len],
547 long double output[restrict
static len]
551 for (
size_t i = 0; i < len; ++i) {
557[[gnu::reproducible, gnu::nonnull]]
561 const double *__restrict phase,
562 double *__restrict output
564 const double phase[restrict
static len],
565 double output[restrict
static len]
570 for (
size_t i = 0; i < len; ++i) {
576[[gnu::reproducible, gnu::nonnull]]
580 const float *__restrict phase,
581 float *__restrict output
583 const float phase[restrict
static len],
584 float output[restrict
static len]
589 for (
size_t i = 0; i < len; ++i) {
598[[nodiscard, gnu::const]]
599inline long double nec_circlel(
long double phase) [[unsequenced]] {
601 return copysignl(sqrtl(fabsl(p)), p);
605[[nodiscard, gnu::const]]
608 return copysign(sqrt(fabs(p)), p);
612[[nodiscard, gnu::const]]
615 return copysignf(sqrtf(fabsf(p)), p);
625[[gnu::reproducible, gnu::nonnull]]
629 const long double *__restrict phase,
630 long double *__restrict output
632 const long double phase[restrict
static len],
633 long double output[restrict
static len]
637 for (
size_t i = 0; i < len; ++i) {
643[[gnu::reproducible, gnu::nonnull]]
647 const double *__restrict phase,
648 double *__restrict output
650 const double phase[restrict
static len],
651 double output[restrict
static len]
656 for (
size_t i = 0; i < len; ++i) {
662[[gnu::reproducible, gnu::nonnull]]
666 const float *__restrict phase,
667 float *__restrict output
669 const float phase[restrict
static len],
670 float output[restrict
static len]
675 for (
size_t i = 0; i < len; ++i) {
683[[nodiscard, gnu::const]]
685 assume(0.l <= phase && phase < 1.l);
686 return -2.l * phase + 1.l;
690[[nodiscard, gnu::const]]
692 assume(0.0 <= phase && phase < 1.0);
693 return -2.0 * phase + 1.0;
697[[nodiscard, gnu::const]]
699 assume(0.f <= phase && phase < 1.f);
700 return -2.f * phase + 1.f;
710[[gnu::reproducible, gnu::nonnull]]
714 const long double *__restrict phase,
715 long double *__restrict output
717 const long double phase[restrict
static len],
718 long double output[restrict
static len]
722 for (
size_t i = 0; i < len; ++i) {
728[[gnu::reproducible, gnu::nonnull]]
732 const double *__restrict phase,
733 double *__restrict output
735 const double phase[restrict
static len],
736 double output[restrict
static len]
741 for (
size_t i = 0; i < len; ++i) {
747[[gnu::reproducible, gnu::nonnull]]
751 const float *__restrict phase,
752 float *__restrict output
754 const float phase[restrict
static len],
755 float output[restrict
static len]
760 for (
size_t i = 0; i < len; ++i) {
769[[nodiscard, gnu::const]]
770inline long double nec_squarel(
long double phase,
long double duty) [[unsequenced]] {
771 assume(0.l <= phase && phase < 1.l);
772 assume(0.l <= duty && duty <= 1.l);
773 return copysignl(1.l, duty - phase);
777[[nodiscard, gnu::const]]
778inline double nec_square(
double phase,
double duty) [[unsequenced]] {
779 assume(0.0 <= phase && phase < 1.0);
780 assume(0.0 <= duty && duty <= 1.0);
781 return copysign(1.0, duty - phase);
785[[nodiscard, gnu::const]]
786inline float nec_squaref(
float phase,
float duty) [[unsequenced]] {
787 assume(0.f <= phase && phase < 1.f);
788 assume(0.f <= duty && duty <= 1.f);
789 return copysignf(1.f, duty - phase);
800[[gnu::reproducible, gnu::nonnull]]
804 const long double *__restrict phase,
805 const long double *__restrict duty,
806 long double *__restrict output
808 const long double phase[restrict
static len],
809 const long double duty[restrict
static len],
810 long double output[restrict
static len]
814 for (
size_t i = 0; i < len; ++i) {
820[[gnu::reproducible, gnu::nonnull]]
824 const double *__restrict phase,
825 const double *__restrict duty,
826 double *__restrict output
828 const double phase[restrict
static len],
829 const double duty[restrict
static len],
830 double output[restrict
static len]
835 for (
size_t i = 0; i < len; ++i) {
841[[gnu::reproducible, gnu::nonnull]]
845 const float *__restrict phase,
846 const float *__restrict duty,
847 float *__restrict output
849 const float phase[restrict
static len],
850 const float duty[restrict
static len],
851 float output[restrict
static len]
856 for (
size_t i = 0; i < len; ++i) {
864[[nodiscard, gnu::const]]
866 assume(0.l <= phase && phase < 1.l);
871[[nodiscard, gnu::const]]
873 assume(0.0 <= phase && phase < 1.0);
878[[nodiscard, gnu::const]]
880 assume(0.f <= phase && phase < 1.f);
891[[gnu::reproducible, gnu::nonnull]]
895 const long double *__restrict phase,
896 long double *__restrict output
898 const long double phase[restrict
static len],
899 long double output[restrict
static len]
903 for (
size_t i = 0; i < len; ++i) {
909[[gnu::reproducible, gnu::nonnull]]
913 const double *__restrict phase,
914 double *__restrict output
916 const double phase[restrict
static len],
917 double output[restrict
static len]
922 for (
size_t i = 0; i < len; ++i) {
928[[gnu::reproducible, gnu::nonnull]]
932 const float *__restrict phase,
933 float *__restrict output
935 const float phase[restrict
static len],
936 float output[restrict
static len]
941 for (
size_t i = 0; i < len; ++i) {