484#pragma once
485
488
494
495
496
498
500
501
503
508
509
510
515 }
516
517
519 return from_raw(simd::platforms::load_u32_4(
reinterpret_cast<const u32*
>(ptr)));
520 }
521
522
524 simd::platforms::store_u32_4(
reinterpret_cast<u32*
>(ptr),
raw);
525 }
526
527
529 return from_raw(simd::platforms::set1_u32_4(
static_cast<u32
>(
value.raw())));
530 }
531
532
533
536 }
537
540 }
541
543
545 }
546
548
549 auto zero = simd::set1_u32_4(0);
551 }
552
555 }
556
559 }
560
561
562
564
565
566
569
570 auto mask = simd::sra_i32_4(
raw, 31);
571
572 auto flipped = simd::xor_u32_4(
raw, mask);
573 return from_raw(simd::sub_i32_4(flipped, mask));
574 }
575
579 }
580
584 }
585
589 }
590
595 auto diff = b - (*this);
596 return (*this) + (diff * t_vec);
597 }
598
602
603
604 static constexpr i32 RAD_TO_24 = 2670177;
605
606
607 auto angles_u32 = simd::mulhi_su32_4(
raw, simd::set1_u32_4(
static_cast<u32
>(RAD_TO_24)));
608
609
611
612
613 out_sin =
from_raw(simd::sra_i32_4(sc.sin_vals, 15));
614 out_cos =
from_raw(simd::sra_i32_4(sc.cos_vals, 15));
615 }
616
619 s16x16x4 sin_out, cos_out;
621 return sin_out;
622 }
623
626 s16x16x4 sin_out, cos_out;
628 return cos_out;
629 }
630};
631
632
633
635
636}
Alignment macros and utilities for FastLED.
platforms::simd_u32x4 simd_u32x4
constexpr int type_rank< T >::value
expected< T, E > result
Alias for expected (Rust-style naming)
FASTLED_FORCE_INLINE SinCos32_simd sincos32_simd(simd::simd_u32x4 angles) FL_NO_EXCEPT
Process 4 angles simultaneously, returning vectorized sin/cos values SIMD-optimized: vectorized angle...
Base definition for an LED controller.
SIMD 4-wide s0x32 fixed-point vector type.
#define FASTLED_FORCE_INLINE
Umbrella header for SIMD subsystem.
Cross-type SIMD fixed-point operations (implemented after all types are defined)
Four-lane SIMD batch of fl::sincos32.
4-wide s0x32 vector (normalized values [-1, 1]) Backed by 128-bit SIMD register (4× i32 in Q31 format...
FASTLED_FORCE_INLINE s16x16x4 min(s16x16x4 b) const
Element-wise minimum.
FASTLED_FORCE_INLINE s16x16x4 clamp(s16x16x4 lo, s16x16x4 hi) const
Clamp to [lo, hi].
FASTLED_FORCE_INLINE s16x16x4 cos() const
Compute cosine of 4 angles (in radians)
FASTLED_FORCE_INLINE s16x16x4 operator-() const
FASTLED_FORCE_INLINE s16x16x4 operator*(s16x16x4 b) const
FASTLED_FORCE_INLINE void store(s16x16 *ptr) const
FASTLED_FORCE_INLINE void sincos(s16x16x4 &out_sin, s16x16x4 &out_cos) const
Compute sin and cos of 4 angles (in radians) Results written to out_sin and out_cos.
FASTLED_FORCE_INLINE s16x16x4 sin() const
Compute sine of 4 angles (in radians)
FASTLED_FORCE_INLINE s16x16x4 abs() const
Absolute value: branchless via mask and xor.
FASTLED_FORCE_INLINE s16x16x4 operator>>(int shift) const
static FASTLED_FORCE_INLINE s16x16x4 from_raw(simd::simd_u32x4 r)
FASTLED_FORCE_INLINE s16x16x4 operator<<(int shift) const
FASTLED_FORCE_INLINE s16x16x4 max(s16x16x4 b) const
Element-wise maximum.
static FASTLED_FORCE_INLINE s16x16x4 load(const s16x16 *ptr)
static FASTLED_FORCE_INLINE s16x16x4 set1(s16x16 value)
FASTLED_FORCE_INLINE s16x16x4 lerp(s16x16x4 b, s16x16 t) const
Linear interpolation: a + (b - a) * t (using Q16 multiply) t: s16x16 interpolation factor in [0,...
FASTLED_FORCE_INLINE s16x16x4 operator+(s16x16x4 b) const
4-wide s16x16 vector (general fixed-point) Backed by 128-bit SIMD register (4× i32 in Q16 format)