@@ -1306,15 +1306,68 @@ float min(float __x, float __y) { return __builtin_fminf(__x, __y); }
1306
1306
__DEVICE__
1307
1307
double min (double __x, double __y) { return __builtin_fmin (__x, __y); }
1308
1308
1309
- #if !defined(__HIPCC_RTC__) && !defined(__OPENMP_AMDGCN__)
1310
- __host__ inline static int min (int __arg1, int __arg2) {
1311
- return __arg1 < __arg2 ? __arg1 : __arg2;
1309
+ // Define host min/max functions.
1310
+ #if !defined(__HIPCC_RTC__) && !defined(__OPENMP_AMDGCN__) && \
1311
+ !defined(__HIP_NO_HOST_MIN_MAX_IN_GLOBAL_NAMESPACE__) && __HIP__
1312
+
1313
+ #pragma push_macro("DEFINE_MIN_MAX_FUNCTIONS")
1314
+ #pragma push_macro("DEFINE_MIN_MAX_FUNCTIONS")
1315
+ #define DEFINE_MIN_MAX_FUNCTIONS (ret_type, type1, type2 ) \
1316
+ inline ret_type min (const type1 __a, const type2 __b) { \
1317
+ return (__a < __b) ? __a : __b; \
1318
+ } \
1319
+ inline ret_type max (const type1 __a, const type2 __b) { \
1320
+ return (__a > __b) ? __a : __b; \
1321
+ }
1322
+
1323
+ // Define min and max functions for same type comparisons
1324
+ DEFINE_MIN_MAX_FUNCTIONS (int , int , int )
1325
+ DEFINE_MIN_MAX_FUNCTIONS(unsigned int , unsigned int , unsigned int )
1326
+ DEFINE_MIN_MAX_FUNCTIONS(long , long , long )
1327
+ DEFINE_MIN_MAX_FUNCTIONS(unsigned long , unsigned long , unsigned long )
1328
+ DEFINE_MIN_MAX_FUNCTIONS(long long , long long , long long )
1329
+ DEFINE_MIN_MAX_FUNCTIONS(unsigned long long , unsigned long long ,
1330
+ unsigned long long )
1331
+
1332
+ // Define min and max functions for all mixed type comparisons
1333
+ DEFINE_MIN_MAX_FUNCTIONS(unsigned int , int , unsigned int )
1334
+ DEFINE_MIN_MAX_FUNCTIONS(unsigned int , unsigned int , int )
1335
+ DEFINE_MIN_MAX_FUNCTIONS(unsigned long , long , unsigned long )
1336
+ DEFINE_MIN_MAX_FUNCTIONS(unsigned long , unsigned long , long )
1337
+ DEFINE_MIN_MAX_FUNCTIONS(unsigned long long , long long , unsigned long long )
1338
+ DEFINE_MIN_MAX_FUNCTIONS(unsigned long long , unsigned long long , long long )
1339
+
1340
+ // Floating-point comparisons using built-in functions
1341
+ inline float min(float const __a, float const __b) {
1342
+ return __builtin_fminf (__a, __b);
1343
+ }
1344
+ inline double min (double const __a, double const __b) {
1345
+ return __builtin_fmin (__a, __b);
1346
+ }
1347
+ inline double min (float const __a, double const __b) {
1348
+ return __builtin_fmin (__a, __b);
1349
+ }
1350
+ inline double min (double const __a, float const __b) {
1351
+ return __builtin_fmin (__a, __b);
1312
1352
}
1313
1353
1314
- __host__ inline static int max (int __arg1, int __arg2) {
1315
- return __arg1 > __arg2 ? __arg1 : __arg2;
1354
+ inline float max (float const __a, float const __b) {
1355
+ return __builtin_fmaxf (__a, __b);
1356
+ }
1357
+ inline double max (double const __a, double const __b) {
1358
+ return __builtin_fmax (__a, __b);
1359
+ }
1360
+ inline double max (float const __a, double const __b) {
1361
+ return __builtin_fmax (__a, __b);
1316
1362
}
1317
- #endif // !defined(__HIPCC_RTC__) && !defined(__OPENMP_AMDGCN__)
1363
+ inline double max (double const __a, float const __b) {
1364
+ return __builtin_fmax (__a, __b);
1365
+ }
1366
+
1367
+ #pragma pop_macro("DEFINE_MIN_MAX_FUNCTIONS")
1368
+
1369
+ #endif // !defined(__HIPCC_RTC__) && !defined(__OPENMP_AMDGCN__) &&
1370
+ // !defined(__HIP_NO_HOST_MIN_MAX_IN_GLOBAL_NAMESPACE__) && __HIP__
1318
1371
#endif
1319
1372
1320
1373
#pragma pop_macro("__DEVICE__")
0 commit comments