TR-mbed 1.0
Loading...
Searching...
No Matches
PacketMath.h
Go to the documentation of this file.
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2020, Arm Limited and Contributors
5//
6// This Source Code Form is subject to the terms of the Mozilla
7// Public License v. 2.0. If a copy of the MPL was not distributed
8// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#ifndef EIGEN_PACKET_MATH_SVE_H
11#define EIGEN_PACKET_MATH_SVE_H
12
13namespace Eigen
14{
15namespace internal
16{
17#ifndef EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD
18#define EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD 8
19#endif
20
21#ifndef EIGEN_HAS_SINGLE_INSTRUCTION_MADD
22#define EIGEN_HAS_SINGLE_INSTRUCTION_MADD
23#endif
24
25#define EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS 32
26
27template <typename Scalar, int SVEVectorLength>
29 enum { size = SVEVectorLength / (sizeof(Scalar) * CHAR_BIT) };
30};
31
32/********************************* int32 **************************************/
34
35template <>
36struct packet_traits<numext::int32_t> : default_packet_traits {
37 typedef PacketXi type;
38 typedef PacketXi half; // Half not implemented yet
39 enum {
44
45 HasAdd = 1,
46 HasSub = 1,
48 HasMul = 1,
50 HasAbs = 1,
51 HasArg = 0,
53 HasMin = 1,
54 HasMax = 1,
58 HasReduxp = 0 // Not implemented in SVE
59 };
60};
61
62template <>
74
75template <>
80
81template <>
86
87template <>
94
95template <>
100
101template <>
106
107template <>
112
113template <>
115{
116 return a;
117}
118
119template <>
124
125template <>
130
131template <>
133{
134 return svmla_s32_z(svptrue_b32(), c, a, b);
135}
136
137template <>
142
143template <>
148
149template <>
151{
152 return svdup_n_s32_z(svcmplt_s32(svptrue_b32(), a, b), 0xffffffffu);
153}
154
155template <>
157{
158 return svdup_n_s32_z(svcmplt_s32(svptrue_b32(), a, b), 0xffffffffu);
159}
160
161template <>
163{
164 return svdup_n_s32_z(svcmpeq_s32(svptrue_b32(), a, b), 0xffffffffu);
165}
166
167template <>
169{
170 return svdup_n_s32_z(svptrue_b32(), 0xffffffffu);
171}
172
173template <>
178
179template <>
184
185template <>
190
191template <>
196
197template <>
202
203template <int N>
208
209template <int N>
214
215template <int N>
220
221template <>
226
227template <>
232
233template <>
235{
236 svuint32_t indices = svindex_u32(0, 1); // index {base=0, base+step=1, base+step*2, ...}
237 indices = svzip1_u32(indices, indices); // index in the format {a0, a0, a1, a1, a2, a2, ...}
238 return svld1_gather_u32index_s32(svptrue_b32(), from, indices);
239}
240
241template <>
243{
244 svuint32_t indices = svindex_u32(0, 1); // index {base=0, base+step=1, base+step*2, ...}
245 indices = svzip1_u32(indices, indices); // index in the format {a0, a0, a1, a1, a2, a2, ...}
246 indices = svzip1_u32(indices, indices); // index in the format {a0, a0, a0, a0, a1, a1, a1, a1, ...}
247 return svld1_gather_u32index_s32(svptrue_b32(), from, indices);
248}
249
250template <>
255
256template <>
261
262template <>
264{
265 // Indice format: {base=0, base+stride, base+stride*2, base+stride*3, ...}
266 svint32_t indices = svindex_s32(0, stride);
267 return svld1_gather_s32index_s32(svptrue_b32(), from, indices);
268}
269
270template <>
272{
273 // Indice format: {base=0, base+stride, base+stride*2, base+stride*3, ...}
274 svint32_t indices = svindex_s32(0, stride);
276}
277
278template <>
280{
281 // svlasta returns the first element if all predicate bits are 0
282 return svlasta_s32(svpfalse_b(), a);
283}
284
285template <>
290
291template <>
296
297template <>
302
303template <>
305{
307 EIGEN_INTERNAL_ERROR_PLEASE_FILE_A_BUG_REPORT);
308
309 // Multiply the vector by its reverse
312
313 // Extract the high half of the vector. Depending on the VL more reductions need to be done
314 if (EIGEN_ARM64_SVE_VL >= 2048) {
317 }
318 if (EIGEN_ARM64_SVE_VL >= 1024) {
321 }
322 if (EIGEN_ARM64_SVE_VL >= 512) {
325 }
326 if (EIGEN_ARM64_SVE_VL >= 256) {
329 }
330 // Last reduction
333
334 // The reduction is done to the first element.
335 return pfirst<PacketXi>(prod);
336}
337
338template <>
343
344template <>
349
350template <int N>
352 int buffer[packet_traits<numext::int32_t>::size * N] = {0};
353 int i = 0;
354
356
357 for (i = 0; i < N; i++) {
358 svst1_scatter_s32index_s32(svptrue_b32(), buffer + i, stride_index, kernel.packet[i]);
359 }
360 for (i = 0; i < N; i++) {
361 kernel.packet[i] = svld1_s32(svptrue_b32(), buffer + i * packet_traits<numext::int32_t>::size);
362 }
363}
364
365/********************************* float32 ************************************/
366
367typedef svfloat32_t PacketXf __attribute__((arm_sve_vector_bits(EIGEN_ARM64_SVE_VL)));
368
369template <>
370struct packet_traits<float> : default_packet_traits {
371 typedef PacketXf type;
372 typedef PacketXf half;
373
374 enum {
375 Vectorizable = 1,
376 AlignedOnScalar = 1,
378 HasHalfPacket = 0,
379
380 HasAdd = 1,
381 HasSub = 1,
382 HasShift = 1,
383 HasMul = 1,
384 HasNegate = 1,
385 HasAbs = 1,
386 HasArg = 0,
387 HasAbs2 = 1,
388 HasMin = 1,
389 HasMax = 1,
390 HasConj = 1,
391 HasSetLinear = 0,
392 HasBlend = 0,
393 HasReduxp = 0, // Not implemented in SVE
394
395 HasDiv = 1,
396 HasFloor = 1,
397
400 HasLog = 1,
401 HasExp = 1,
402 HasSqrt = 0,
405 };
406};
407
408template <>
422
423template <>
428
429template <>
434
435template <>
442
443template <>
448
449template <>
454
455template <>
460
461template <>
463{
464 return a;
465}
466
467template <>
472
473template <>
478
479template <>
481{
482 return svmla_f32_z(svptrue_b32(), c, a, b);
483}
484
485template <>
490
491template <>
496
497template <>
502
503template <>
508
509template <>
514
515template <>
520
521// Float comparisons in SVE return svbool (predicate). Use svdup to set active
522// lanes to 1 (0xffffffffu) and inactive lanes to 0.
523template <>
528
529template <>
534
535template <>
540
541// Do a predicate inverse (svnot_b_z) on the predicate resulted from the
542// greater/equal comparison (svcmpge_f32). Then fill a float vector with the
543// active elements.
544template <>
549
550template <>
555
556template <>
561
562// Logical Operations are not supported for float, so reinterpret casts
563template <>
568
569template <>
574
575template <>
580
581template <>
586
587template <>
592
593template <>
598
599template <>
601{
602 svuint32_t indices = svindex_u32(0, 1); // index {base=0, base+step=1, base+step*2, ...}
603 indices = svzip1_u32(indices, indices); // index in the format {a0, a0, a1, a1, a2, a2, ...}
604 return svld1_gather_u32index_f32(svptrue_b32(), from, indices);
605}
606
607template <>
609{
610 svuint32_t indices = svindex_u32(0, 1); // index {base=0, base+step=1, base+step*2, ...}
611 indices = svzip1_u32(indices, indices); // index in the format {a0, a0, a1, a1, a2, a2, ...}
612 indices = svzip1_u32(indices, indices); // index in the format {a0, a0, a0, a0, a1, a1, a1, a1, ...}
613 return svld1_gather_u32index_f32(svptrue_b32(), from, indices);
614}
615
616template <>
621
622template <>
627
628template <>
630{
631 // Indice format: {base=0, base+stride, base+stride*2, base+stride*3, ...}
632 svint32_t indices = svindex_s32(0, stride);
633 return svld1_gather_s32index_f32(svptrue_b32(), from, indices);
634}
635
636template <>
638{
639 // Indice format: {base=0, base+stride, base+stride*2, base+stride*3, ...}
640 svint32_t indices = svindex_s32(0, stride);
642}
643
644template <>
646{
647 // svlasta returns the first element if all predicate bits are 0
648 return svlasta_f32(svpfalse_b(), a);
649}
650
651template <>
656
657template <>
662
663// TODO(tellenbach): Should this go into MathFunctions.h? If so, change for
664// all vector extensions and the generic version.
665template <>
670
671template <>
673{
674 return svaddv_f32(svptrue_b32(), a);
675}
676
677// Other reduction functions:
678// mul
679// Only works for SVE Vls multiple of 128
680template <>
682{
684 EIGEN_INTERNAL_ERROR_PLEASE_FILE_A_BUG_REPORT);
685 // Multiply the vector by its reverse
688
689 // Extract the high half of the vector. Depending on the VL more reductions need to be done
690 if (EIGEN_ARM64_SVE_VL >= 2048) {
693 }
694 if (EIGEN_ARM64_SVE_VL >= 1024) {
697 }
698 if (EIGEN_ARM64_SVE_VL >= 512) {
701 }
702 if (EIGEN_ARM64_SVE_VL >= 256) {
705 }
706 // Last reduction
709
710 // The reduction is done to the first element.
711 return pfirst<PacketXf>(prod);
712}
713
714template <>
719
720template <>
725
726template<int N>
728{
729 float buffer[packet_traits<float>::size * N] = {0};
730 int i = 0;
731
733
734 for (i = 0; i < N; i++) {
735 svst1_scatter_s32index_f32(svptrue_b32(), buffer + i, stride_index, kernel.packet[i]);
736 }
737
738 for (i = 0; i < N; i++) {
739 kernel.packet[i] = svld1_f32(svptrue_b32(), buffer + i * packet_traits<float>::size);
740 }
741}
742
743template<>
748
749} // namespace internal
750} // namespace Eigen
751
752#endif // EIGEN_PACKET_MATH_SVE_H
ArrayXXi a
Definition Array_initializer_list_23_cxx11.cpp:1
int i
Definition BiCGSTAB_step_by_step.cpp:9
#define EIGEN_DEBUG_ALIGNED_STORE
Definition GenericPacketMath.h:35
#define EIGEN_DEBUG_ALIGNED_LOAD
Definition GenericPacketMath.h:27
#define EIGEN_DEBUG_UNALIGNED_STORE
Definition GenericPacketMath.h:39
#define EIGEN_DEBUG_UNALIGNED_LOAD
Definition GenericPacketMath.h:31
#define EIGEN_DEVICE_FUNC
Definition Macros.h:976
#define EIGEN_FAST_MATH
Definition Macros.h:49
#define EIGEN_STRONG_INLINE
Definition Macros.h:917
#define EIGEN_STATIC_ASSERT(CONDITION, MSG)
Definition StaticAssert.h:127
Scalar Scalar * c
Definition benchVecAdd.cpp:17
Scalar * b
Definition benchVecAdd.cpp:17
SCALAR Scalar
Definition bench_gemm.cpp:46
@ N
Definition constructor.cpp:23
@ Aligned64
Definition Constants.h:237
EIGEN_STRONG_INLINE PacketXf pxor< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:576
EIGEN_STRONG_INLINE void pstore< numext::int32_t >(numext::int32_t *to, const PacketXi &from)
Definition PacketMath.h:251
EIGEN_STRONG_INLINE Packet2cf pconj(const Packet2cf &a)
Definition Complex.h:167
EIGEN_STRONG_INLINE PacketXf pmin< PropagateNumbers, PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:498
EIGEN_STRONG_INLINE PacketXf pmul< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:468
EIGEN_STRONG_INLINE float predux_mul< PacketXf >(const PacketXf &a)
Definition PacketMath.h:681
EIGEN_STRONG_INLINE numext::int32_t predux_max< PacketXi >(const PacketXi &a)
Definition PacketMath.h:345
EIGEN_STRONG_INLINE PacketXf pcmp_lt< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:530
EIGEN_STRONG_INLINE PacketXi por< PacketXi >(const PacketXi &a, const PacketXi &b)
Definition PacketMath.h:186
EIGEN_STRONG_INLINE PacketXf pfloor< PacketXf >(const PacketXf &a)
Definition PacketMath.h:551
EIGEN_STRONG_INLINE PacketXi ploaddup< PacketXi >(const numext::int32_t *from)
Definition PacketMath.h:234
EIGEN_STRONG_INLINE PacketXi psub< PacketXi >(const PacketXi &a, const PacketXi &b)
Definition PacketMath.h:102
EIGEN_STRONG_INLINE float predux< PacketXf >(const PacketXf &a)
Definition PacketMath.h:672
EIGEN_STRONG_INLINE PacketXf pcmp_lt_or_nan< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:545
EIGEN_STRONG_INLINE PacketXf pcmp_eq< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:536
EIGEN_DEVICE_FUNC void pscatter< numext::int32_t, PacketXi >(numext::int32_t *to, const PacketXi &from, Index stride)
Definition PacketMath.h:271
EIGEN_STRONG_INLINE float pfirst< PacketXf >(const PacketXf &a)
Definition PacketMath.h:645
EIGEN_STRONG_INLINE void ptranspose(PacketBlock< Packet2cf, 2 > &kernel)
Definition Complex.h:224
EIGEN_STRONG_INLINE PacketXi pload< PacketXi >(const numext::int32_t *from)
Definition PacketMath.h:222
EIGEN_STRONG_INLINE PacketXf pandnot< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:582
EIGEN_STRONG_INLINE numext::int32_t predux< PacketXi >(const PacketXi &a)
Definition PacketMath.h:298
EIGEN_STRONG_INLINE PacketXf padd< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:444
EIGEN_STRONG_INLINE PacketXf pcmp_le< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:524
EIGEN_STRONG_INLINE PacketXf pmax< PropagateNaN, PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:510
EIGEN_STRONG_INLINE PacketXi plset< PacketXi >(const numext::int32_t &a)
Definition PacketMath.h:88
EIGEN_STRONG_INLINE Packet4i plogical_shift_left(const Packet4i &a)
Definition PacketMath.h:1191
EIGEN_STRONG_INLINE PacketXi pcmp_eq< PacketXi >(const PacketXi &a, const PacketXi &b)
Definition PacketMath.h:162
EIGEN_STRONG_INLINE PacketXi pmax< PacketXi >(const PacketXi &a, const PacketXi &b)
Definition PacketMath.h:144
EIGEN_STRONG_INLINE PacketXi pdiv< PacketXi >(const PacketXi &a, const PacketXi &b)
Definition PacketMath.h:126
EIGEN_STRONG_INLINE Packet4i plogical_shift_right(const Packet4i &a)
Definition PacketMath.h:1189
EIGEN_STRONG_INLINE float predux_min< PacketXf >(const PacketXf &a)
Definition PacketMath.h:715
EIGEN_STRONG_INLINE PacketXi ptrue< PacketXi >(const PacketXi &)
Definition PacketMath.h:168
EIGEN_STRONG_INLINE Packet2cf preverse(const Packet2cf &a)
Definition Complex.h:184
EIGEN_STRONG_INLINE PacketXf psub< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:450
EIGEN_STRONG_INLINE Packet4f pmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
Definition PacketMath.h:827
EIGEN_STRONG_INLINE PacketXf por< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:570
EIGEN_STRONG_INLINE PacketXi ploadquad< PacketXi >(const numext::int32_t *from)
Definition PacketMath.h:242
EIGEN_STRONG_INLINE Packet2cf pnegate(const Packet2cf &a)
Definition Complex.h:166
EIGEN_STRONG_INLINE PacketXf plset< PacketXf >(const float &a)
Definition PacketMath.h:436
EIGEN_STRONG_INLINE PacketXf ptrue< PacketXf >(const PacketXf &)
Definition PacketMath.h:557
EIGEN_STRONG_INLINE Packet4i parithmetic_shift_right(const Packet4i &a)
Definition PacketMath.h:1187
EIGEN_STRONG_INLINE PacketXi pset1< PacketXi >(const numext::int32_t &from)
Definition PacketMath.h:82
EIGEN_STRONG_INLINE PacketXi pxor< PacketXi >(const PacketXi &a, const PacketXi &b)
Definition PacketMath.h:192
EIGEN_STRONG_INLINE PacketXf pmin< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:486
EIGEN_STRONG_INLINE PacketXf pset1frombits< PacketXf >(numext::uint32_t from)
Definition PacketMath.h:430
EIGEN_STRONG_INLINE PacketXf pldexp< PacketXf >(const PacketXf &a, const PacketXf &exponent)
Definition PacketMath.h:744
EIGEN_STRONG_INLINE PacketXf pmin< PropagateNaN, PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:492
EIGEN_STRONG_INLINE PacketXf pfrexp< PacketXf >(const PacketXf &a, PacketXf &exponent)
Definition PacketMath.h:666
EIGEN_STRONG_INLINE PacketXi pcmp_le< PacketXi >(const PacketXi &a, const PacketXi &b)
Definition PacketMath.h:150
EIGEN_STRONG_INLINE PacketXi ploadu< PacketXi >(const numext::int32_t *from)
Definition PacketMath.h:228
EIGEN_STRONG_INLINE numext::int32_t predux_min< PacketXi >(const PacketXi &a)
Definition PacketMath.h:339
EIGEN_STRONG_INLINE void pstore< float >(float *to, const Packet4f &from)
Definition PacketMath.h:491
EIGEN_STRONG_INLINE Packet4f pabs(const Packet4f &a)
Definition PacketMath.h:1176
EIGEN_STRONG_INLINE float predux_max< PacketXf >(const PacketXf &a)
Definition PacketMath.h:721
EIGEN_STRONG_INLINE PacketXi pcmp_lt< PacketXi >(const PacketXi &a, const PacketXi &b)
Definition PacketMath.h:156
EIGEN_STRONG_INLINE PacketXi pmul< PacketXi >(const PacketXi &a, const PacketXi &b)
Definition PacketMath.h:120
EIGEN_DEVICE_FUNC void pscatter< float, PacketXf >(float *to, const PacketXf &from, Index stride)
Definition PacketMath.h:637
EIGEN_STRONG_INLINE PacketXf pload< PacketXf >(const float *from)
Definition PacketMath.h:588
EIGEN_STRONG_INLINE PacketXf pand< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:564
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pldexp_generic(const Packet &a, const Packet &exponent)
Definition GenericPacketMathFunctions.h:85
EIGEN_STRONG_INLINE PacketXi pmin< PacketXi >(const PacketXi &a, const PacketXi &b)
Definition PacketMath.h:138
EIGEN_STRONG_INLINE PacketXf ploadu< PacketXf >(const float *from)
Definition PacketMath.h:594
EIGEN_STRONG_INLINE void prefetch< numext::int32_t >(const numext::int32_t *addr)
Definition PacketMath.h:76
EIGEN_STRONG_INLINE numext::int32_t predux_mul< PacketXi >(const PacketXi &a)
Definition PacketMath.h:304
EIGEN_DEVICE_FUNC PacketXi pgather< numext::int32_t, PacketXi >(const numext::int32_t *from, Index stride)
Definition PacketMath.h:263
EIGEN_STRONG_INLINE PacketXi pand< PacketXi >(const PacketXi &a, const PacketXi &b)
Definition PacketMath.h:180
EIGEN_STRONG_INLINE PacketXf ploadquad< PacketXf >(const float *from)
Definition PacketMath.h:608
EIGEN_DEVICE_FUNC PacketXf pgather< float, PacketXf >(const float *from, Index stride)
Definition PacketMath.h:629
EIGEN_STRONG_INLINE numext::int32_t pfirst< PacketXi >(const PacketXi &a)
Definition PacketMath.h:279
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pfrexp_generic(const Packet &a, Packet &exponent)
Definition GenericPacketMathFunctions.h:40
EIGEN_STRONG_INLINE PacketXi pzero< PacketXi >(const PacketXi &)
Definition PacketMath.h:174
EIGEN_STRONG_INLINE PacketXf pmax< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:504
svint32_t PacketXi __attribute__((arm_sve_vector_bits(EIGEN_ARM64_SVE_VL)))
Definition PacketMath.h:33
EIGEN_STRONG_INLINE PacketXf pmax< PropagateNumbers, PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:516
EIGEN_STRONG_INLINE PacketXi pandnot< PacketXi >(const PacketXi &a, const PacketXi &b)
Definition PacketMath.h:198
EIGEN_STRONG_INLINE PacketXi padd< PacketXi >(const PacketXi &a, const PacketXi &b)
Definition PacketMath.h:96
EIGEN_STRONG_INLINE void pstoreu< numext::int32_t >(numext::int32_t *to, const PacketXi &from)
Definition PacketMath.h:257
EIGEN_STRONG_INLINE PacketXf pdiv< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition PacketMath.h:474
EIGEN_STRONG_INLINE PacketXf pset1< PacketXf >(const float &from)
Definition PacketMath.h:424
EIGEN_STRONG_INLINE void pstoreu< float >(float *to, const Packet4f &from)
Definition PacketMath.h:1088
EIGEN_STRONG_INLINE PacketXf ploaddup< PacketXf >(const float *from)
Definition PacketMath.h:600
::uint32_t uint32_t
Definition Meta.h:56
::int32_t int32_t
Definition Meta.h:57
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:74
const Product< Lhs, Rhs > prod(const Lhs &lhs, const Rhs &rhs)
Definition evaluators.cpp:8
Definition BandTriangularSolver.h:13
Definition GenericPacketMath.h:43
@ HasSin
Definition GenericPacketMath.h:75
@ HasBlend
Definition GenericPacketMath.h:60
@ HasArg
Definition GenericPacketMath.h:53
@ HasCos
Definition GenericPacketMath.h:76
@ HasShift
Definition GenericPacketMath.h:49
@ HasExp
Definition GenericPacketMath.h:68
@ HasSqrt
Definition GenericPacketMath.h:66
@ HasErf
Definition GenericPacketMath.h:88
@ HasLog
Definition GenericPacketMath.h:70
@ HasTanh
Definition GenericPacketMath.h:83
@ HasFloor
Definition GenericPacketMath.h:100
@ HasDiv
Definition GenericPacketMath.h:65
PacketXf type
Definition PacketMath.h:371
PacketXf half
Definition PacketMath.h:372
PacketXi half
Definition PacketMath.h:38
PacketXi type
Definition PacketMath.h:37
Definition GenericPacketMath.h:107
@ HasSub
Definition GenericPacketMath.h:118
@ HasMax
Definition GenericPacketMath.h:124
@ HasNegate
Definition GenericPacketMath.h:120
@ HasMul
Definition GenericPacketMath.h:119
@ HasAdd
Definition GenericPacketMath.h:117
@ HasSetLinear
Definition GenericPacketMath.h:126
@ HasMin
Definition GenericPacketMath.h:123
@ HasConj
Definition GenericPacketMath.h:125
@ HasAbs2
Definition GenericPacketMath.h:122
@ HasAbs
Definition GenericPacketMath.h:121
@ HasHalfPacket
Definition GenericPacketMath.h:114
@ size
Definition GenericPacketMath.h:112
@ AlignedOnScalar
Definition GenericPacketMath.h:113
@ Vectorizable
Definition GenericPacketMath.h:111
@ size
Definition PacketMath.h:29
Definition ForwardDeclarations.h:17
PacketXi integer_packet
Definition PacketMath.h:412
float type
Definition PacketMath.h:410
PacketXf half
Definition PacketMath.h:411
numext::int32_t type
Definition PacketMath.h:64
PacketXi half
Definition PacketMath.h:65
Definition GenericPacketMath.h:133
@ masked_load_available
Definition GenericPacketMath.h:141
@ size
Definition GenericPacketMath.h:138
@ masked_store_available
Definition GenericPacketMath.h:142
@ vectorizable
Definition GenericPacketMath.h:140
@ alignment
Definition GenericPacketMath.h:139