27template <
typename TYPE,
int SIZE>
36 constexpr static int size = 4;
57 Vector(
float x1,
float x2,
float x3,
float x4) {
58 v = _mm_setr_ps(x1, x2, x3, x4);
62 static Vector zero() {
63 return Vector(_mm_setzero_ps());
67 static Vector mask() {
68 return Vector(_mm_castsi128_ps(_mm_cmpeq_epi32(_mm_setzero_si128(), _mm_setzero_si128())));
74 static Vector
load(
const float* x) {
80 return Vector(_mm_loadu_ps(x));
86 void store(
float* x) {
93 float& operator[](
int i) {
96 const float& operator[](
int i)
const {
101 Vector(Vector<int32_t, 4> a);
103 static Vector cast(Vector<int32_t, 4> a);
108struct Vector<int32_t, 4> {
109 using type = int32_t;
110 constexpr static int size = 4;
118 Vector(__m128i v) : v(v) {}
120 v = _mm_set1_epi32(x);
122 Vector(int32_t x1, int32_t x2, int32_t x3, int32_t x4) {
123 v = _mm_setr_epi32(x1, x2, x3, x4);
125 static Vector zero() {
126 return Vector(_mm_setzero_si128());
128 static Vector mask() {
129 return Vector(_mm_cmpeq_epi32(_mm_setzero_si128(), _mm_setzero_si128()));
131 static Vector
load(
const int32_t* x) {
134 return Vector(_mm_loadu_si128((
const __m128i*) x));
136 void store(int32_t* x) {
139 _mm_storeu_si128((__m128i*) x, v);
141 int32_t& operator[](
int i) {
144 const int32_t& operator[](
int i)
const {
147 Vector(Vector<float, 4> a);
148 static Vector cast(Vector<float, 4> a);
156 v = _mm_cvtepi32_ps(a.v);
160 v = _mm_cvttps_epi32(a.v);
164 return Vector(_mm_castsi128_ps(a.v));
168 return Vector(_mm_castps_si128(a.v));
176#define DECLARE_VECTOR_OPERATOR_INFIX(t, s, operator, func) \
177 inline Vector<t, s> operator(const Vector<t, s>& a, const Vector<t, s>& b) { \
178 return Vector<t, s>(func(a.v, b.v)); \
176#define DECLARE_VECTOR_OPERATOR_INFIX(t, s, operator, func) \ …
182#define DECLARE_VECTOR_OPERATOR_INCREMENT(t, s, operator, opfunc) \
183 inline Vector<t, s>& operator(Vector<t, s>& a, const Vector<t, s>& b) { \
184 return a = opfunc(a, b); \
182#define DECLARE_VECTOR_OPERATOR_INCREMENT(t, s, operator, opfunc) \ …
250inline Vector<int32_t, 4>
operator<=(
const Vector<int32_t, 4>& a,
const Vector<int32_t, 4>& b) {
251 return Vector<int32_t, 4>(_mm_cmplt_epi32(a.v, b.v)) ^ Vector<int32_t, 4>::mask();
327inline Vector<int32_t, 4>
operator<<(
const Vector<int32_t, 4>& a,
const int& b) {
328 return Vector<int32_t, 4>(_mm_sll_epi32(a.v, _mm_cvtsi32_si128(b)));
#define DECLARE_VECTOR_OPERATOR_INFIX(t, s, operator,func)
a @ b
Definition Vector.hpp:176
#define DECLARE_VECTOR_OPERATOR_INCREMENT(t, s, operator,opfunc)
a @= b
Definition Vector.hpp:182
PRIVATE void load(std::string path="")
Abstraction of aligned types for SIMD computation.
Definition functions.hpp:8
Vector< int32_t, 4 > int32_4
Definition Vector.hpp:341
Vector< float, 4 > float_4
Definition Vector.hpp:340
Vector< int32_t, 4 > operator<=(const Vector< int32_t, 4 > &a, const Vector< int32_t, 4 > &b)
Definition Vector.hpp:250
Vector< int32_t, 4 > operator>>(const Vector< int32_t, 4 > &a, const int &b)
a >> b
Definition Vector.hpp:332
Vector< int32_t, 4 > operator<<(const Vector< int32_t, 4 > &a, const int &b)
a << b
Definition Vector.hpp:327
Vector< float, 4 > operator-(const Vector< float, 4 > &a)
-a
Definition Vector.hpp:271
Vector< float, 4 > & operator++(Vector< float, 4 > &a)
++a
Definition Vector.hpp:279
Vector< float, 4 > & operator--(Vector< float, 4 > &a)
--a
Definition Vector.hpp:287
Vector< float, 4 > operator~(const Vector< float, 4 > &a)
~a
Definition Vector.hpp:319
Vector< float, 4 > operator+(const Vector< float, 4 > &a)
+a
Definition Vector.hpp:263
Root namespace for the Rack API.
Definition AudioDisplay.hpp:9
Generic class for vector types.
Definition Vector.hpp:28