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