|
217 | 217 | * func_type the_callee(const int *src, int *dst, func_type *cb) |
218 | 218 | * { |
219 | 219 | * // direct call |
220 | | - * NPY_CPU_DISPATCH_CALL(dispatch_me, (src, dst)) |
| 220 | + * NPY_CPU_DISPATCH_CALL(dispatch_me, (src, dst)); |
221 | 221 | * // assign the pointer |
222 | | - * NPY_CPU_DISPATCH_CALL(*cb = dispatch_me) |
| 222 | + * *cb = NPY_CPU_DISPATCH_CALL(dispatch_me); |
| 223 | + * // or |
| 224 | + * NPY_CPU_DISPATCH_CALL(*cb = dispatch_me); |
223 | 225 | * // return the pointer |
224 | | - * NPY_CPU_DISPATCH_CALL(return dispatch_me) |
| 226 | + * return NPY_CPU_DISPATCH_CALL(dispatch_me); |
225 | 227 | * } |
226 | 228 | */ |
227 | 229 | #define NPY_CPU_DISPATCH_CALL(...) \ |
228 | | - if (0) {/*DUMMY*/} \ |
229 | 230 | NPY__CPU_DISPATCH_CALL(NPY_CPU_HAVE, NPY_CPU_DISPATCH_CALL_CB_, __VA_ARGS__) \ |
230 | 231 | NPY__CPU_DISPATCH_BASELINE_CALL(NPY_CPU_DISPATCH_CALL_BASE_CB_, __VA_ARGS__) |
231 | 232 | // Preprocessor callbacks |
232 | 233 | #define NPY_CPU_DISPATCH_CALL_CB_(TESTED_FEATURES, TARGET_NAME, LEFT, ...) \ |
233 | | - else if (TESTED_FEATURES) { NPY_CAT(NPY_CAT(LEFT, _), TARGET_NAME) __VA_ARGS__; } |
| 234 | + (TESTED_FEATURES) ? (NPY_CAT(NPY_CAT(LEFT, _), TARGET_NAME) __VA_ARGS__) : |
234 | 235 | #define NPY_CPU_DISPATCH_CALL_BASE_CB_(LEFT, ...) \ |
235 | | - else { LEFT __VA_ARGS__; } |
| 236 | + (LEFT __VA_ARGS__) |
236 | 237 | /** |
237 | 238 | * Macro NPY_CPU_DISPATCH_CALL_XB(LEFT, ...) |
238 | 239 | * |
239 | | - * Same as `NPY_CPU_DISPATCH_DECLARE` but exclude the baseline declration even |
240 | | - * if it was provided within the configration statments. |
| 240 | + * Same as `NPY_CPU_DISPATCH_DECLARE` but exclude the baseline declaration even |
| 241 | + * if it was provided within the configration statements. |
| 242 | + * Returns void. |
241 | 243 | */ |
| 244 | +#define NPY_CPU_DISPATCH_CALL_XB_CB_(TESTED_FEATURES, TARGET_NAME, LEFT, ...) \ |
| 245 | + (TESTED_FEATURES) ? (void) (NPY_CAT(NPY_CAT(LEFT, _), TARGET_NAME) __VA_ARGS__) : |
242 | 246 | #define NPY_CPU_DISPATCH_CALL_XB(...) \ |
243 | | - if (0) {/*DUMMY*/} \ |
244 | | - NPY__CPU_DISPATCH_CALL(NPY_CPU_HAVE, NPY_CPU_DISPATCH_CALL_CB_, __VA_ARGS__) |
| 247 | + NPY__CPU_DISPATCH_CALL(NPY_CPU_HAVE, NPY_CPU_DISPATCH_CALL_XB_CB_, __VA_ARGS__) \ |
| 248 | + ((void) 0 /* discarded expression value */) |
245 | 249 | /** |
246 | 250 | * Macro NPY_CPU_DISPATCH_CALL_ALL(LEFT, ...) |
247 | 251 | * |
248 | 252 | * Same as `NPY_CPU_DISPATCH_CALL` but dispatching all the required optimizations for |
249 | 253 | * the exported functions and variables instead of highest interested one. |
| 254 | + * Returns void. |
250 | 255 | */ |
251 | 256 | #define NPY_CPU_DISPATCH_CALL_ALL(...) \ |
252 | | - NPY__CPU_DISPATCH_CALL(NPY_CPU_HAVE, NPY_CPU_DISPATCH_CALL_ALL_CB_, __VA_ARGS__) \ |
253 | | - NPY__CPU_DISPATCH_BASELINE_CALL(NPY_CPU_DISPATCH_CALL_ALL_BASE_CB_, __VA_ARGS__) |
| 257 | + (NPY__CPU_DISPATCH_CALL(NPY_CPU_HAVE, NPY_CPU_DISPATCH_CALL_ALL_CB_, __VA_ARGS__) \ |
| 258 | + NPY__CPU_DISPATCH_BASELINE_CALL(NPY_CPU_DISPATCH_CALL_ALL_BASE_CB_, __VA_ARGS__)) |
254 | 259 | // Preprocessor callbacks |
255 | 260 | #define NPY_CPU_DISPATCH_CALL_ALL_CB_(TESTED_FEATURES, TARGET_NAME, LEFT, ...) \ |
256 | | - if (TESTED_FEATURES) { NPY_CAT(NPY_CAT(LEFT, _), TARGET_NAME) __VA_ARGS__; } |
| 261 | + ((TESTED_FEATURES) ? (NPY_CAT(NPY_CAT(LEFT, _), TARGET_NAME) __VA_ARGS__) : (void) 0), |
257 | 262 | #define NPY_CPU_DISPATCH_CALL_ALL_BASE_CB_(LEFT, ...) \ |
258 | | - { LEFT __VA_ARGS__; } |
| 263 | + ( LEFT __VA_ARGS__ ) |
259 | 264 |
|
260 | 265 | #endif // NPY_CPU_DISPATCH_H_ |
0 commit comments