@@ -98,20 +98,20 @@ template <typename Ty, typename V = utils::remove_addrspace_t<Ty>>
9898utils::enable_if_t <utils::is_same_v<V, float >, V>
9999max (Ty *Address, V Val, atomic::OrderingTy Ordering) {
100100 if (Val >= 0 )
101- return max (( int32_t *)Address, utils::convertViaPun<int32_t >(Val),
102- Ordering);
103- return min (( uint32_t *)Address, utils::convertViaPun<uint32_t >(Val),
104- Ordering);
101+ return utils::convertViaPun<float >(
102+ max (( int32_t *)Address, utils::convertViaPun< int32_t >(Val), Ordering) );
103+ return utils::convertViaPun<float >(
104+ min (( uint32_t *)Address, utils::convertViaPun< uint32_t >(Val), Ordering) );
105105}
106106
107107template <typename Ty, typename V = utils::remove_addrspace_t <Ty>>
108108utils::enable_if_t <utils::is_same_v<V, double >, V>
109109max (Ty *Address, V Val, atomic::OrderingTy Ordering) {
110110 if (Val >= 0 )
111- return max (( int64_t *)Address, utils::convertViaPun<int64_t >(Val),
112- Ordering);
113- return min (( uint64_t *)Address, utils::convertViaPun<uint64_t >(Val),
114- Ordering);
111+ return utils::convertViaPun<double >(
112+ max (( int64_t *)Address, utils::convertViaPun< int64_t >(Val), Ordering) );
113+ return utils::convertViaPun<double >(
114+ min (( uint64_t *)Address, utils::convertViaPun< uint64_t >(Val), Ordering) );
115115}
116116
117117template <typename Ty, typename V = utils::remove_addrspace_t <Ty>>
@@ -126,10 +126,10 @@ template <typename Ty, typename V = utils::remove_addrspace_t<Ty>>
126126utils::enable_if_t <utils::is_same_v<V, float >, V>
127127min (Ty *Address, V Val, atomic::OrderingTy Ordering) {
128128 if (Val >= 0 )
129- return min (( int32_t *)Address, utils::convertViaPun<int32_t >(Val),
130- Ordering);
131- return max (( uint32_t *)Address, utils::convertViaPun<uint32_t >(Val),
132- Ordering);
129+ return utils::convertViaPun<float >(
130+ min (( int32_t *)Address, utils::convertViaPun< int32_t >(Val), Ordering) );
131+ return utils::convertViaPun<float >(
132+ max (( uint32_t *)Address, utils::convertViaPun< uint32_t >(Val), Ordering) );
133133}
134134
135135// TODO: Implement this with __atomic_fetch_max and remove the duplication.
@@ -138,10 +138,10 @@ utils::enable_if_t<utils::is_same_v<V, double>, V>
138138min (Ty *Address, utils::remove_addrspace_t <Ty> Val,
139139 atomic::OrderingTy Ordering) {
140140 if (Val >= 0 )
141- return min (( int64_t *)Address, utils::convertViaPun<int64_t >(Val),
142- Ordering);
143- return max (( uint64_t *)Address, utils::convertViaPun<uint64_t >(Val),
144- Ordering);
141+ return utils::convertViaPun<double >(
142+ min (( int64_t *)Address, utils::convertViaPun< int64_t >(Val), Ordering) );
143+ return utils::convertViaPun<double >(
144+ max (( uint64_t *)Address, utils::convertViaPun< uint64_t >(Val), Ordering) );
145145}
146146
147147template <typename Ty, typename V = utils::remove_addrspace_t <Ty>>
0 commit comments