@@ -93,56 +93,53 @@ saturate(simd<T1, SZ> src) {
93
93
// abs
94
94
namespace detail {
95
95
96
- template <typename T0 , typename T1 , int SZ>
97
- ESIMD_NODEBUG ESIMD_INLINE simd<T0 , SZ>
98
- __esimd_abs_common_internal (simd<T1 , SZ> src0) {
99
- simd<T1 , SZ> Result = simd<T0 , SZ>(__esimd_abs<T1 , SZ>(src0.data ()));
100
- return Result;
96
+ template <typename TRes , typename TArg , int SZ>
97
+ ESIMD_NODEBUG ESIMD_INLINE simd<TRes , SZ>
98
+ __esimd_abs_common_internal (simd<TArg , SZ> src0) {
99
+ simd<TArg , SZ> Result = simd<TArg , SZ>(__esimd_abs<TArg , SZ>(src0.data ()));
100
+ return convert<TRes>( Result) ;
101
101
}
102
102
103
- template <typename T0 , typename T1 >
103
+ template <typename TRes , typename TArg >
104
104
ESIMD_NODEBUG
105
- ESIMD_INLINE std::enable_if_t <detail::is_esimd_scalar<T0>::value &&
106
- detail::is_esimd_scalar<T1>::value,
107
- std::remove_const_t <T0>>
108
- __esimd_abs_common_internal (T1 src0) {
109
- using TT0 = std::remove_const_t <T0>;
110
- using TT1 = std::remove_const_t <T1>;
111
-
112
- simd<TT1, 1 > Src0 = src0;
113
- simd<TT0, 1 > Result = __esimd_abs_common_internal<TT0>(Src0);
114
- return Result[0 ];
105
+ ESIMD_INLINE std::enable_if_t <detail::is_esimd_scalar<TRes>::value &&
106
+ detail::is_esimd_scalar<TArg>::value,
107
+ TRes>
108
+ __esimd_abs_common_internal (TArg src0) {
109
+ simd<TArg, 1 > Src0 = src0;
110
+ simd<TArg, 1 > Result = __esimd_abs_common_internal<TArg>(Src0);
111
+ return convert<TRes>(Result)[0 ];
115
112
}
116
113
} // namespace detail
117
114
// / @endcond ESIMD_DETAIL
118
115
119
116
// / Get absolute value (vector version)
120
- // / @tparam T0 element type of the returned vector.
121
- // / @tparam T1 element type of the input vector.
117
+ // / @tparam TRes element type of the returned vector.
118
+ // / @tparam TArg element type of the input vector.
122
119
// / @tparam SZ size of the input and returned vector.
123
120
// / @param src0 the input vector.
124
121
// / @return vector of absolute values.
125
- template <typename T0 , typename T1 , int SZ>
122
+ template <typename TRes , typename TArg , int SZ>
126
123
__ESIMD_API std::enable_if_t <
127
- !std::is_same<std::remove_const_t <T0 >, std::remove_const_t <T1 >>::value,
128
- simd<T0 , SZ>>
129
- abs (simd<T1 , SZ> src0) {
130
- return detail::__esimd_abs_common_internal<T0, T1 , SZ>(src0.data ());
124
+ !std::is_same<std::remove_const_t <TRes >, std::remove_const_t <TArg >>::value,
125
+ simd<TRes , SZ>>
126
+ abs (simd<TArg , SZ> src0) {
127
+ return detail::__esimd_abs_common_internal<TRes, TArg , SZ>(src0.data ());
131
128
}
132
129
133
130
// / Get absolute value (scalar version)
134
131
// / @tparam T0 element type of the returned value.
135
132
// / @tparam T1 element type of the input value.
136
133
// / @param src0 the source operand.
137
134
// / @return absolute value.
138
- template <typename T0 , typename T1 >
139
- __ESIMD_API std::enable_if_t <
140
- !std::is_same<std:: remove_const_t <T0>, std::remove_const_t <T1 >>::value &&
141
- detail::is_esimd_scalar<T0 >::value &&
142
- detail::is_esimd_scalar<T1 >::value,
143
- std::remove_const_t <T0 >>
144
- abs (T1 src0) {
145
- return detail::__esimd_abs_common_internal<T0, T1 >(src0);
135
+ template <typename TRes , typename TArg >
136
+ __ESIMD_API std::enable_if_t <!std::is_same<std:: remove_const_t <TRes>,
137
+ std::remove_const_t <TArg >>::value &&
138
+ detail::is_esimd_scalar<TRes >::value &&
139
+ detail::is_esimd_scalar<TArg >::value,
140
+ std::remove_const_t <TRes >>
141
+ abs (TArg src0) {
142
+ return detail::__esimd_abs_common_internal<TRes, TArg >(src0);
146
143
}
147
144
148
145
// / Get absolute value (vector version). This is a specialization of a version
0 commit comments