23#include "vendor/prelude/hint.h"
51[[nodiscard, gnu::const]]
52static inline long double nec_wrapl(
long double phase) [[unsequenced]] {
53 assume(0.l <= phase && phase < 1.l);
54 return phase - floorl(phase);
58[[nodiscard, gnu::const]]
59static inline double nec_wrap(
double phase) [[unsequenced]] {
60 assume(0.0 <= phase && phase < 1.0);
61 return phase - floor(phase);
65[[nodiscard, gnu::const]]
66static inline float nec_wrapf(
float phase) [[unsequenced]] {
67 assume(0.f <= phase && phase < 1.f);
68 return phase - floorf(phase);
78[[gnu::reproducible, gnu::nonnull]]
82 long double *
const __restrict phase,
83 long double *__restrict output
85 long double phase[
const restrict
static len],
86 long double output[restrict
static len]
90 for (
size_t i = 0; i < len; ++i) {
96[[gnu::reproducible, gnu::nonnull]]
100 double *
const __restrict phase,
101 double *__restrict output
103 double phase[
const restrict
static len],
104 double output[restrict
static len]
109 for (
size_t i = 0; i < len; ++i) {
115[[gnu::reproducible, gnu::nonnull]]
119 float *
const __restrict phase,
120 float *__restrict output
122 float phase[
const restrict
static len],
123 float output[restrict
static len]
128 for (
size_t i = 0; i < len; ++i) {
144[[nodiscard, gnu::const]]
146 assume(0.l <= phase && phase < 1.l);
147 return (-4.l * phase + 1.5l) / (phase + 1.5l);
151[[nodiscard, gnu::const]]
153 assume(0.0 <= phase && phase < 1.0);
154 return (-4.0 * phase + 1.5) / (phase + 1.5);
158[[nodiscard, gnu::const]]
160 assume(0.f <= phase && phase < 1.f);
161 return (-4.f * phase + 1.5f) / (phase + 1.5f);
171[[gnu::reproducible, gnu::nonnull]]
175 long double *
const __restrict phase,
176 long double *__restrict output
178 long double phase[
const restrict
static len],
179 long double output[restrict
static len]
183 for (
size_t i = 0; i < len; ++i) {
189[[gnu::reproducible, gnu::nonnull]]
193 double *
const __restrict phase,
194 double *__restrict output
196 double phase[
const restrict
static len],
197 double output[restrict
static len]
202 for (
size_t i = 0; i < len; ++i) {
208[[gnu::reproducible, gnu::nonnull]]
212 float *
const __restrict phase,
213 float *__restrict output
215 float phase[
const restrict
static len],
216 float output[restrict
static len]
221 for (
size_t i = 0; i < len; ++i) {
238[[nodiscard, gnu::const]]
240 assume(0.l <= phase && phase < 1.l);
241 assume(0.l <= duty && duty <= 1.l);
242 const auto amplitude = (-phase + 6.l) / (4.l * phase + 6.l);
243 return copysignl(amplitude, duty - phase);
247[[nodiscard, gnu::const]]
249 assume(0.0 <= phase && phase < 1.0);
250 assume(0.0 <= duty && duty <= 1.0);
251 const auto amplitude = (-phase + 6.0) / (4.0 * phase + 6.0);
252 return copysign(amplitude, duty - phase);
256[[nodiscard, gnu::const]]
258 assume(0.f <= phase && phase < 1.f);
259 assume(0.f <= duty && duty <= 1.f);
260 const auto amplitude = (-phase + 6.f) / (4.f * phase + 6.f);
261 return copysignf(amplitude, duty - phase);
272[[gnu::reproducible, gnu::nonnull]]
276 long double *
const __restrict phase,
277 long double *
const __restrict duty,
278 long double *__restrict output
280 long double phase[
const restrict
static len],
281 long double duty[
const restrict
static len],
282 long double output[restrict
static len]
286 for (
size_t i = 0; i < len; ++i) {
292[[gnu::reproducible, gnu::nonnull]]
296 double *
const __restrict phase,
297 double *
const __restrict duty,
298 double *__restrict output
300 double phase[
const restrict
static len],
301 double duty[
const restrict
static len],
302 double output[restrict
static len]
307 for (
size_t i = 0; i < len; ++i) {
313[[gnu::reproducible, gnu::nonnull]]
317 float *
const __restrict phase,
318 float *
const __restrict duty,
319 float *__restrict output
321 float phase[
const restrict
static len],
322 float duty[
const restrict
static len],
323 float output[restrict
static len]
328 for (
size_t i = 0; i < len; ++i) {
344[[nodiscard, gnu::const]]
346 assume(0.l <= phase && phase < 1.l);
351[[nodiscard, gnu::const]]
353 assume(0.0 <= phase && phase < 1.0);
358[[nodiscard, gnu::const]]
360 assume(0.f <= phase && phase < 1.f);
371[[gnu::reproducible, gnu::nonnull]]
375 long double *
const __restrict phase,
376 long double *__restrict output
378 long double phase[
const restrict
static len],
379 long double output[restrict
static len]
383 for (
size_t i = 0; i < len; ++i) {
389[[gnu::reproducible, gnu::nonnull]]
393 double *
const __restrict phase,
394 double *__restrict output
396 double phase[
const restrict
static len],
397 double output[restrict
static len]
402 for (
size_t i = 0; i < len; ++i) {
408[[gnu::reproducible, gnu::nonnull]]
412 float *
const __restrict phase,
413 float *__restrict output
415 float phase[
const restrict
static len],
416 float output[restrict
static len]
421 for (
size_t i = 0; i < len; ++i) {
436[[nodiscard, gnu::const]]
437static inline long double nec_paraboll(
long double phase) [[unsequenced]] {
438 assume(0.l <= phase && phase < 1.l);
439 const auto x = 4.l * phase - 2.l;
440 return x * (fabsl(x) - 2.l);
444[[nodiscard, gnu::const]]
446 assume(0.0 <= phase && phase < 1.0);
447 const auto x = 4.0 * phase - 2.0;
448 return x * (fabs(x) - 2.0);
452[[nodiscard, gnu::const]]
454 assume(0.f <= phase && phase < 1.f);
455 const auto x = 4.f * phase - 2.f;
456 return x * (fabsf(x) - 2.f);
466[[gnu::reproducible, gnu::nonnull]]
470 long double *
const __restrict phase,
471 long double *__restrict output
473 long double phase[
const restrict
static len],
474 long double output[restrict
static len]
478 for (
size_t i = 0; i < len; ++i) {
484[[gnu::reproducible, gnu::nonnull]]
488 double *
const __restrict phase,
489 double *__restrict output
491 double phase[
const restrict
static len],
492 double output[restrict
static len]
497 for (
size_t i = 0; i < len; ++i) {
503[[gnu::reproducible, gnu::nonnull]]
507 float *
const __restrict phase,
508 float *__restrict output
510 float phase[
const restrict
static len],
511 float output[restrict
static len]
516 for (
size_t i = 0; i < len; ++i) {
529[[nodiscard, gnu::const]]
530static inline long double nec_sinl(
long double phase) [[unsequenced]] {
533 return weight * p * (fabsl(p) - 1.l) + p;
537[[nodiscard, gnu::const]]
538static inline double nec_sin(
double phase) [[unsequenced]] {
541 return weight * p * (fabs(p) - 1.0) + p;
545[[nodiscard, gnu::const]]
546static inline float nec_sinf(
float phase) [[unsequenced]] {
549 return weight * p * (fabsf(p) - 1.f) + p;
559[[gnu::reproducible, gnu::nonnull]]
563 long double *
const __restrict phase,
564 long double *__restrict output
566 long double phase[
const restrict
static len],
567 long double output[restrict
static len]
571 for (
size_t i = 0; i < len; ++i) {
577[[gnu::reproducible, gnu::nonnull]]
581 double *
const __restrict phase,
582 double *__restrict output
584 double phase[
const restrict
static len],
585 double output[restrict
static len]
590 for (
size_t i = 0; i < len; ++i) {
596[[gnu::reproducible, gnu::nonnull]]
600 float *
const __restrict phase,
601 float *__restrict output
603 float phase[
const restrict
static len],
604 float output[restrict
static len]
609 for (
size_t i = 0; i < len; ++i) {
618[[nodiscard, gnu::const]]
619static inline long double nec_circlel(
long double phase) [[unsequenced]] {
621 return copysignl(sqrtl(fabsl(p)), p);
625[[nodiscard, gnu::const]]
626static inline double nec_circle(
double phase) [[unsequenced]] {
628 return copysign(sqrt(fabs(p)), p);
632[[nodiscard, gnu::const]]
635 return copysignf(sqrtf(fabsf(p)), p);
645[[gnu::reproducible, gnu::nonnull]]
649 long double *
const __restrict phase,
650 long double *__restrict output
652 long double phase[
const restrict
static len],
653 long double output[restrict
static len]
657 for (
size_t i = 0; i < len; ++i) {
663[[gnu::reproducible, gnu::nonnull]]
667 double *
const __restrict phase,
668 double *__restrict output
670 double phase[
const restrict
static len],
671 double output[restrict
static len]
676 for (
size_t i = 0; i < len; ++i) {
682[[gnu::reproducible, gnu::nonnull]]
686 float *
const __restrict phase,
687 float *__restrict output
689 float phase[
const restrict
static len],
690 float output[restrict
static len]
695 for (
size_t i = 0; i < len; ++i) {
703[[nodiscard, gnu::const]]
705 assume(0.l <= phase && phase < 1.l);
706 return -2.l * phase + 1.l;
710[[nodiscard, gnu::const]]
712 assume(0.0 <= phase && phase < 1.0);
713 return -2.0 * phase + 1.0;
717[[nodiscard, gnu::const]]
719 assume(0.f <= phase && phase < 1.f);
720 return -2.f * phase + 1.f;
730[[gnu::reproducible, gnu::nonnull]]
734 long double *
const __restrict phase,
735 long double *__restrict output
737 long double phase[
const restrict
static len],
738 long double output[restrict
static len]
742 for (
size_t i = 0; i < len; ++i) {
748[[gnu::reproducible, gnu::nonnull]]
752 double *
const __restrict phase,
753 double *__restrict output
755 double phase[
const restrict
static len],
756 double output[restrict
static len]
761 for (
size_t i = 0; i < len; ++i) {
767[[gnu::reproducible, gnu::nonnull]]
771 float *
const __restrict phase,
772 float *__restrict output
774 float phase[
const restrict
static len],
775 float output[restrict
static len]
780 for (
size_t i = 0; i < len; ++i) {
789[[nodiscard, gnu::const]]
790static inline long double nec_squarel(
long double phase,
long double duty) [[unsequenced]] {
791 assume(0.l <= phase && phase < 1.l);
792 assume(0.l <= duty && duty <= 1.l);
793 return copysignl(1.l, duty - phase);
797[[nodiscard, gnu::const]]
798static inline double nec_square(
double phase,
double duty) [[unsequenced]] {
799 assume(0.0 <= phase && phase < 1.0);
800 assume(0.0 <= duty && duty <= 1.0);
801 return copysign(1.0, duty - phase);
805[[nodiscard, gnu::const]]
806static inline float nec_squaref(
float phase,
float duty) [[unsequenced]] {
807 assume(0.f <= phase && phase < 1.f);
808 assume(0.f <= duty && duty <= 1.f);
809 return copysignf(1.f, duty - phase);
820[[gnu::reproducible, gnu::nonnull]]
824 long double *
const __restrict phase,
825 long double *
const __restrict duty,
826 long double *__restrict output
828 long double phase[
const restrict
static len],
829 long double duty[
const restrict
static len],
830 long double output[restrict
static len]
834 for (
size_t i = 0; i < len; ++i) {
840[[gnu::reproducible, gnu::nonnull]]
844 double *
const __restrict phase,
845 double *
const __restrict duty,
846 double *__restrict output
848 double phase[
const restrict
static len],
849 double duty[
const restrict
static len],
850 double output[restrict
static len]
855 for (
size_t i = 0; i < len; ++i) {
861[[gnu::reproducible, gnu::nonnull]]
865 float *
const __restrict phase,
866 float *
const __restrict duty,
867 float *__restrict output
869 float phase[
const restrict
static len],
870 float duty[
const restrict
static len],
871 float output[restrict
static len]
876 for (
size_t i = 0; i < len; ++i) {
884[[nodiscard, gnu::const]]
886 assume(0.l <= phase && phase < 1.l);
891[[nodiscard, gnu::const]]
893 assume(0.0 <= phase && phase < 1.0);
898[[nodiscard, gnu::const]]
900 assume(0.f <= phase && phase < 1.f);
911[[gnu::reproducible, gnu::nonnull]]
915 long double *
const __restrict phase,
916 long double *__restrict output
918 long double phase[
const restrict
static len],
919 long double output[restrict
static len]
923 for (
size_t i = 0; i < len; ++i) {
929[[gnu::reproducible, gnu::nonnull]]
933 double *
const __restrict phase,
934 double *__restrict output
936 double phase[
const restrict
static len],
937 double output[restrict
static len]
942 for (
size_t i = 0; i < len; ++i) {
948[[gnu::reproducible, gnu::nonnull]]
952 float *
const __restrict phase,
953 float *__restrict output
955 float phase[
const restrict
static len],
956 float output[restrict
static len]
961 for (
size_t i = 0; i < len; ++i) {