C言語のループを展開して高速化するマクロを作成した。
マクロを使う
- ソース
// ©2021 Yuichiro Nakada
// gcc unrolling.c -o unrolling
#include <stdio.h>
#define DO16(e) e e e e e e e e e e e e e e e e
#define FOR16(n, e) { int c=n/16; n-=c*16; for (; c>0; c--) { DO16(e) }; do { e } while (--n>0); }
#define DO4(e) e e e e
#define FOR4(n, e) { int c=n/4; n-=c*4; for (; c>0; c--) { DO4(e) }; do { e } while (--n>0); }
int main()
{
int n = 0;
int len = 17;
FOR4(len,
printf("%d\n", n);
n++;
);
n = 0;
len = 3;
FOR4(len,
printf("%d\n", n);
n++;
);
n = 0;
len = 17;
FOR16(len,
printf("%d\n", n);
n++;
);
}
- 実行結果
$ ./unrolling
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
0
1
2
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16