@@ -1109,198 +1109,138 @@ 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
1119
__sycl_std::__invoke_FOrdEqual<detail::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
1126
__sycl_std::__invoke_FUnordNotEqual<detail::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
1133
__sycl_std::__invoke_FOrdGreaterThan<detail::rel_ret_t <T>>(x, y));
1147
1134
}
1148
1135
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
1136
template <typename T,
1155
1137
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1156
1138
detail::common_rel_ret_t <T> isgreaterequal (T x, T y) __NOEXC {
1157
1139
return detail::RelConverter<T>::apply (
1158
1140
__sycl_std::__invoke_FOrdGreaterThanEqual<detail::rel_ret_t <T>>(x, y));
1159
1141
}
1160
1142
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
1143
template <typename T,
1167
1144
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1168
1145
detail::common_rel_ret_t <T> isless (T x, T y) __NOEXC {
1169
1146
return detail::RelConverter<T>::apply (
1170
1147
__sycl_std::__invoke_FOrdLessThan<detail::rel_ret_t <T>>(x, y));
1171
1148
}
1172
1149
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
1150
template <typename T,
1179
1151
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1180
1152
detail::common_rel_ret_t <T> islessequal (T x, T y) __NOEXC {
1181
1153
return detail::RelConverter<T>::apply (
1182
1154
__sycl_std::__invoke_FOrdLessThanEqual<detail::rel_ret_t <T>>(x, y));
1183
1155
}
1184
1156
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
1157
template <typename T,
1191
1158
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1192
1159
detail::common_rel_ret_t <T> islessgreater (T x, T y) __NOEXC {
1193
1160
return detail::RelConverter<T>::apply (
1194
1161
__sycl_std::__invoke_FOrdNotEqual<detail::rel_ret_t <T>>(x, y));
1195
1162
}
1196
1163
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
1164
template <typename T,
1203
1165
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1204
1166
detail::common_rel_ret_t <T> isfinite (T x) __NOEXC {
1205
1167
return detail::RelConverter<T>::apply (
1206
1168
__sycl_std::__invoke_IsFinite<detail::rel_ret_t <T>>(x));
1207
1169
}
1208
1170
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
1171
template <typename T,
1215
1172
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1216
1173
detail::common_rel_ret_t <T> isinf (T x) __NOEXC {
1217
1174
return detail::RelConverter<T>::apply (
1218
1175
__sycl_std::__invoke_IsInf<detail::rel_ret_t <T>>(x));
1219
1176
}
1220
1177
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
1178
template <typename T,
1227
1179
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1228
1180
detail::common_rel_ret_t <T> isnan (T x) __NOEXC {
1229
1181
return detail::RelConverter<T>::apply (
1230
1182
__sycl_std::__invoke_IsNan<detail::rel_ret_t <T>>(x));
1231
1183
}
1232
1184
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
1185
template <typename T,
1239
1186
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1240
1187
detail::common_rel_ret_t <T> isnormal (T x) __NOEXC {
1241
1188
return detail::RelConverter<T>::apply (
1242
1189
__sycl_std::__invoke_IsNormal<detail::rel_ret_t <T>>(x));
1243
1190
}
1244
1191
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
1192
template <typename T,
1251
1193
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1252
1194
detail::common_rel_ret_t <T> isordered (T x, T y) __NOEXC {
1253
1195
return detail::RelConverter<T>::apply (
1254
1196
__sycl_std::__invoke_Ordered<detail::rel_ret_t <T>>(x, y));
1255
1197
}
1256
1198
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
1199
template <typename T,
1263
1200
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1264
1201
detail::common_rel_ret_t <T> isunordered (T x, T y) __NOEXC {
1265
1202
return detail::RelConverter<T>::apply (
1266
1203
__sycl_std::__invoke_Unordered<detail::rel_ret_t <T>>(x, y));
1267
1204
}
1268
1205
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
1206
template <typename T,
1275
1207
typename = detail::enable_if_t <detail::is_genfloat<T>::value, T>>
1276
1208
detail::common_rel_ret_t <T> signbit (T x) __NOEXC {
1277
1209
return detail::RelConverter<T>::apply (
1278
1210
__sycl_std::__invoke_SignBitSet<detail::rel_ret_t <T>>(x));
1279
1211
}
1280
1212
1281
- // int any (sigeninteger x)
1213
+ namespace detail {
1214
+ #if defined(SYCL2020_CONFORMANT_APIS) && SYCL_LANGUAGE_VERSION >= 202001
1215
+ using anyall_ret_t = bool ;
1216
+ #else
1217
+ using anyall_ret_t = int ;
1218
+ #endif
1219
+ } // namespace detail
1220
+
1282
1221
template <typename T>
1283
- detail::enable_if_t <detail::is_sigeninteger<T>::value, int > any (T x) __NOEXC {
1222
+ detail::enable_if_t <detail::is_sigeninteger<T>::value, detail::anyall_ret_t >
1223
+ any (T x) __NOEXC {
1284
1224
return detail::Boolean<1 >(int (detail::msbIsSet (x)));
1285
1225
}
1286
1226
1287
- // int any (vigeninteger x)
1288
1227
template <typename T>
1289
- detail::enable_if_t <detail::is_vigeninteger<T>::value, int > any (T x) __NOEXC {
1228
+ detail::enable_if_t <detail::is_vigeninteger<T>::value, detail::anyall_ret_t >
1229
+ any (T x) __NOEXC {
1290
1230
return detail::rel_sign_bit_test_ret_t <T>(
1291
1231
__sycl_std::__invoke_Any<detail::rel_sign_bit_test_ret_t <T>>(
1292
1232
detail::rel_sign_bit_test_arg_t <T>(x)));
1293
1233
}
1294
1234
1295
- // int all (sigeninteger x)
1296
1235
template <typename T>
1297
- detail::enable_if_t <detail::is_sigeninteger<T>::value, int > all (T x) __NOEXC {
1236
+ detail::enable_if_t <detail::is_sigeninteger<T>::value, detail::anyall_ret_t >
1237
+ all (T x) __NOEXC {
1298
1238
return detail::Boolean<1 >(int (detail::msbIsSet (x)));
1299
1239
}
1300
1240
1301
- // int all (vigeninteger x)
1302
1241
template <typename T>
1303
- detail::enable_if_t <detail::is_vigeninteger<T>::value, int > all (T x) __NOEXC {
1242
+ detail::enable_if_t <detail::is_vigeninteger<T>::value, detail::anyall_ret_t >
1243
+ all (T x) __NOEXC {
1304
1244
return detail::rel_sign_bit_test_ret_t <T>(
1305
1245
__sycl_std::__invoke_All<detail::rel_sign_bit_test_ret_t <T>>(
1306
1246
detail::rel_sign_bit_test_arg_t <T>(x)));
0 commit comments