SWDEV-407139 - Update __hipMapVector

Update __hipMapVector for C++11

Change-Id: I6179d9f3b2ddf4e42b9a6f7f3912322cfca02cfe


[ROCm/clr commit: d9955b6707]
Cette révision appartient à :
taosang2
2023-06-22 23:12:46 -04:00
révisé par Tao Sang
Parent 0d9cc9efd2
révision b005d758b9
+28 -17
Voir le fichier
@@ -1060,23 +1060,34 @@ template <typename __T> struct is_scalar : public integral_constant<bool, __is_s
/*
* Map HIP_vector_type<U, rankU> to HIP_vector_type<T, rankT>
*/
template<
typename T,
unsigned int rankT,
typename U,
unsigned int rankU>
__forceinline__
__HOST_DEVICE__
typename std::enable_if<
(rankT >= 1 && rankT <= 4 && rankU >= 1 && rankU <= 4),
const HIP_vector_type<T, rankT>>::type
__hipMapVector(const HIP_vector_type<U, rankU> &u) {
HIP_vector_type<T, rankT> t; // Initialized to 0
if constexpr (rankT >= 1 && rankU >= 1) t.x = static_cast<T>(u.x);
if constexpr (rankT >= 2 && rankU >= 2) t.y = static_cast<T>(u.y);
if constexpr (rankT >= 3 && rankU >= 3) t.z = static_cast<T>(u.z);
if constexpr (rankT >= 4 && rankU >= 4) t.w = static_cast<T>(u.w);
return t;
template <typename T, unsigned int rankT, typename U, unsigned int rankU>
__forceinline__ __HOST_DEVICE__ typename std::enable_if<(rankT == 1 && rankU >= rankT),
const HIP_vector_type<T, rankT>>::type
__hipMapVector(const HIP_vector_type<U, rankU>& u) {
return HIP_vector_type<T, rankT>(static_cast<T>(u.x));
};
template <typename T, unsigned int rankT, typename U, unsigned int rankU>
__forceinline__ __HOST_DEVICE__ typename std::enable_if<(rankT == 2 && rankU >= rankT),
const HIP_vector_type<T, rankT>>::type
__hipMapVector(const HIP_vector_type<U, rankU>& u) {
return HIP_vector_type<T, rankT>(static_cast<T>(u.x), static_cast<T>(u.y));
};
template <typename T, unsigned int rankT, typename U, unsigned int rankU>
__forceinline__ __HOST_DEVICE__ typename std::enable_if<(rankT == 3 && rankU >= rankT),
const HIP_vector_type<T, rankT>>::type
__hipMapVector(const HIP_vector_type<U, rankU>& u) {
return HIP_vector_type<T, rankT>(static_cast<T>(u.x), static_cast<T>(u.y),
static_cast<T>(u.z));
};
template <typename T, unsigned int rankT, typename U, unsigned int rankU>
__forceinline__ __HOST_DEVICE__ typename std::enable_if<(rankT == 4 && rankU >= rankT),
const HIP_vector_type<T, rankT>>::type
__hipMapVector(const HIP_vector_type<U, rankU>& u) {
return HIP_vector_type<T, rankT>(static_cast<T>(u.x), static_cast<T>(u.y),
static_cast<T>(u.z), static_cast<T>(u.w));
};
#define __MAKE_VECTOR_TYPE__(CUDA_name, T) \