2 * Copyright (C) 2013 Andrea Mazzoleni
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.
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.
17 static struct 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 },
37 { "sse2", raid_gen1_sse2 },
38 { "sse2", raid_gen2_sse2 },
39 { "sse2", raid_genz_sse2 },
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 },
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 },
61 { "sse2e", raid_gen2_sse2ext },
62 { "sse2e", raid_genz_sse2ext },
65 { "ssse3e", raid_gen3_ssse3ext },
66 { "ssse3e", raid_gen4_ssse3ext },
67 { "ssse3e", raid_gen5_ssse3ext },
68 { "ssse3e", raid_gen6_ssse3ext },
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 },
81 static const char *raid_tag(void (*func)())
83 struct raid_func *i = RAID_FUNC;
85 while (i->name != 0) {
96 const char *raid_gen1_tag(void)
98 return raid_tag(raid_gen_ptr[0]);
101 const char *raid_gen2_tag(void)
103 return raid_tag(raid_gen_ptr[1]);
106 const char *raid_genz_tag(void)
108 return raid_tag(raid_genz_ptr);
111 const char *raid_gen3_tag(void)
113 return raid_tag(raid_gen_ptr[2]);
116 const char *raid_gen4_tag(void)
118 return raid_tag(raid_gen_ptr[3]);
121 const char *raid_gen5_tag(void)
123 return raid_tag(raid_gen_ptr[4]);
126 const char *raid_gen6_tag(void)
128 return raid_tag(raid_gen_ptr[5]);
131 const char *raid_rec1_tag(void)
133 return raid_tag(raid_rec_ptr[0]);
136 const char *raid_rec2_tag(void)
138 return raid_tag(raid_rec_ptr[1]);
141 const char *raid_recX_tag(void)
143 return raid_tag(raid_rec_ptr[2]);