10
10
11
11
#define SYCL_SIMPLE_SWIZZLES
12
12
#include < CL/sycl.hpp>
13
- using namespace cl ::sycl;
14
13
15
- void check_vectors (int4 a, int4 b, int4 c, int4 gold) {
16
- int4 result = a * (int4)b.y () + c;
14
+ void check_vectors (sycl:: int4 a, sycl:: int4 b, sycl:: int4 c, sycl:: int4 gold) {
15
+ sycl:: int4 result = a * (sycl:: int4)b.y () + c;
17
16
assert ((int )result.x () == (int )gold.x ());
18
17
assert ((int )result.y () == (int )gold.y ());
19
- assert ((int )result.w () == (int )gold.w ());
20
18
assert ((int )result.z () == (int )gold.z ());
19
+ assert ((int )result.w () == (int )gold.w ());
20
+ }
21
+
22
+ template <typename From, typename To> void check_convert () {
23
+ sycl::vec<From, 4 > vec{1 , 2 , 3 , 4 };
24
+ sycl::vec<To, 4 > result = vec.template convert <To>();
25
+ assert ((int )result.x () == (int )vec.x ());
26
+ assert ((int )result.y () == (int )vec.y ());
27
+ assert ((int )result.z () == (int )vec.z ());
28
+ assert ((int )result.w () == (int )vec.w ());
29
+ }
30
+
31
+ template <typename From, typename To> void check_signed_unsigned_convert_to () {
32
+ check_convert<From, To>();
33
+ check_convert<From, sycl::detail::make_unsigned_t <To>>();
34
+ check_convert<sycl::detail::make_unsigned_t <From>, To>();
35
+ check_convert<sycl::detail::make_unsigned_t <From>,
36
+ sycl::detail::make_unsigned_t <To>>();
37
+ }
38
+
39
+ template <typename From> void check_convert_from () {
40
+ check_signed_unsigned_convert_to<From, int8_t >();
41
+ check_signed_unsigned_convert_to<From, int16_t >();
42
+ check_signed_unsigned_convert_to<From, int32_t >();
43
+ check_signed_unsigned_convert_to<From, int64_t >();
44
+ check_signed_unsigned_convert_to<From, char >();
45
+ check_signed_unsigned_convert_to<From, short >();
46
+ check_signed_unsigned_convert_to<From, int >();
47
+ check_signed_unsigned_convert_to<From, long >();
48
+ check_signed_unsigned_convert_to<From, long long >();
49
+ check_signed_unsigned_convert_to<From, half>();
50
+ check_signed_unsigned_convert_to<From, float >();
51
+ check_signed_unsigned_convert_to<From, double >();
21
52
}
22
53
23
54
int main () {
24
- int4 a = {1 , 2 , 3 , 4 };
25
- const int4 b = {10 , 20 , 30 , 40 };
26
- const int4 gold = {21 , 42 , 90 , 120 };
27
- const int2 a_xy = a.xy ();
55
+ sycl:: int4 a = {1 , 2 , 3 , 4 };
56
+ const sycl:: int4 b = {10 , 20 , 30 , 40 };
57
+ const sycl:: int4 gold = {21 , 42 , 90 , 120 };
58
+ const sycl:: int2 a_xy = a.xy ();
28
59
check_vectors (a, b, {1 , 2 , 30 , 40 }, gold);
29
60
check_vectors (a, b, {a.x (), a.y (), b.z (), b.w ()}, gold);
30
61
check_vectors (a, b, {a.x (), 2 , b.z (), 40 }, gold);
@@ -33,11 +64,11 @@ int main() {
33
64
check_vectors (a, b, {a.xy (), b.zw ()}, gold);
34
65
35
66
// Constructing vector from a scalar
36
- cl:: sycl::vec<int , 1 > vec_from_one_elem (1 );
67
+ sycl::vec<int , 1 > vec_from_one_elem (1 );
37
68
38
69
// implicit conversion
39
- cl:: sycl::vec<unsigned char , 2 > vec_2 (1 , 2 );
40
- cl:: sycl::vec<unsigned char , 4 > vec_4 (0 , vec_2, 3 );
70
+ sycl::vec<unsigned char , 2 > vec_2 (1 , 2 );
71
+ sycl::vec<unsigned char , 4 > vec_4 (0 , vec_2, 3 );
41
72
42
73
assert (vec_4.get_count () == 4 );
43
74
assert (static_cast <unsigned char >(vec_4.x ()) == static_cast <unsigned char >(0 ));
@@ -47,10 +78,10 @@ int main() {
47
78
48
79
// explicit conversion
49
80
int64_t (vec_2.x ());
50
- cl:: sycl::int4 (vec_2.x ());
81
+ sycl::int4 (vec_2.x ());
51
82
52
83
// Check broadcasting operator=
53
- cl:: sycl::vec<float , 4 > b_vec (1.0 );
84
+ sycl::vec<float , 4 > b_vec (1.0 );
54
85
b_vec = 0.5 ;
55
86
assert (static_cast <float >(b_vec.x ()) == static_cast <float >(0.5 ));
56
87
assert (static_cast <float >(b_vec.y ()) == static_cast <float >(0.5 ));
@@ -60,27 +91,40 @@ int main() {
60
91
// Check that vector with 'unsigned long long' elements has enough bits to
61
92
// store value.
62
93
unsigned long long ull_ref = 1ull - 2ull ;
63
- auto ull_vec = cl:: sycl::vec<unsigned long long , 1 >(ull_ref);
64
- unsigned long long ull_val = ull_vec.template swizzle <cl:: sycl::elem::s0>();
94
+ auto ull_vec = sycl::vec<unsigned long long , 1 >(ull_ref);
95
+ unsigned long long ull_val = ull_vec.template swizzle <sycl::elem::s0>();
65
96
assert (ull_val == ull_ref);
66
97
67
98
// Check that the function as() in swizzle vec class is working correctly
68
- cl::sycl::vec<int8_t , 2 > inputVec = cl::sycl::vec<int8_t , 2 >(0 , 1 );
69
- auto asVec =
70
- inputVec.template swizzle <cl::sycl::elem::s0, cl::sycl::elem::s1>()
71
- .template as <cl::sycl::vec<int16_t , 1 >>();
99
+ sycl::vec<int8_t , 2 > inputVec = sycl::vec<int8_t , 2 >(0 , 1 );
100
+ auto asVec = inputVec.template swizzle <sycl::elem::s0, sycl::elem::s1>()
101
+ .template as <sycl::vec<int16_t , 1 >>();
72
102
73
103
// Check that [u]long[n] type aliases match vec<[unsigned] long, n> types.
74
- assert ((std::is_same<cl::sycl::vec<long , 2 >, cl::sycl::long2>::value));
75
- assert ((std::is_same<cl::sycl::vec<long , 3 >, cl::sycl::long3>::value));
76
- assert ((std::is_same<cl::sycl::vec<long , 4 >, cl::sycl::long4>::value));
77
- assert ((std::is_same<cl::sycl::vec<long , 8 >, cl::sycl::long8>::value));
78
- assert ((std::is_same<cl::sycl::vec<long , 16 >, cl::sycl::long16>::value));
79
- assert ((std::is_same<cl::sycl::vec<unsigned long , 2 >, cl::sycl::ulong2>::value));
80
- assert ((std::is_same<cl::sycl::vec<unsigned long , 3 >, cl::sycl::ulong3>::value));
81
- assert ((std::is_same<cl::sycl::vec<unsigned long , 4 >, cl::sycl::ulong4>::value));
82
- assert ((std::is_same<cl::sycl::vec<unsigned long , 8 >, cl::sycl::ulong8>::value));
83
- assert ((std::is_same<cl::sycl::vec<unsigned long , 16 >, cl::sycl::ulong16>::value));
104
+ assert ((std::is_same<sycl::vec<long , 2 >, sycl::long2>::value));
105
+ assert ((std::is_same<sycl::vec<long , 3 >, sycl::long3>::value));
106
+ assert ((std::is_same<sycl::vec<long , 4 >, sycl::long4>::value));
107
+ assert ((std::is_same<sycl::vec<long , 8 >, sycl::long8>::value));
108
+ assert ((std::is_same<sycl::vec<long , 16 >, sycl::long16>::value));
109
+ assert ((std::is_same<sycl::vec<unsigned long , 2 >, sycl::ulong2>::value));
110
+ assert ((std::is_same<sycl::vec<unsigned long , 3 >, sycl::ulong3>::value));
111
+ assert ((std::is_same<sycl::vec<unsigned long , 4 >, sycl::ulong4>::value));
112
+ assert ((std::is_same<sycl::vec<unsigned long , 8 >, sycl::ulong8>::value));
113
+ assert ((std::is_same<sycl::vec<unsigned long , 16 >, sycl::ulong16>::value));
114
+
115
+ // Check convert() from and to various types.
116
+ check_convert_from<int8_t >();
117
+ check_convert_from<int16_t >();
118
+ check_convert_from<int32_t >();
119
+ check_convert_from<int64_t >();
120
+ check_convert_from<char >();
121
+ check_convert_from<short >();
122
+ check_convert_from<int >();
123
+ check_convert_from<long >();
124
+ check_convert_from<long long >();
125
+ check_convert_from<half>();
126
+ check_convert_from<float >();
127
+ check_convert_from<double >();
84
128
85
129
return 0 ;
86
130
}
0 commit comments