@@ -40,11 +40,22 @@ constexpr std::size_t vecAlignment() {
40
40
return res;
41
41
}
42
42
43
+ #if defined(_WIN32) || defined(_WIN64)
44
+ #define MARRAY_WINDOWS_ALIGN_ATTR \
45
+ __declspec (align (vecAlignment<NumElements, sizeof (Type)>()))
46
+ #define MARRAY_LINUX_ALIGN_ATTR
47
+ #else
48
+ #define MARRAY_WINDOWS_ALIGN_ATTR
49
+ #define MARRAY_LINUX_ALIGN_ATTR \
50
+ __attribute__ ((aligned (vecAlignment<NumElements, sizeof (Type)>())))
51
+ #endif
52
+
43
53
// / Provides a cross-patform math array class template that works on
44
54
// / SYCL devices as well as in host C++ code.
45
55
// /
46
56
// / \ingroup sycl_api
47
- template <typename Type, std::size_t NumElements> class marray {
57
+ template <typename Type, std::size_t NumElements>
58
+ class MARRAY_WINDOWS_ALIGN_ATTR marray {
48
59
using DataT = Type;
49
60
50
61
public:
@@ -321,7 +332,7 @@ template <typename Type, std::size_t NumElements> class marray {
321
332
}
322
333
return Ret;
323
334
}
324
- } __attribute__ (( aligned (vecAlignment<NumElements, sizeof (Type)>()))) ;
335
+ } MARRAY_LINUX_ALIGN_ATTR ;
325
336
326
337
#define __SYCL_MAKE_MARRAY_ALIAS (ALIAS, TYPE, N ) \
327
338
using ALIAS##N = sycl::marray<TYPE, N>;
@@ -359,5 +370,8 @@ __SYCL_MAKE_MARRAY_ALIASES_FOR_MARRAY_LENGTH(16)
359
370
#undef __SYCL_MAKE_MARRAY_ALIASES_FOR_SIGNED_AND_UNSIGNED_TYPES
360
371
#undef __SYCL_MAKE_MARRAY_ALIASES_FOR_MARRAY_LENGTH
361
372
373
+ #undef MARRAY_LINUX_ALIGN_ATTR
374
+ #undef MARRAY_WINDOWS_ALIGN_ATTR
375
+
362
376
} // __SYCL_INLINE_VER_NAMESPACE(_V1)
363
377
} // namespace sycl
0 commit comments