cppassist  1.0.0.f4fab4f962ff
C++ sanctuary for small but powerful and frequently required, stand alone features.
value8f.h
Go to the documentation of this file.
1 
2 #pragma once
3 
4 
5 #include <immintrin.h>
6 
7 #include <cppassist/simd/value.h>
8 
9 
10 namespace cppassist
11 {
12 
13 
14 template <>
15 class CPPASSIST_TEMPLATE_API value<float, 8>
16 {
17 public:
18  static const auto simd_size = 8;
19  using store_type = __m256;
20  using primitive_type = float;
21 
22 public:
23  value();
24  value(const value & value);
25  value(value && value);
26  value(const store_type & value);
28 
29  value & operator=(const value & value);
30  value & operator=(value && value);
31  value & operator=(const store_type & value);
32  value & operator=(store_type && value);
33 
34  primitive_type * data();
35  const primitive_type * data() const;
36 
37  primitive_type & at(size_t i);
38  const primitive_type & at(size_t i) const;
39 
40  primitive_type & operator[](size_t i);
41  const primitive_type & operator[](size_t i) const;
42 
43  inline operator store_type();
44  inline operator const store_type & () const;
45 
46 public:
48 };
49 
50 
51 inline auto operator+(const value<float, 8> & first, const value<float, 8> & second) -> value<float, 8>;
52 inline auto operator-(const value<float, 8> & first, const value<float, 8> & second) -> value<float, 8>;
53 inline auto operator*(const value<float, 8> & first, const value<float, 8> & second) -> value<float, 8>;
54 inline auto operator/(const value<float, 8> & first, const value<float, 8> & second) -> value<float, 8>;
55 
56 inline auto operator+(const value<float, 8> & first, const value<float, 8>::primitive_type & scalar) -> value<float, 8>;
57 inline auto operator-(const value<float, 8> & first, const value<float, 8>::primitive_type & scalar) -> value<float, 8>;
58 inline auto operator*(const value<float, 8> & first, const value<float, 8>::primitive_type & scalar) -> value<float, 8>;
59 inline auto operator/(const value<float, 8> & first, const value<float, 8>::primitive_type & scalar) -> value<float, 8>;
60 
61 inline auto operator+(const value<float, 8>::primitive_type & scalar, const value<float, 8> & other) -> value<float, 8>;
62 inline auto operator-(const value<float, 8>::primitive_type & scalar, const value<float, 8> & other) -> value<float, 8>;
63 inline auto operator*(const value<float, 8>::primitive_type & scalar, const value<float, 8> & other) -> value<float, 8>;
64 inline auto operator/(const value<float, 8>::primitive_type & scalar, const value<float, 8> & other) -> value<float, 8>;
65 
66 inline auto sqrt(const value<float, 8> & first) -> value<float, 8>;
67 
68 
69 } // namespace cppassist
70 
71 
Definition: value8f.h:15
auto operator+(const value< float, 1 > &first, const value< float, 1 > &second) -> value< float, 1 >
Definition: value1.inl:109
auto operator*(const value< float, 1 > &first, const value< float, 1 > &second) -> value< float, 1 >
Definition: value1.inl:119
Definition: ArgumentParser.h:12
store_type m_value
Definition: value8f.h:47
void sqrt(const vector< T, SIMD_SIZE > &first, vector< T, SIMD_SIZE > &result)
Definition: algorithm.inl:144
Definition: value.h:14
__m256 store_type
Definition: value8f.h:19
auto operator-(const value< float, 1 > &first, const value< float, 1 > &second) -> value< float, 1 >
Definition: value1.inl:114
float primitive_type
Definition: value8f.h:20
auto operator/(const value< float, 1 > &first, const value< float, 1 > &second) -> value< float, 1 >
Definition: value1.inl:124