]> git.sesse.net Git - bcachefs-tools-debian/blob - raid/tag.c
Move c_src dirs back to toplevel
[bcachefs-tools-debian] / raid / tag.c
1 /*
2  * Copyright (C) 2013 Andrea Mazzoleni
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  */
14
15 #include "internal.h"
16
17 static struct raid_func {
18         const char *name;
19         void (*p)();
20 } RAID_FUNC[] = {
21         { "int8", raid_gen3_int8 },
22         { "int8", raid_gen4_int8 },
23         { "int8", raid_gen5_int8 },
24         { "int8", raid_gen6_int8 },
25         { "int32", raid_gen1_int32 },
26         { "int64", raid_gen1_int64 },
27         { "int32", raid_gen2_int32 },
28         { "int64", raid_gen2_int64 },
29         { "int32", raid_genz_int32 },
30         { "int64", raid_genz_int64 },
31         { "int8", raid_rec1_int8 },
32         { "int8", raid_rec2_int8 },
33         { "int8", raid_recX_int8 },
34
35 #ifdef CONFIG_X86
36 #ifdef CONFIG_SSE2
37         { "sse2", raid_gen1_sse2 },
38         { "sse2", raid_gen2_sse2 },
39         { "sse2", raid_genz_sse2 },
40 #endif
41 #ifdef CONFIG_SSSE3
42         { "ssse3", raid_gen3_ssse3 },
43         { "ssse3", raid_gen4_ssse3 },
44         { "ssse3", raid_gen5_ssse3 },
45         { "ssse3", raid_gen6_ssse3 },
46         { "ssse3", raid_rec1_ssse3 },
47         { "ssse3", raid_rec2_ssse3 },
48         { "ssse3", raid_recX_ssse3 },
49 #endif
50 #ifdef CONFIG_AVX2
51         { "avx2", raid_gen1_avx2 },
52         { "avx2", raid_gen2_avx2 },
53         { "avx2", raid_rec1_avx2 },
54         { "avx2", raid_rec2_avx2 },
55         { "avx2", raid_recX_avx2 },
56 #endif
57 #endif
58
59 #ifdef CONFIG_X86_64
60 #ifdef CONFIG_SSE2
61         { "sse2e", raid_gen2_sse2ext },
62         { "sse2e", raid_genz_sse2ext },
63 #endif
64 #ifdef CONFIG_SSSE3
65         { "ssse3e", raid_gen3_ssse3ext },
66         { "ssse3e", raid_gen4_ssse3ext },
67         { "ssse3e", raid_gen5_ssse3ext },
68         { "ssse3e", raid_gen6_ssse3ext },
69 #endif
70 #ifdef CONFIG_AVX2
71         { "avx2e", raid_gen3_avx2ext },
72         { "avx2e", raid_genz_avx2ext },
73         { "avx2e", raid_gen4_avx2ext },
74         { "avx2e", raid_gen5_avx2ext },
75         { "avx2e", raid_gen6_avx2ext },
76 #endif
77 #endif
78         { 0, 0 }
79 };
80
81 static const char *raid_tag(void (*func)())
82 {
83         struct raid_func *i = RAID_FUNC;
84
85         while (i->name != 0) {
86                 if (i->p == func)
87                         return i->name;
88                 ++i;
89         }
90
91         /* LCOV_EXCL_START */
92         return "unknown";
93         /* LCOV_EXCL_STOP */
94 }
95
96 const char *raid_gen1_tag(void)
97 {
98         return raid_tag(raid_gen_ptr[0]);
99 }
100
101 const char *raid_gen2_tag(void)
102 {
103         return raid_tag(raid_gen_ptr[1]);
104 }
105
106 const char *raid_genz_tag(void)
107 {
108         return raid_tag(raid_genz_ptr);
109 }
110
111 const char *raid_gen3_tag(void)
112 {
113         return raid_tag(raid_gen_ptr[2]);
114 }
115
116 const char *raid_gen4_tag(void)
117 {
118         return raid_tag(raid_gen_ptr[3]);
119 }
120
121 const char *raid_gen5_tag(void)
122 {
123         return raid_tag(raid_gen_ptr[4]);
124 }
125
126 const char *raid_gen6_tag(void)
127 {
128         return raid_tag(raid_gen_ptr[5]);
129 }
130
131 const char *raid_rec1_tag(void)
132 {
133         return raid_tag(raid_rec_ptr[0]);
134 }
135
136 const char *raid_rec2_tag(void)
137 {
138         return raid_tag(raid_rec_ptr[1]);
139 }
140
141 const char *raid_recX_tag(void)
142 {
143         return raid_tag(raid_rec_ptr[2]);
144 }
145