From ff8c20c092f14b6ab864b0edca46dca1d5cbfd5a Mon Sep 17 00:00:00 2001 From: Aaron Enye Shi Date: Tue, 13 Jul 2021 12:31:09 -0400 Subject: [PATCH] SWDEV-294395 - HIPRTC add definitions for amd_hip_vector_types.h Add typedefs for int32 and int64. Add templates provided in system headers such as type_traits used in our HIP header amd_hip_vector_types.h. Make replacements for clang builtin, __is_convertible_to. Change-Id: I4129b3f4f37238e2dda5b64d55e5cffe4d4480c6 --- .../include/hip/amd_detail/amd_hip_runtime.h | 11 +++ .../hip/amd_detail/amd_hip_vector_types.h | 74 ++++++++++++++++++- 2 files changed, 81 insertions(+), 4 deletions(-) diff --git a/hipamd/include/hip/amd_detail/amd_hip_runtime.h b/hipamd/include/hip/amd_detail/amd_hip_runtime.h index de93b10e54..dd427ebd9d 100644 --- a/hipamd/include/hip/amd_detail/amd_hip_runtime.h +++ b/hipamd/include/hip/amd_detail/amd_hip_runtime.h @@ -44,6 +44,17 @@ THE SOFTWARE. #include #include #endif // __cplusplus +#else +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; +typedef signed int int32_t; +typedef signed long long int64_t; +namespace std { +using ::uint32_t; +using ::uint64_t; +using ::int32_t; +using ::int64_t; +} #endif // !defined(__HIPCC_RTC__) // __hip_malloc is not working. Disable it by default. diff --git a/hipamd/include/hip/amd_detail/amd_hip_vector_types.h b/hipamd/include/hip/amd_detail/amd_hip_vector_types.h index a0ced5f81c..fd7c554ee2 100644 --- a/hipamd/include/hip/amd_detail/amd_hip_vector_types.h +++ b/hipamd/include/hip/amd_detail/amd_hip_vector_types.h @@ -48,7 +48,73 @@ THE SOFTWARE. #include #include #include -#endif // !defined(__HIPCC_RTC__) +#else +namespace std { +using ::size_t; + +template struct enable_if {}; +template struct enable_if { typedef __T type; }; + +struct true_type { static const __constant__ bool value = true; }; +struct false_type { static const __constant__ bool value = false; }; +template struct true_or_false_type : public false_type {}; +template<> struct true_or_false_type : public true_type {}; + +template struct is_integral : public false_type {}; +template <> struct is_integral : public true_type {}; +template <> struct is_integral : public true_type {}; +template <> struct is_integral : public true_type {}; +template <> struct is_integral : public true_type {}; +template <> struct is_integral : public true_type {}; +template <> struct is_integral : public true_type {}; +template <> struct is_integral : public true_type {}; +template <> struct is_integral : public true_type {}; +template <> struct is_integral : public true_type {}; +template <> struct is_integral : public true_type {}; +template <> struct is_integral : public true_type {}; +template <> struct is_integral : public true_type {}; +template <> struct is_integral : public true_type {}; + +template struct is_arithmetic : public false_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; +template <> struct is_arithmetic : public true_type {}; + +template struct is_floating_point : public false_type {}; +template<> struct is_floating_point : public true_type {}; +template<> struct is_floating_point : public true_type {}; +template<> struct is_floating_point : public true_type {}; + +template struct is_same : public false_type {}; +template struct is_same<__T, __T> : public true_type {}; + +template::value> + struct is_signed : public false_type {}; +template + struct is_signed<_Tp, true> : public true_or_false_type<_Tp(-1) < _Tp(0)> {}; + +template struct is_convertible + : public true_or_false_type<__is_convertible_to(_T1, _T2)> {}; + +template struct char_traits; +template> class basic_istream; +template> class basic_ostream; +typedef basic_istream istream; +typedef basic_ostream ostream; +} // Namespace std. +#endif // defined(__HIPCC_RTC__) namespace hip_impl { template struct Scalar_accessor; @@ -57,10 +123,10 @@ THE SOFTWARE. namespace std { template struct is_integral> - : is_integral {}; + : std::is_integral {}; template struct is_floating_point> - : is_floating_point {}; + : std::is_floating_point {}; } // Namespace std. namespace hip_impl { @@ -663,7 +729,7 @@ THE SOFTWARE. template< typename U, typename std::enable_if< - std::is_convertible{}>::type* = nullptr> + std::is_convertible::value>::type* = nullptr> __HOST_DEVICE__ explicit constexpr