Skip to content

Commit f31cae5

Browse files
committed
updated fmod.hlsl test cases following feedback, move fmod hlsl_detail.h changes to hlsl_intrinsic_helpers.h
1 parent 567d8bb commit f31cae5

File tree

3 files changed

+124
-123
lines changed

3 files changed

+124
-123
lines changed

clang/lib/Headers/hlsl/hlsl_detail.h

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -45,31 +45,6 @@ template <typename T> struct is_arithmetic {
4545
static const bool Value = __is_arithmetic(T);
4646
};
4747

48-
template <typename T>
49-
constexpr enable_if_t<is_same<float, T>::value || is_same<half, T>::value, T>
50-
fmod_impl(T X, T Y) {
51-
#if !defined(__DIRECTX__)
52-
return __builtin_elementwise_fmod(X, Y);
53-
#else
54-
T div = X / Y;
55-
bool ge = div >= -div;
56-
T frc = frac(abs(div));
57-
return select<T>(ge, frc, -frc) * Y;
58-
#endif
59-
}
60-
61-
template <typename T, int N>
62-
constexpr vector<T, N> fmod_vec_impl(vector<T, N> X, vector<T, N> Y) {
63-
#if !defined(__DIRECTX__)
64-
return __builtin_elementwise_fmod(X, Y);
65-
#else
66-
vector<T, N> div = X / Y;
67-
vector<bool, N> ge = div >= -div;
68-
vector<T, N> frc = frac(abs(div));
69-
return select<T>(ge, frc, -frc) * Y;
70-
#endif
71-
}
72-
7348
template <typename T, int N>
7449
using HLSL_FIXED_VECTOR =
7550
vector<__detail::enable_if_t<(N > 1 && N <= 4), T>, N>;

clang/lib/Headers/hlsl/hlsl_intrinsic_helpers.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,32 @@ constexpr vector<T, L> reflect_vec_impl(vector<T, L> I, vector<T, L> N) {
5757
return I - 2 * N * dot(I, N);
5858
#endif
5959
}
60+
61+
template <typename T>
62+
constexpr enable_if_t<is_same<float, T>::value || is_same<half, T>::value, T>
63+
fmod_impl(T X, T Y) {
64+
#if !defined(__DIRECTX__)
65+
return __builtin_elementwise_fmod(X, Y);
66+
#else
67+
T div = X / Y;
68+
bool ge = div >= -div;
69+
T frc = frac(abs(div));
70+
return select<T>(ge, frc, -frc) * Y;
71+
#endif
72+
}
73+
74+
template <typename T, int N>
75+
constexpr vector<T, N> fmod_vec_impl(vector<T, N> X, vector<T, N> Y) {
76+
#if !defined(__DIRECTX__)
77+
return __builtin_elementwise_fmod(X, Y);
78+
#else
79+
vector<T, N> div = X / Y;
80+
vector<bool, N> ge = div >= -div;
81+
vector<T, N> frc = frac(abs(div));
82+
return select<T>(ge, frc, -frc) * Y;
83+
#endif
84+
}
85+
6086
} // namespace __detail
6187
} // namespace hlsl
6288

0 commit comments

Comments
 (0)