@@ -1109,198 +1109,145 @@ fast_normalize(T p) __NOEXC {
1109
1109
return __sycl_std::__invoke_fast_normalize<T>(p);
1110
1110
}
1111
1111
1112
- /* --------------- 4.13.7 Relational functions. Device version --------------*/
1113
- // int isequal (half x, half y)
1114
- // shortn isequal (halfn x, halfn y)
1115
- // igeninteger32bit isequal (genfloatf x, genfloatf y)
1116
- // int isequal (double x,double y);
1117
- // longn isequal (doublen x, doublen y)
1112
+ /* SYCL 1.2.1 ---- 4.13.7 Relational functions. -----------------------------*/
1113
+ /* SYCL 2020 ---- 4.17.9 Relational functions. -----------------------------*/
1114
+
1118
1115
template <typename T,
1119
1116
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1120
1117
detail::common_rel_ret_t <T> isequal (T x, T y) __NOEXC {
1121
1118
return detail::RelConverter<T>::apply (
1122
- __sycl_std::__invoke_FOrdEqual<detail::rel_ret_t <T>>(x, y));
1119
+ __sycl_std::__invoke_FOrdEqual<detail::internal_rel_ret_t <T>>(x, y));
1123
1120
}
1124
1121
1125
- // int isnotequal (half x, half y)
1126
- // shortn isnotequal (halfn x, halfn y)
1127
- // igeninteger32bit isnotequal (genfloatf x, genfloatf y)
1128
- // int isnotequal (double x, double y)
1129
- // longn isnotequal (doublen x, doublen y)
1130
1122
template <typename T,
1131
1123
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1132
1124
detail::common_rel_ret_t <T> isnotequal (T x, T y) __NOEXC {
1133
1125
return detail::RelConverter<T>::apply (
1134
- __sycl_std::__invoke_FUnordNotEqual<detail::rel_ret_t <T>>(x, y));
1126
+ __sycl_std::__invoke_FUnordNotEqual<detail::internal_rel_ret_t <T>>(x, y));
1135
1127
}
1136
1128
1137
- // int isgreater (half x, half y)
1138
- // shortn isgreater (halfn x, halfn y)
1139
- // igeninteger32bit isgreater (genfloatf x, genfloatf y)
1140
- // int isgreater (double x, double y)
1141
- // longn isgreater (doublen x, doublen y)
1142
1129
template <typename T,
1143
1130
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1144
1131
detail::common_rel_ret_t <T> isgreater (T x, T y) __NOEXC {
1145
1132
return detail::RelConverter<T>::apply (
1146
- __sycl_std::__invoke_FOrdGreaterThan<detail::rel_ret_t <T>>(x, y));
1133
+ __sycl_std::__invoke_FOrdGreaterThan<detail::internal_rel_ret_t <T>>(x,
1134
+ y));
1147
1135
}
1148
1136
1149
- // int isgreaterequal (half x, half y)
1150
- // shortn isgreaterequal (halfn x, halfn y)
1151
- // igeninteger32bit isgreaterequal (genfloatf x, genfloatf y)
1152
- // int isgreaterequal (double x, double y)
1153
- // longn isgreaterequal (doublen x, doublen y)
1154
1137
template <typename T,
1155
1138
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1156
1139
detail::common_rel_ret_t <T> isgreaterequal (T x, T y) __NOEXC {
1157
1140
return detail::RelConverter<T>::apply (
1158
- __sycl_std::__invoke_FOrdGreaterThanEqual<detail::rel_ret_t <T>>(x, y));
1141
+ __sycl_std::__invoke_FOrdGreaterThanEqual<detail::internal_rel_ret_t <T>>(
1142
+ x, y));
1159
1143
}
1160
1144
1161
- // int isless (half x, half y)
1162
- // shortn isless (halfn x, halfn y)
1163
- // igeninteger32bit isless (genfloatf x, genfloatf y)
1164
- // int isless (long x, long y)
1165
- // longn isless (doublen x, doublen y)
1166
1145
template <typename T,
1167
1146
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1168
1147
detail::common_rel_ret_t <T> isless (T x, T y) __NOEXC {
1169
1148
return detail::RelConverter<T>::apply (
1170
- __sycl_std::__invoke_FOrdLessThan<detail::rel_ret_t <T>>(x, y));
1149
+ __sycl_std::__invoke_FOrdLessThan<detail::internal_rel_ret_t <T>>(x, y));
1171
1150
}
1172
1151
1173
- // int islessequal (half x, half y)
1174
- // shortn islessequal (halfn x, halfn y)
1175
- // igeninteger32bit islessequal (genfloatf x, genfloatf y)
1176
- // int islessequal (double x, double y)
1177
- // longn islessequal (doublen x, doublen y)
1178
1152
template <typename T,
1179
1153
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1180
1154
detail::common_rel_ret_t <T> islessequal (T x, T y) __NOEXC {
1181
1155
return detail::RelConverter<T>::apply (
1182
- __sycl_std::__invoke_FOrdLessThanEqual<detail::rel_ret_t <T>>(x, y));
1156
+ __sycl_std::__invoke_FOrdLessThanEqual<detail::internal_rel_ret_t <T>>(x,
1157
+ y));
1183
1158
}
1184
1159
1185
- // int islessgreater (half x, half y)
1186
- // shortn islessgreater (halfn x, halfn y)
1187
- // igeninteger32bit islessgreater (genfloatf x, genfloatf y)
1188
- // int islessgreater (double x, double y)
1189
- // longn islessgreater (doublen x, doublen y)
1190
1160
template <typename T,
1191
1161
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1192
1162
detail::common_rel_ret_t <T> islessgreater (T x, T y) __NOEXC {
1193
1163
return detail::RelConverter<T>::apply (
1194
- __sycl_std::__invoke_FOrdNotEqual<detail::rel_ret_t <T>>(x, y));
1164
+ __sycl_std::__invoke_FOrdNotEqual<detail::internal_rel_ret_t <T>>(x, y));
1195
1165
}
1196
1166
1197
- // int isfinite (half x)
1198
- // shortn isfinite (halfn x)
1199
- // igeninteger32bit isfinite (genfloatf x)
1200
- // int isfinite (double x)
1201
- // longn isfinite (doublen x)
1202
1167
template <typename T,
1203
1168
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1204
1169
detail::common_rel_ret_t <T> isfinite (T x) __NOEXC {
1205
1170
return detail::RelConverter<T>::apply (
1206
- __sycl_std::__invoke_IsFinite<detail::rel_ret_t <T>>(x));
1171
+ __sycl_std::__invoke_IsFinite<detail::internal_rel_ret_t <T>>(x));
1207
1172
}
1208
1173
1209
- // int isinf (half x)
1210
- // shortn isinf (halfn x)
1211
- // igeninteger32bit isinf (genfloatf x)
1212
- // int isinf (double x)
1213
- // longn isinf (doublen x)
1214
1174
template <typename T,
1215
1175
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1216
1176
detail::common_rel_ret_t <T> isinf (T x) __NOEXC {
1217
1177
return detail::RelConverter<T>::apply (
1218
- __sycl_std::__invoke_IsInf<detail::rel_ret_t <T>>(x));
1178
+ __sycl_std::__invoke_IsInf<detail::internal_rel_ret_t <T>>(x));
1219
1179
}
1220
1180
1221
- // int isnan (half x)
1222
- // shortn isnan (halfn x)
1223
- // igeninteger32bit isnan (genfloatf x)
1224
- // int isnan (double x)
1225
- // longn isnan (doublen x)
1226
1181
template <typename T,
1227
1182
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1228
1183
detail::common_rel_ret_t <T> isnan (T x) __NOEXC {
1229
1184
return detail::RelConverter<T>::apply (
1230
- __sycl_std::__invoke_IsNan<detail::rel_ret_t <T>>(x));
1185
+ __sycl_std::__invoke_IsNan<detail::internal_rel_ret_t <T>>(x));
1231
1186
}
1232
1187
1233
- // int isnormal (half x)
1234
- // shortn isnormal (halfn x)
1235
- // igeninteger32bit isnormal (genfloatf x)
1236
- // int isnormal (double x)
1237
- // longn isnormal (doublen x)
1238
1188
template <typename T,
1239
1189
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1240
1190
detail::common_rel_ret_t <T> isnormal (T x) __NOEXC {
1241
1191
return detail::RelConverter<T>::apply (
1242
- __sycl_std::__invoke_IsNormal<detail::rel_ret_t <T>>(x));
1192
+ __sycl_std::__invoke_IsNormal<detail::internal_rel_ret_t <T>>(x));
1243
1193
}
1244
1194
1245
- // int isordered (half x)
1246
- // shortn isordered (halfn x, halfn y)
1247
- // igeninteger32bit isordered (genfloatf x, genfloatf y)
1248
- // int isordered (double x, double y)
1249
- // longn isordered (doublen x, doublen y)
1250
1195
template <typename T,
1251
1196
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1252
1197
detail::common_rel_ret_t <T> isordered (T x, T y) __NOEXC {
1253
1198
return detail::RelConverter<T>::apply (
1254
- __sycl_std::__invoke_Ordered<detail::rel_ret_t <T>>(x, y));
1199
+ __sycl_std::__invoke_Ordered<detail::internal_rel_ret_t <T>>(x, y));
1255
1200
}
1256
1201
1257
- // int isunordered (half x, half y)
1258
- // shortn isunordered (halfn x, halfn y)
1259
- // igeninteger32bit isunordered (genfloatf x, genfloatf y)
1260
- // int isunordered (double x, double y)
1261
- // longn isunordered (doublen x, doublen y)
1262
1202
template <typename T,
1263
1203
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1264
1204
detail::common_rel_ret_t <T> isunordered (T x, T y) __NOEXC {
1265
1205
return detail::RelConverter<T>::apply (
1266
- __sycl_std::__invoke_Unordered<detail::rel_ret_t <T>>(x, y));
1206
+ __sycl_std::__invoke_Unordered<detail::internal_rel_ret_t <T>>(x, y));
1267
1207
}
1268
1208
1269
- // int signbit (half x)
1270
- // shortn signbit (halfn x)
1271
- // igeninteger32bit signbit (genfloatf x)
1272
- // int signbit (double)
1273
- // longn signbit (doublen x)
1274
1209
template <typename T,
1275
1210
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1276
1211
detail::common_rel_ret_t <T> signbit (T x) __NOEXC {
1277
1212
return detail::RelConverter<T>::apply (
1278
- __sycl_std::__invoke_SignBitSet<detail::rel_ret_t <T>>(x));
1213
+ __sycl_std::__invoke_SignBitSet<detail::internal_rel_ret_t <T>>(x));
1279
1214
}
1280
1215
1216
+ namespace detail {
1217
+ #if defined(SYCL2020_CONFORMANT_APIS) && SYCL_LANGUAGE_VERSION >= 202001
1218
+ using anyall_ret_t = bool ;
1219
+ #else
1220
+ using anyall_ret_t = int ;
1221
+ #endif
1222
+ } // namespace detail
1223
+
1281
1224
// int any (sigeninteger x)
1282
1225
template <typename T>
1283
- detail::enable_if_t <detail::is_sigeninteger<T>::value, int > any (T x) __NOEXC {
1226
+ detail::enable_if_t <detail::is_sigeninteger<T>::value, detail::anyall_ret_t >
1227
+ any (T x) __NOEXC {
1284
1228
return detail::Boolean<1 >(int (detail::msbIsSet (x)));
1285
1229
}
1286
1230
1287
1231
// int any (vigeninteger x)
1288
1232
template <typename T>
1289
- detail::enable_if_t <detail::is_vigeninteger<T>::value, int > any (T x) __NOEXC {
1233
+ detail::enable_if_t <detail::is_vigeninteger<T>::value, detail::anyall_ret_t >
1234
+ any (T x) __NOEXC {
1290
1235
return detail::rel_sign_bit_test_ret_t <T>(
1291
1236
__sycl_std::__invoke_Any<detail::rel_sign_bit_test_ret_t <T>>(
1292
1237
detail::rel_sign_bit_test_arg_t <T>(x)));
1293
1238
}
1294
1239
1295
1240
// int all (sigeninteger x)
1296
1241
template <typename T>
1297
- detail::enable_if_t <detail::is_sigeninteger<T>::value, int > all (T x) __NOEXC {
1242
+ detail::enable_if_t <detail::is_sigeninteger<T>::value, detail::anyall_ret_t >
1243
+ all (T x) __NOEXC {
1298
1244
return detail::Boolean<1 >(int (detail::msbIsSet (x)));
1299
1245
}
1300
1246
1301
1247
// int all (vigeninteger x)
1302
1248
template <typename T>
1303
- detail::enable_if_t <detail::is_vigeninteger<T>::value, int > all (T x) __NOEXC {
1249
+ detail::enable_if_t <detail::is_vigeninteger<T>::value, detail::anyall_ret_t >
1250
+ all (T x) __NOEXC {
1304
1251
return detail::rel_sign_bit_test_ret_t <T>(
1305
1252
__sycl_std::__invoke_All<detail::rel_sign_bit_test_ret_t <T>>(
1306
1253
detail::rel_sign_bit_test_arg_t <T>(x)));
0 commit comments