batmat 0.0.15
Batched linear algebra routines
Loading...
Searching...
No Matches
unroll.h
Go to the documentation of this file.
1#pragma once
2
3#include <guanaqo/stringify.h>
4
5#ifdef NDEBUG
6
7#ifdef __clang__
8#define BATMAT_FULLY_UNROLL_LOOP _Pragma("clang loop unroll(full)")
9#define BATMAT_FULLY_UNROLLED_FOR(...) BATMAT_FULLY_UNROLL_LOOP for (__VA_ARGS__)
10#define BATMAT_FULLY_UNROLLED_IVDEP_FOR(...) \
11 BATMAT_FULLY_UNROLL_LOOP _Pragma("clang loop interleave(enable)") for (__VA_ARGS__)
12#define BATMAT_UNROLLED_IVDEP_FOR(N, ...) \
13 _Pragma(GUANAQO_STRINGIFY(clang loop unroll_count(N))) \
14 _Pragma("clang loop interleave(enable)") for (__VA_ARGS__)
15#else
16#define BATMAT_FULLY_UNROLL_LOOP _Pragma("GCC unroll 99")
17#define BATMAT_FULLY_UNROLLED_FOR(...) BATMAT_FULLY_UNROLL_LOOP for (__VA_ARGS__)
18#define BATMAT_FULLY_UNROLLED_IVDEP_FOR(...) \
19 BATMAT_FULLY_UNROLL_LOOP _Pragma("GCC ivdep") for (__VA_ARGS__)
20#define BATMAT_UNROLLED_IVDEP_FOR(N, ...) \
21 _Pragma(GUANAQO_STRINGIFY(GCC unroll N)) _Pragma("GCC ivdep") for (__VA_ARGS__)
22#endif
23
24#else
25
26#define BATMAT_FULLY_UNROLL_LOOP
27#define BATMAT_FULLY_UNROLLED_FOR(...) for (__VA_ARGS__)
28#define BATMAT_FULLY_UNROLLED_IVDEP_FOR(...) for (__VA_ARGS__)
29#define BATMAT_UNROLLED_IVDEP_FOR(N, ...) for (__VA_ARGS__)
30
31#endif