1/*******************************************************************************
2* Copyright 2018-2022 Intel Corporation
3*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8* http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*******************************************************************************/
16
17#ifndef COMMON_TAG_TRAITS_HPP
18#define COMMON_TAG_TRAITS_HPP
19
20#include <assert.h>
21
22#include "c_types_map.hpp"
23#include "utils.hpp"
24
25namespace dnnl {
26namespace impl {
27
28enum class block_dim_t {
29 _,
30 _A,
31 _B,
32 _C,
33 _D,
34 _E,
35 _AB,
36 _BC,
37 _CD,
38 _CE,
39};
40
41enum class inner_blk_t {
42 _,
43 _4a,
44 _4b,
45 _4c,
46 _8a,
47 _8b,
48 _16a,
49 _16b,
50 _16c,
51 _32a,
52 _32b,
53 _32c,
54 _32d,
55 _32e,
56 _48b,
57 _48c,
58 _64b,
59 _64c,
60
61 _4a4b,
62 _4b4a,
63 _4b4c,
64 _4c4b,
65 _8a8b,
66 _8b8a,
67 _8b8c,
68 _8c8b,
69 _16a16b,
70 _16a32b,
71 _16a48b,
72 _16a64b,
73 _16b64a,
74 _16b32a,
75 _16b16a,
76 _16b16c,
77 _16c16b,
78 _32a32b,
79 _16a2b,
80 _16a4b,
81 _16b2a,
82 _16b4a,
83 _16b2c,
84 _16b4c,
85 _16c2b,
86 _16c4b,
87 _32d4c,
88 _32e2c,
89 _32e4c,
90 _32b2a,
91 _32b4a,
92 _32c2b,
93 _32c4b,
94 _64e2c,
95 _64e4c,
96 _32c2e,
97 _48c2b,
98 _48c4b,
99 _48b2a,
100 _48b4a,
101 _64b2a,
102 _64b4a,
103 _64c2b,
104 _64c4b,
105
106 _2c8b4c,
107 _8a16b2a,
108 _4b16a4b,
109 _4b32a4b,
110 _4b64a4b,
111 _2b8a4b,
112 _8b16a2b,
113 _8b32a2b,
114 _8b64a2b,
115 _8b16c2b,
116 _4c16b4c,
117 _8c16b2c,
118 _2b4c2b,
119 _2c4b2c,
120 _4b8c2b,
121 _4c8b2c,
122
123 _16a16b2a,
124 _16a32b2a,
125 _16a48b2a,
126 _16a64b2a,
127 _16b16a2b,
128 _16b32a2b,
129 _16b48a2b,
130 _16b64a2b,
131 _16a16b4a,
132 _16a32b4a,
133 _16a48b4a,
134 _16a64b4a,
135 _16b16a4b,
136 _16b32a4b,
137 _16b48a4b,
138 _16b64a4b,
139 _16b16c2b,
140 _16c16b2c,
141 _16c16b4c,
142 _2a8b8a2b,
143 _2b8c8b2c,
144 _4a8b8a4b,
145 _4b8c8b4c,
146 _16c32b2c,
147 _16c48b2c,
148 _16c64b2c,
149 _16c32b4c,
150 _16c48b4c,
151 _16c64b4c,
152 _16b32c,
153 _16b48c,
154 _16b64c,
155 _16b32c2b,
156 _16b48c2b,
157 _16b64c2b,
158 _16b16c4b,
159 _16b32c4b,
160 _16b48c4b,
161 _16b64c4b,
162};
163
164/** returns the offset within the block for weights blocked over oc and ic */
165template <inner_blk_t f>
166constexpr int AB_or_BC_blk_off(int x0, int x1) {
167 using ib = inner_blk_t;
168 static_assert(
169 utils::one_of(f, ib::_4a4b, ib::_4b4a, ib::_4b4c, ib::_4c4b,
170 ib::_8a8b, ib::_8b8a, ib::_8b8c, ib::_8c8b, ib::_16a16b,
171 ib::_16b64a, ib::_16b32a, ib::_16b16a, ib::_16b16c,
172 ib::_16c16b, ib::_32a32b, ib::_16a2b, ib::_16a4b,
173 ib::_16b2c, ib::_16b4c, ib::_2c8b4c, ib::_8a16b2a,
174 ib::_4b64a4b, ib::_4b32a4b, ib::_4b16a4b, ib::_2b8a4b,
175 ib::_8b64a2b, ib::_8b32a2b, ib::_8b16a2b, ib::_8b16c2b,
176 ib::_4c16b4c, ib::_8c16b2c, ib::_2b4c2b, ib::_2c4b2c,
177 ib::_4b8c2b, ib::_4c8b2c, ib::_16a32b, ib::_16a48b,
178 ib::_16a64b, ib::_16a16b2a, ib::_16a32b2a, ib::_16a48b2a,
179 ib::_16a64b2a, ib::_16a16b4a, ib::_16a32b4a, ib::_16a48b4a,
180 ib::_16a64b4a, ib::_16b16a2b, ib::_16b16a4b, ib::_16b16c2b,
181 ib::_16c16b2c, ib::_16c16b4c, ib::_2a8b8a2b, ib::_2b8c8b2c,
182 ib::_4a8b8a4b, ib::_4b8c8b4c, ib::_16b32a2b, ib::_16b48a2b,
183 ib::_16b64a2b, ib::_16b32a4b, ib::_16b48a4b, ib::_16b64a4b,
184 ib::_16c32b2c, ib::_16c48b2c, ib::_16c64b2c, ib::_16c32b4c,
185 ib::_16c48b4c, ib::_16c64b4c, ib::_16b32c, ib::_16b48c,
186 ib::_16b64c, ib::_16b32c2b, ib::_16b48c2b, ib::_16b64c2b,
187 ib::_16b16c4b, ib::_16b32c4b, ib::_16b48c4b, ib::_16b64c4b),
188 "unexpected inner_blk format");
189
190 // clang-format off
191 return false ? 0
192 : (f == ib::_4a4b || f == ib::_4b4c) ? 4 * x0 + x1
193 : (f == ib::_4b4a || f == ib::_4c4b) ? 4 * x1 + x0
194 : (f == ib::_8a8b || f == ib::_8b8c) ? 8 * x0 + x1
195 : (f == ib::_8b8a || f == ib::_8c8b) ? 8 * x1 + x0
196 : (f == ib::_16a16b || f == ib::_16b16c) ? 16 * x0 + x1
197 : (f == ib::_16b64a) ? 64 * x1 + x0
198 : (f == ib::_16b32a) ? 32 * x1 + x0
199 : (f == ib::_16b16a || f == ib::_16c16b) ? 16 * x1 + x0
200 : (f == ib::_16a2b || f == ib::_16b2c) ? 2 * x0 + x1
201 : (f == ib::_16a4b || f == ib::_16b4c) ? 4 * x0 + x1
202 : (utils::one_of(f, ib::_32a32b, ib::_16a32b, ib::_16b32c)) ? 32 * x0 + x1
203 : (utils::one_of(f, ib::_8a16b2a, ib::_8b16c2b, ib::_16a16b2a, ib::_16b16c2b)) ? (x0 / 2) * 32 + x1 * 2 + x0 % 2
204 : (utils::one_of(f, ib::_16a48b, ib::_16b48c)) ? x0 * 48 + x1
205 : (utils::one_of(f, ib::_16a64b, ib::_16b64c)) ? x0 * 64 + x1
206 : (utils::one_of(f, ib::_16a32b2a, ib::_16b32c2b)) ? (x0 / 2) * 64 + x1 * 2 + x0 % 2
207 : (utils::one_of(f, ib::_16a48b2a, ib::_16b48c2b)) ? (x0 / 2) * 96 + x1 * 2 + x0 % 2
208 : (utils::one_of(f, ib::_16a64b2a, ib::_16b64c2b)) ? (x0 / 2) * 128 + x1 * 2 + x0 % 2
209 : (utils::one_of(f, ib::_16a16b4a, ib::_16b16c4b)) ? (x0 / 4) * 64 + x1 * 4 + x0 % 4
210 : (utils::one_of(f, ib::_16a32b4a, ib::_16b32c4b)) ? (x0 / 4) * 128 + x1 * 4 + x0 % 4
211 : (utils::one_of(f, ib::_16a48b4a, ib::_16b48c4b)) ? (x0 / 4) * 192 + x1 * 4 + x0 % 4
212 : (utils::one_of(f, ib::_16a64b4a, ib::_16b64c4b)) ? (x0 / 4) * 256 + x1 * 4 + x0 % 4
213 : (f == ib::_4b16a4b || f == ib::_4c16b4c) ? (x1 / 4) * 64 + x0 * 4 + x1 % 4
214 : (f == ib::_4b32a4b) ? (x1 / 4) * 128 + x0 * 4 + x1 % 4
215 : (f == ib::_4b64a4b) ? (x1 / 4) * 256 + x0 * 4 + x1 % 4
216 : (f == ib::_2b8a4b || f == ib::_2c8b4c) ? (x1 / 4) * 32 + x0 * 4 + x1 % 4
217 : (f == ib::_16b16a2b || f == ib::_16c16b2c) ? (x1 / 2) * 32 + x0 * 2 + x1 % 2
218 : (f == ib::_16b16a4b || f == ib::_16c16b4c) ? (x1 / 4) * 64 + x0 * 4 + x1 % 4
219 : (f == ib::_8b16a2b || f == ib::_8c16b2c) ? (x1 / 2) * 32 + x0 * 2 + x1 % 2
220 : (f == ib::_8b32a2b) ? (x1 / 2) * 64 + x0 * 2 + x1 % 2
221 : (f == ib::_8b64a2b) ? (x1 / 2) * 128 + x0 * 2 + x1 % 2
222 : (f == ib::_2b4c2b || f == ib::_2c4b2c) ? (x0 / 2) * 8 + x1 * 2 + x0 % 2
223 : (f == ib::_4b8c2b || f == ib::_4c8b2c) ? (x0 / 2) * 16 + x1 * 2 + x0 % 2
224 : (f == ib::_2a8b8a2b || f == ib::_2b8c8b2c) ? (x0 / 8) * 128 + (x1 / 2) * 16 + (x0 % 8) * 2 + x1 % 2
225 : (f == ib::_4a8b8a4b || f == ib::_4b8c8b4c) ? (x0 / 8) * 256 + (x1 / 4) * 32 + (x0 % 8) * 4 + x1 % 4
226 : (f == ib::_16b32a2b || f == ib::_16c32b2c) ? (x1 / 2) * 64 + x0 * 2 + x1 % 2
227 : (f == ib::_16b48a2b || f == ib::_16c48b2c) ? (x1 / 2) * 96 + x0 * 2 + x1 % 2
228 : (f == ib::_16b64a2b || f == ib::_16c64b2c) ? (x1 / 2) * 128 + x0 * 2 + x1 % 2
229 : (f == ib::_16b32a4b || f == ib::_16c32b4c) ? (x1 / 4) * 128 + x0 * 4 + x1 % 4
230 : (f == ib::_16b48a4b || f == ib::_16c48b4c) ? (x1 / 4) * 192 + x0 * 4 + x1 % 4
231 : (f == ib::_16b64a4b || f == ib::_16c64b4c) ? (x1 / 4) * 256 + x0 * 4 + x1 % 4
232 : INT_MIN;
233 // clang-format on
234}
235
236template <inner_blk_t b>
237struct inner_blk_traits {
238 using ib = inner_blk_t;
239};
240
241template <format_tag_t>
242struct tag_traits {
243 // block_dim_t block_dims;
244 // inner_blk_t inner_blks;
245 // int ndims;
246};
247
248#define DECL_TRAITS(_tag, _blk_fmt, _inner_blk, _ndims) \
249 template <> \
250 struct tag_traits<format_tag::_tag> { \
251 static constexpr block_dim_t block_dims = block_dim_t::_blk_fmt; \
252 static constexpr inner_blk_t inner_blks = inner_blk_t::_inner_blk; \
253 static constexpr int ndims = _ndims; \
254 }
255
256DECL_TRAITS(a, _, _, 1);
257DECL_TRAITS(ab, _, _, 2);
258DECL_TRAITS(abc, _, _, 3);
259DECL_TRAITS(abcd, _, _, 4);
260DECL_TRAITS(abcde, _, _, 5);
261DECL_TRAITS(abcdef, _, _, 6);
262DECL_TRAITS(abcdefg, _, _, 7);
263DECL_TRAITS(abcdefgh, _, _, 8);
264DECL_TRAITS(abcdefghi, _, _, 9);
265DECL_TRAITS(abcdefghij, _, _, 10);
266DECL_TRAITS(abcdefghijk, _, _, 11);
267DECL_TRAITS(abcdefghijkl, _, _, 12);
268DECL_TRAITS(abcdefghijlk, _, _, 12);
269DECL_TRAITS(abcdefghikj, _, _, 11);
270DECL_TRAITS(abcdefghji, _, _, 10);
271DECL_TRAITS(abcdefgih, _, _, 9);
272DECL_TRAITS(abcdefhg, _, _, 8);
273DECL_TRAITS(abcdegf, _, _, 7);
274DECL_TRAITS(abcdfe, _, _, 6);
275DECL_TRAITS(abced, _, _, 5);
276DECL_TRAITS(abdc, _, _, 4);
277DECL_TRAITS(abdec, _, _, 5);
278DECL_TRAITS(abdfce, _, _, 6);
279DECL_TRAITS(acb, _, _, 3);
280DECL_TRAITS(acbde, _, _, 5);
281DECL_TRAITS(acbdef, _, _, 6);
282DECL_TRAITS(abdefc, _, _, 6);
283DECL_TRAITS(acdb, _, _, 4);
284DECL_TRAITS(acdeb, _, _, 5);
285DECL_TRAITS(ba, _, _, 2);
286DECL_TRAITS(bac, _, _, 3);
287DECL_TRAITS(bacd, _, _, 4);
288DECL_TRAITS(bacde, _, _, 5);
289DECL_TRAITS(bca, _, _, 3);
290DECL_TRAITS(bcda, _, _, 4);
291DECL_TRAITS(bcdea, _, _, 5);
292DECL_TRAITS(cba, _, _, 3);
293DECL_TRAITS(cdba, _, _, 4);
294DECL_TRAITS(dcab, _, _, 4);
295DECL_TRAITS(cdeba, _, _, 5);
296DECL_TRAITS(decab, _, _, 5);
297DECL_TRAITS(defcab, _, _, 6);
298
299DECL_TRAITS(Abc4a, _A, _4a, 3);
300DECL_TRAITS(aBc4b, _B, _4b, 3);
301DECL_TRAITS(ABc4b16a4b, _AB, _4b16a4b, 3);
302DECL_TRAITS(ABc4b32a4b, _AB, _4b32a4b, 3);
303DECL_TRAITS(ABc4b64a4b, _AB, _4b64a4b, 3);
304DECL_TRAITS(ABc2b8a4b, _AB, _2b8a4b, 3);
305DECL_TRAITS(ABc16a16b2a, _AB, _16a16b2a, 3);
306DECL_TRAITS(ABc16b16a4b, _AB, _16b16a4b, 3);
307DECL_TRAITS(ABc16b32a4b, _AB, _16b32a4b, 3);
308DECL_TRAITS(ABc16b48a4b, _AB, _16b48a4b, 3);
309DECL_TRAITS(ABc16b64a4b, _AB, _16b64a4b, 3);
310DECL_TRAITS(ABc16b16a2b, _AB, _16b16a2b, 3);
311DECL_TRAITS(ABc16b32a2b, _AB, _16b32a2b, 3);
312DECL_TRAITS(ABc16b48a2b, _AB, _16b48a2b, 3);
313DECL_TRAITS(ABc16b64a2b, _AB, _16b64a2b, 3);
314DECL_TRAITS(ABc4b4a, _AB, _4b4a, 3);
315DECL_TRAITS(Abcd4a, _A, _4a, 4);
316DECL_TRAITS(aBcd4b, _B, _4b, 4);
317DECL_TRAITS(ABcd4b4a, _AB, _4b4a, 4);
318DECL_TRAITS(ABcd4a4b, _AB, _4a4b, 4);
319DECL_TRAITS(aBCd4c16b4c, _BC, _4c16b4c, 4);
320DECL_TRAITS(aBCd2c8b4c, _BC, _2c8b4c, 4);
321DECL_TRAITS(aBCd16b16c2b, _BC, _16b16c2b, 4);
322DECL_TRAITS(aBCd16c16b4c, _BC, _16c16b4c, 4);
323DECL_TRAITS(aBCd16c16b2c, _BC, _16c16b2c, 4);
324DECL_TRAITS(aBCdef16c16b4c, _BC, _16c16b4c, 6);
325DECL_TRAITS(aBCdef16c16b2c, _BC, _16c16b2c, 6);
326DECL_TRAITS(aBCd4c4b, _BC, _4c4b, 4);
327DECL_TRAITS(aBCd4b4c, _BC, _4b4c, 4);
328DECL_TRAITS(Abcde4a, _A, _4a, 5);
329DECL_TRAITS(aBcde4b, _B, _4b, 5);
330DECL_TRAITS(ABcde4b4a, _AB, _4b4a, 5);
331DECL_TRAITS(ABcde4a4b, _AB, _4a4b, 5);
332DECL_TRAITS(aBCde4c4b, _BC, _4c4b, 5);
333DECL_TRAITS(aBcdef4b, _B, _4b, 6);
334DECL_TRAITS(aBCdef4c4b, _BC, _4c4b, 6);
335DECL_TRAITS(aBCdef4b4c, _BC, _4b4c, 6);
336DECL_TRAITS(aBdc4b, _B, _4b, 4);
337DECL_TRAITS(aBdec4b, _B, _4b, 5);
338DECL_TRAITS(aBdefc4b, _B, _4b, 6);
339DECL_TRAITS(Acb4a, _A, _4a, 3);
340DECL_TRAITS(Acdb4a, _A, _4a, 4);
341DECL_TRAITS(Acdeb4a, _A, _4a, 5);
342
343DECL_TRAITS(AB16b16a, _AB, _16b16a, 2);
344DECL_TRAITS(AB16b32a, _AB, _16b32a, 2);
345DECL_TRAITS(AB16b64a, _AB, _16b64a, 2);
346DECL_TRAITS(AB8b16a2b, _AB, _8b16a2b, 2);
347DECL_TRAITS(AB8b32a2b, _AB, _8b32a2b, 2);
348DECL_TRAITS(AB8b64a2b, _AB, _8b64a2b, 2);
349DECL_TRAITS(AB4b16a4b, _AB, _4b16a4b, 2);
350DECL_TRAITS(AB4b32a4b, _AB, _4b32a4b, 2);
351DECL_TRAITS(AB4b64a4b, _AB, _4b64a4b, 2);
352DECL_TRAITS(AB16b16a4b, _AB, _16b16a4b, 2);
353DECL_TRAITS(AB16b32a4b, _AB, _16b32a4b, 2);
354DECL_TRAITS(AB16b48a4b, _AB, _16b48a4b, 2);
355DECL_TRAITS(AB16b64a4b, _AB, _16b64a4b, 2);
356DECL_TRAITS(AB16b16a2b, _AB, _16b16a2b, 2);
357DECL_TRAITS(AB16b32a2b, _AB, _16b32a2b, 2);
358DECL_TRAITS(AB16b48a2b, _AB, _16b48a2b, 2);
359DECL_TRAITS(AB16b64a2b, _AB, _16b64a2b, 2);
360
361DECL_TRAITS(BA16a16b, _AB, _16a16b, 2);
362DECL_TRAITS(BA16a32b, _AB, _16a32b, 2);
363DECL_TRAITS(BA16a48b, _AB, _16a48b, 2);
364DECL_TRAITS(BA16a64b, _AB, _16a64b, 2);
365DECL_TRAITS(BA16a16b2a, _AB, _16a16b2a, 2);
366DECL_TRAITS(BA16a32b2a, _AB, _16a32b2a, 2);
367DECL_TRAITS(BA16a48b2a, _AB, _16a48b2a, 2);
368DECL_TRAITS(BA16a64b2a, _AB, _16a64b2a, 2);
369DECL_TRAITS(BA16a16b4a, _AB, _16a16b4a, 2);
370DECL_TRAITS(BA16a32b4a, _AB, _16a32b4a, 2);
371DECL_TRAITS(BA16a48b4a, _AB, _16a48b4a, 2);
372DECL_TRAITS(BA16a64b4a, _AB, _16a64b4a, 2);
373DECL_TRAITS(aCB16b16c, _BC, _16b16c, 2);
374DECL_TRAITS(aCB16b32c, _BC, _16b32c, 2);
375DECL_TRAITS(aCB16b48c, _BC, _16b48c, 2);
376DECL_TRAITS(aCB16b64c, _BC, _16b64c, 2);
377DECL_TRAITS(aCB16b16c2b, _BC, _16b16c2b, 3);
378DECL_TRAITS(aCB16b32c2b, _BC, _16b32c2b, 3);
379DECL_TRAITS(aCB16b48c2b, _BC, _16b48c2b, 3);
380DECL_TRAITS(aCB16b64c2b, _BC, _16b64c2b, 3);
381DECL_TRAITS(aCB16b16c4b, _BC, _16b16c4b, 3);
382DECL_TRAITS(aCB16b32c4b, _BC, _16b32c4b, 3);
383DECL_TRAITS(aCB16b48c4b, _BC, _16b48c4b, 3);
384DECL_TRAITS(aCB16b64c4b, _BC, _16b64c4b, 3);
385
386DECL_TRAITS(aCdefB16b32c2b, _BC, _16b32c2b, 5);
387DECL_TRAITS(aCdefB16b32c4b, _BC, _16b32c4b, 5);
388DECL_TRAITS(aCdefB16b48c2b, _BC, _16b48c2b, 5);
389DECL_TRAITS(aCdefB16b48c4b, _BC, _16b48c4b, 5);
390DECL_TRAITS(aCdefB16b64c2b, _BC, _16b64c2b, 5);
391DECL_TRAITS(aCdefB16b64c4b, _BC, _16b64c4b, 5);
392DECL_TRAITS(BcdeA16a32b2a, _AB, _16a32b2a, 5);
393DECL_TRAITS(BcdeA16a32b4a, _AB, _16a32b4a, 5);
394DECL_TRAITS(BcdeA16a48b2a, _AB, _16a48b2a, 5);
395DECL_TRAITS(BcdeA16a48b4a, _AB, _16a48b4a, 5);
396DECL_TRAITS(BcdeA16a64b2a, _AB, _16a64b2a, 5);
397DECL_TRAITS(BcdeA16a64b4a, _AB, _16a64b4a, 5);
398DECL_TRAITS(aCdefb32c, _C, _32c, 5);
399DECL_TRAITS(aCdefB32c2b, _BC, _32c2b, 5);
400DECL_TRAITS(aCdefB32c4b, _BC, _32c4b, 5);
401DECL_TRAITS(aCdefb48c, _C, _48c, 5);
402DECL_TRAITS(aCdefB48c2b, _BC, _48c2b, 5);
403DECL_TRAITS(aCdefB48c4b, _BC, _48c4b, 5);
404DECL_TRAITS(aCdefb64c, _C, _64c, 5);
405DECL_TRAITS(aCdefB64c2b, _BC, _64c2b, 5);
406DECL_TRAITS(aCdefB64c4b, _BC, _64c4b, 5);
407DECL_TRAITS(Bcdea32b, _B, _32b, 5);
408DECL_TRAITS(BcdeA32b2a, _AB, _32b2a, 5);
409DECL_TRAITS(BcdeA32b4a, _AB, _32b4a, 5);
410DECL_TRAITS(Bcdea48b, _B, _48b, 5);
411DECL_TRAITS(BcdeA48b2a, _AB, _48b2a, 5);
412DECL_TRAITS(BcdeA48b4a, _AB, _48b4a, 5);
413DECL_TRAITS(Bcdea64b, _B, _64b, 5);
414DECL_TRAITS(BcdeA64b2a, _AB, _64b2a, 5);
415DECL_TRAITS(BcdeA64b4a, _AB, _64b4a, 5);
416DECL_TRAITS(Bca32b, _B, _32b, 3);
417DECL_TRAITS(BcA32b2a, _AB, _32b2a, 3);
418DECL_TRAITS(BcA32b4a, _AB, _32b4a, 3);
419DECL_TRAITS(Bca48b, _B, _48b, 3);
420DECL_TRAITS(BcA48b2a, _AB, _48b2a, 3);
421DECL_TRAITS(BcA48b4a, _AB, _48b4a, 3);
422DECL_TRAITS(Bca64b, _B, _64b, 3);
423DECL_TRAITS(BcA64b2a, _AB, _64b2a, 3);
424DECL_TRAITS(BcA64b4a, _AB, _64b4a, 3);
425DECL_TRAITS(aCdb32c, _C, _32c, 4);
426DECL_TRAITS(aCdB32c2b, _BC, _32c2b, 4);
427DECL_TRAITS(aCdB32c4b, _BC, _32c4b, 4);
428DECL_TRAITS(aCdb48c, _C, _48c, 4);
429DECL_TRAITS(aCdB48c2b, _BC, _48c2b, 4);
430DECL_TRAITS(aCdB48c4b, _BC, _48c4b, 4);
431DECL_TRAITS(aCdb64c, _C, _64c, 4);
432DECL_TRAITS(aCdB64c2b, _BC, _64c2b, 4);
433DECL_TRAITS(aCdB64c4b, _BC, _64c4b, 4);
434DECL_TRAITS(BcA16a16b2a, _AB, _16a16b2a, 3);
435DECL_TRAITS(BcA16a16b4a, _AB, _16a16b4a, 3);
436DECL_TRAITS(BcdA16a16b2a, _AB, _16a16b2a, 4);
437DECL_TRAITS(BcdA16a16b4a, _AB, _16a16b4a, 4);
438DECL_TRAITS(BcdeA16a16b2a, _AB, _16a16b2a, 5);
439DECL_TRAITS(BcdeA16a16b4a, _AB, _16a16b4a, 5);
440DECL_TRAITS(aCdB16b16c2b, _BC, _16b16c2b, 4);
441DECL_TRAITS(aCdB16b16c4b, _BC, _16b16c4b, 4);
442DECL_TRAITS(aCdeB16b16c2b, _BC, _16b16c2b, 5);
443DECL_TRAITS(aCdeB16b16c4b, _BC, _16b16c4b, 5);
444DECL_TRAITS(aCdefB16b16c2b, _BC, _16b16c2b, 5);
445DECL_TRAITS(aCdefB16b16c4b, _BC, _16b16c4b, 5);
446DECL_TRAITS(BcA16a32b2a, _AB, _16a32b2a, 3);
447DECL_TRAITS(BcA16a32b4a, _AB, _16a32b4a, 3);
448DECL_TRAITS(BcA16a48b2a, _AB, _16a48b2a, 3);
449DECL_TRAITS(BcA16a48b4a, _AB, _16a48b4a, 3);
450DECL_TRAITS(BcA16a64b2a, _AB, _16a64b2a, 3);
451DECL_TRAITS(BcA16a64b4a, _AB, _16a64b4a, 3);
452DECL_TRAITS(aCdB16b32c2b, _BC, _16b32c2b, 4);
453DECL_TRAITS(aCdB16b32c4b, _BC, _16b32c4b, 4);
454DECL_TRAITS(aCdB16b48c2b, _BC, _16b48c2b, 4);
455DECL_TRAITS(aCdB16b48c4b, _BC, _16b48c4b, 4);
456DECL_TRAITS(aCdB16b64c2b, _BC, _16b64c2b, 4);
457DECL_TRAITS(aCdB16b64c4b, _BC, _16b64c4b, 4);
458DECL_TRAITS(BcdA16a32b2a, _AB, _16a32b2a, 4);
459DECL_TRAITS(BcdA16a32b4a, _AB, _16a32b4a, 4);
460DECL_TRAITS(BcdA16a48b2a, _AB, _16a48b2a, 4);
461DECL_TRAITS(BcdA16a48b4a, _AB, _16a48b4a, 4);
462DECL_TRAITS(BcdA16a64b2a, _AB, _16a64b2a, 4);
463DECL_TRAITS(BcdA16a64b4a, _AB, _16a64b4a, 4);
464DECL_TRAITS(aCdeB16b32c2b, _BC, _16b32c2b, 5);
465DECL_TRAITS(aCdeB16b32c4b, _BC, _16b32c4b, 5);
466DECL_TRAITS(aCdeB16b48c2b, _BC, _16b48c2b, 5);
467DECL_TRAITS(aCdeB16b48c4b, _BC, _16b48c4b, 5);
468DECL_TRAITS(aCdeB16b64c2b, _BC, _16b64c2b, 5);
469DECL_TRAITS(aCdeB16b64c4b, _BC, _16b64c4b, 5);
470DECL_TRAITS(Bca16b, _B, _16b, 3);
471DECL_TRAITS(BcA16b2a, _AB, _16b2a, 3);
472DECL_TRAITS(BcA16b4a, _AB, _16b4a, 3);
473DECL_TRAITS(Bcda16b, _B, _16b, 4);
474DECL_TRAITS(BcdA16b2a, _AB, _16b2a, 4);
475DECL_TRAITS(BcdA16b4a, _AB, _16b4a, 4);
476DECL_TRAITS(Bcdea16b, _B, _16b, 5);
477DECL_TRAITS(BcdeA16b2a, _AB, _16b2a, 5);
478DECL_TRAITS(BcdeA16b4a, _AB, _16b4a, 5);
479DECL_TRAITS(aCdb16c, _C, _16c, 4);
480DECL_TRAITS(aCdB16c2b, _BC, _16c2b, 4);
481DECL_TRAITS(aCdB16c4b, _BC, _16c4b, 4);
482DECL_TRAITS(aCdeb16c, _C, _16c, 5);
483DECL_TRAITS(aCdeB16c2b, _BC, _16c2b, 5);
484DECL_TRAITS(aCdeB16c4b, _BC, _16c4b, 5);
485DECL_TRAITS(aCdefb16c, _C, _16c, 6);
486DECL_TRAITS(aCdefB16c2b, _BC, _16c2b, 6);
487DECL_TRAITS(aCdefB16c4b, _BC, _16c4b, 6);
488DECL_TRAITS(Bcda32b, _B, _32b, 4);
489DECL_TRAITS(BcdA32b2a, _AB, _32b2a, 4);
490DECL_TRAITS(BcdA32b4a, _AB, _32b4a, 4);
491DECL_TRAITS(Bcda48b, _B, _48b, 4);
492DECL_TRAITS(BcdA48b2a, _AB, _48b2a, 4);
493DECL_TRAITS(BcdA48b4a, _AB, _48b4a, 4);
494DECL_TRAITS(Bcda64b, _B, _64b, 4);
495DECL_TRAITS(BcdA64b2a, _AB, _64b2a, 4);
496DECL_TRAITS(BcdA64b4a, _AB, _64b4a, 4);
497DECL_TRAITS(aCdeb32c, _C, _32c, 5);
498DECL_TRAITS(aCdeB32c2b, _BC, _32c2b, 5);
499DECL_TRAITS(aCdeB32c4b, _BC, _32c4b, 5);
500DECL_TRAITS(aCdeb48c, _C, _48c, 5);
501DECL_TRAITS(aCdeB48c2b, _BC, _48c2b, 5);
502DECL_TRAITS(aCdeB48c4b, _BC, _48c4b, 5);
503DECL_TRAITS(aCdeb64c, _C, _64c, 5);
504DECL_TRAITS(aCdeB64c2b, _BC, _64c2b, 5);
505DECL_TRAITS(aCdeB64c4b, _BC, _64c4b, 5);
506
507DECL_TRAITS(Abc16a, _A, _16a, 3);
508DECL_TRAITS(ABc16a16b, _AB, _16a16b, 3);
509DECL_TRAITS(ABc4a4b, _AB, _4a4b, 3);
510DECL_TRAITS(aBc16b, _B, _16b, 3);
511DECL_TRAITS(ABc16b16a, _AB, _16b16a, 3);
512DECL_TRAITS(ABc16b32a, _AB, _16b32a, 3);
513DECL_TRAITS(ABc16b64a, _AB, _16b64a, 3);
514DECL_TRAITS(ABc8a16b2a, _AB, _8a16b2a, 3);
515DECL_TRAITS(ABc8a8b, _AB, _8a8b, 3);
516DECL_TRAITS(aBc8b, _B, _8b, 3);
517DECL_TRAITS(ABc8b16a2b, _AB, _8b16a2b, 3);
518DECL_TRAITS(ABc8b32a2b, _AB, _8b32a2b, 3);
519DECL_TRAITS(ABc8b64a2b, _AB, _8b64a2b, 3);
520DECL_TRAITS(BAc8a16b2a, _AB, _8a16b2a, 3);
521DECL_TRAITS(ABc8b8a, _AB, _8b8a, 3);
522DECL_TRAITS(Abcd16a, _A, _16a, 4);
523DECL_TRAITS(Abcd8a, _A, _8a, 4);
524DECL_TRAITS(ABcd16a16b, _AB, _16a16b, 4);
525DECL_TRAITS(aBcd16b, _B, _16b, 4);
526DECL_TRAITS(ABcd16b16a, _AB, _16b16a, 4);
527DECL_TRAITS(ABcd16b32a, _AB, _16b32a, 4);
528DECL_TRAITS(ABcd16b64a, _AB, _16b64a, 4);
529DECL_TRAITS(aBCd16b16c, _BC, _16b16c, 4);
530DECL_TRAITS(aBCd16c16b, _BC, _16c16b, 4);
531DECL_TRAITS(ABcd4b16a4b, _AB, _4b16a4b, 4);
532DECL_TRAITS(ABcd4b32a4b, _AB, _4b32a4b, 4);
533DECL_TRAITS(ABcd4b64a4b, _AB, _4b64a4b, 4);
534DECL_TRAITS(ABcd2b8a4b, _AB, _2b8a4b, 4);
535DECL_TRAITS(ABcd16a16b2a, _AB, _16a16b2a, 4);
536DECL_TRAITS(ABcd16b16a4b, _AB, _16b16a4b, 4);
537DECL_TRAITS(ABcd16b32a4b, _AB, _16b32a4b, 4);
538DECL_TRAITS(ABcd16b48a4b, _AB, _16b48a4b, 4);
539DECL_TRAITS(ABcd16b64a4b, _AB, _16b64a4b, 4);
540DECL_TRAITS(ABcd16b16a2b, _AB, _16b16a2b, 4);
541DECL_TRAITS(ABcd16b32a2b, _AB, _16b32a2b, 4);
542DECL_TRAITS(ABcd16b48a2b, _AB, _16b48a2b, 4);
543DECL_TRAITS(ABcd16b64a2b, _AB, _16b64a2b, 4);
544DECL_TRAITS(ABcde16b16a2b, _AB, _16b16a2b, 5);
545DECL_TRAITS(ABcde16b32a2b, _AB, _16b32a2b, 5);
546DECL_TRAITS(ABcde16b48a2b, _AB, _16b48a2b, 5);
547DECL_TRAITS(ABcde16b64a2b, _AB, _16b64a2b, 5);
548DECL_TRAITS(ABcd8a16b2a, _AB, _8a16b2a, 4);
549DECL_TRAITS(ABcd8a8b, _AB, _8a8b, 4);
550DECL_TRAITS(aBcd8b, _B, _8b, 4);
551DECL_TRAITS(ABcd8b16a2b, _AB, _8b16a2b, 4);
552DECL_TRAITS(ABcd8b32a2b, _AB, _8b32a2b, 4);
553DECL_TRAITS(ABcd8b64a2b, _AB, _8b64a2b, 4);
554DECL_TRAITS(aBCd8b16c2b, _BC, _8b16c2b, 4);
555DECL_TRAITS(BAcd8a16b2a, _AB, _8a16b2a, 4);
556DECL_TRAITS(ABcd8b8a, _AB, _8b8a, 4);
557DECL_TRAITS(aBCd8b8c, _BC, _8b8c, 4);
558DECL_TRAITS(aBCd8c16b2c, _BC, _8c16b2c, 4);
559DECL_TRAITS(aCBd8b16c2b, _BC, _8b16c2b, 4);
560DECL_TRAITS(aBCd8c8b, _BC, _8c8b, 4);
561DECL_TRAITS(Abcde16a, _A, _16a, 5);
562DECL_TRAITS(ABcde16a16b, _AB, _16a16b, 5);
563DECL_TRAITS(ABcde16a16b2a, _AB, _16a16b2a, 5);
564DECL_TRAITS(BAcde8a16b2a, _AB, _8a16b2a, 5);
565DECL_TRAITS(ABcde4b16a4b, _AB, _4b16a4b, 5);
566DECL_TRAITS(ABcde4b32a4b, _AB, _4b32a4b, 5);
567DECL_TRAITS(ABcde4b64a4b, _AB, _4b64a4b, 5);
568DECL_TRAITS(ABcde16b16a4b, _AB, _16b16a4b, 5);
569DECL_TRAITS(ABcde16b32a4b, _AB, _16b32a4b, 5);
570DECL_TRAITS(ABcde16b48a4b, _AB, _16b48a4b, 5);
571DECL_TRAITS(ABcde16b64a4b, _AB, _16b64a4b, 5);
572DECL_TRAITS(ABcde2b8a4b, _AB, _2b8a4b, 5);
573DECL_TRAITS(aBcde16b, _B, _16b, 5);
574DECL_TRAITS(ABcde16b16a, _AB, _16b16a, 5);
575DECL_TRAITS(ABcde16b32a, _AB, _16b32a, 5);
576DECL_TRAITS(ABcde16b64a, _AB, _16b64a, 5);
577DECL_TRAITS(aBCde16b16c, _BC, _16b16c, 5);
578DECL_TRAITS(aBCde16c16b, _BC, _16c16b, 5);
579DECL_TRAITS(aBCde4c16b4c, _BC, _4c16b4c, 5);
580DECL_TRAITS(aBCde16b16c2b, _BC, _16b16c2b, 5);
581DECL_TRAITS(aBCde16c16b4c, _BC, _16c16b4c, 5);
582DECL_TRAITS(aBCde16c16b2c, _BC, _16c16b2c, 5);
583DECL_TRAITS(Abcde8a, _A, _8a, 5);
584DECL_TRAITS(ABcde8a8b, _AB, _8a8b, 5);
585DECL_TRAITS(aBcde8b, _B, _8b, 5);
586DECL_TRAITS(ABcde8b16a2b, _AB, _8b16a2b, 5);
587DECL_TRAITS(ABcde8b32a2b, _AB, _8b32a2b, 5);
588DECL_TRAITS(ABcde8b64a2b, _AB, _8b64a2b, 5);
589DECL_TRAITS(aBCde8b16c2b, _BC, _8b16c2b, 5);
590DECL_TRAITS(aCBde8b16c2b, _BC, _8b16c2b, 5);
591DECL_TRAITS(ABcde8b8a, _AB, _8b8a, 5);
592DECL_TRAITS(aBCde8b8c, _BC, _8b8c, 5);
593DECL_TRAITS(aBCde2c8b4c, _BC, _2c8b4c, 5);
594DECL_TRAITS(aBCde8c16b2c, _BC, _8c16b2c, 5);
595DECL_TRAITS(aBCde4b4c, _BC, _4b4c, 5);
596DECL_TRAITS(aBCde8c8b, _BC, _8c8b, 5);
597DECL_TRAITS(aBcdef16b, _B, _16b, 6);
598DECL_TRAITS(aBCdef16b16c, _BC, _16b16c, 6);
599DECL_TRAITS(aBCdef16b16c2b, _BC, _16b16c, 6);
600DECL_TRAITS(aBCdef16c16b, _BC, _16c16b, 6);
601DECL_TRAITS(aBCdef4c16b4c, _BC, _4c16b4c, 6);
602DECL_TRAITS(aBCdef2c8b4c, _BC, _2c8b4c, 6);
603DECL_TRAITS(aBCdef8b8c, _BC, _8b8c, 6);
604DECL_TRAITS(aBCdef8c16b2c, _BC, _8c16b2c, 6);
605DECL_TRAITS(aCBdef8b16c2b, _BC, _8b16c2b, 6);
606DECL_TRAITS(aBCdef8c8b, _BC, _8c8b, 6);
607DECL_TRAITS(aBdc16b, _B, _16b, 4);
608DECL_TRAITS(aBdC16b2c, _BC, _16b2c, 4);
609DECL_TRAITS(aBdC16b4c, _BC, _16b4c, 4);
610DECL_TRAITS(aBdc8b, _B, _8b, 4);
611DECL_TRAITS(aBdec16b, _B, _16b, 5);
612DECL_TRAITS(aBdeC16b2c, _BC, _16b2c, 5);
613DECL_TRAITS(aBdeC16b4c, _BC, _16b4c, 5);
614DECL_TRAITS(aBdec8b, _B, _8b, 5);
615DECL_TRAITS(aBdefc16b, _B, _16b, 6);
616DECL_TRAITS(aBdefC16b2c, _BC, _16b2c, 6);
617DECL_TRAITS(aBdefC16b4c, _BC, _16b4c, 6);
618DECL_TRAITS(aBdefc8b, _B, _8b, 6);
619DECL_TRAITS(aBdfec16b, _B, _16b, 6);
620DECL_TRAITS(aBedc16b, _B, _16b, 5);
621DECL_TRAITS(Acb16a, _A, _16a, 3);
622DECL_TRAITS(AcB16a2b, _AB, _16a2b, 3);
623DECL_TRAITS(AcB16a4b, _AB, _16a4b, 3);
624DECL_TRAITS(Acb8a, _A, _8a, 3);
625DECL_TRAITS(aCBd16b16c, _BC, _16b16c, 4);
626DECL_TRAITS(aCBde16b16c, _BC, _16b16c, 5);
627DECL_TRAITS(Acdb16a, _A, _16a, 4);
628DECL_TRAITS(AcdB16a2b, _AB, _16a2b, 4);
629DECL_TRAITS(AcdB16a4b, _AB, _16a4b, 4);
630DECL_TRAITS(Acdb8a, _A, _8a, 4);
631DECL_TRAITS(Acdeb16a, _A, _16a, 5);
632DECL_TRAITS(AcdeB16a2b, _AB, _16a2b, 5);
633DECL_TRAITS(AcdeB16a4b, _AB, _16a4b, 5);
634DECL_TRAITS(Acdeb8a, _A, _8a, 5);
635DECL_TRAITS(Acedb16a, _A, _16a, 5);
636DECL_TRAITS(Adcb16a, _A, _16a, 4);
637DECL_TRAITS(BAc16a16b, _AB, _16a16b, 3);
638DECL_TRAITS(BAcd16a16b, _AB, _16a16b, 4);
639DECL_TRAITS(BAcde16a16b, _AB, _16a16b, 5);
640DECL_TRAITS(ABcd32a32b, _AB, _32a32b, 4);
641DECL_TRAITS(BAcde16b16a, _AB, _16b16a, 5);
642DECL_TRAITS(ABcd4a8b8a4b, _AB, _4a8b8a4b, 4);
643DECL_TRAITS(ABcd2a8b8a2b, _AB, _2a8b8a2b, 4);
644DECL_TRAITS(aBCde4b8c8b4c, _BC, _4b8c8b4c, 5);
645DECL_TRAITS(aBCde2b8c8b2c, _BC, _2b8c8b2c, 5);
646DECL_TRAITS(aBdec32b, _B, _32b, 5);
647DECL_TRAITS(aCBdef16c16b, _BC, _16c16b, 6);
648DECL_TRAITS(aCBdef16b16c, _BC, _16b16c, 6);
649DECL_TRAITS(Abcdef16a, _A, _16a, 6);
650DECL_TRAITS(aCBd16c16b, _BC, _16c16b, 4);
651DECL_TRAITS(aCBde16c16b, _BC, _16c16b, 4);
652DECL_TRAITS(Acdb32a, _A, _32a, 4);
653DECL_TRAITS(BAcd16b16a, _AB, _16b16a, 4);
654DECL_TRAITS(BAc16b16a, _AB, _16b16a, 3);
655DECL_TRAITS(aBCd2b4c2b, _BC, _2b4c2b, 4);
656DECL_TRAITS(aBCde2b4c2b, _BC, _2b4c2b, 5);
657DECL_TRAITS(aBCdef2b4c2b, _BC, _2b4c2b, 6);
658DECL_TRAITS(aBCd2c4b2c, _BC, _2c4b2c, 4);
659DECL_TRAITS(aBCde2c4b2c, _BC, _2c4b2c, 5);
660DECL_TRAITS(aBCdef2c4b2c, _BC, _2c4b2c, 6);
661DECL_TRAITS(aBCd4b8c2b, _BC, _4b8c2b, 4);
662DECL_TRAITS(aBCde4b8c2b, _BC, _4b8c2b, 5);
663DECL_TRAITS(aBCdef4b8c2b, _BC, _4b8c2b, 6);
664DECL_TRAITS(aBCd4c8b2c, _BC, _4c8b2c, 4);
665DECL_TRAITS(aBCde4c8b2c, _BC, _4c8b2c, 5);
666DECL_TRAITS(aBCdef4c8b2c, _BC, _4c8b2c, 6);
667DECL_TRAITS(abDc32d, _D, _32d, 4);
668DECL_TRAITS(abDC32d4c, _CD, _32d4c, 4);
669DECL_TRAITS(abCd32c, _C, _32c, 4);
670DECL_TRAITS(abCde32c, _C, _32c, 5);
671DECL_TRAITS(abCdef32c, _C, _32c, 6);
672DECL_TRAITS(abCd4c, _C, _4c, 4);
673DECL_TRAITS(abCde4c, _C, _4c, 5);
674DECL_TRAITS(abCdef4c, _C, _4c, 6);
675DECL_TRAITS(abdEc32e, _E, _32e, 5);
676DECL_TRAITS(abdEC32e2c, _CE, _32e2c, 5);
677DECL_TRAITS(abdEC32e4c, _CE, _32e4c, 5);
678DECL_TRAITS(abdEC64e2c, _CE, _64e2c, 5);
679DECL_TRAITS(abdEC64e4c, _CE, _64e4c, 5);
680DECL_TRAITS(abdCe32c, _C, _32c, 5);
681DECL_TRAITS(abdCE32c2e, _CE, _32c2e, 5);
682DECL_TRAITS(decbA16a, _A, _16a, 5);
683DECL_TRAITS(decbA8a, _A, _8a, 5);
684
685DECL_TRAITS(aBdC16c16b2c, _BC, _16c16b2c, 4);
686DECL_TRAITS(aBdC16c16b4c, _BC, _16c16b4c, 4);
687DECL_TRAITS(aBdC16c32b2c, _BC, _16c32b2c, 4);
688DECL_TRAITS(aBdC16c32b4c, _BC, _16c32b4c, 4);
689DECL_TRAITS(aBdC16c48b2c, _BC, _16c48b2c, 4);
690DECL_TRAITS(aBdC16c48b4c, _BC, _16c48b4c, 4);
691DECL_TRAITS(aBdC16c64b2c, _BC, _16c64b2c, 4);
692DECL_TRAITS(aBdC16c64b4c, _BC, _16c64b4c, 4);
693DECL_TRAITS(aBdeC16c16b2c, _BC, _16c16b2c, 5);
694DECL_TRAITS(aBdeC16c16b4c, _BC, _16c16b4c, 5);
695DECL_TRAITS(aBdeC16c32b2c, _BC, _16c32b2c, 5);
696DECL_TRAITS(aBdeC16c32b4c, _BC, _16c32b4c, 5);
697DECL_TRAITS(aBdeC16c48b2c, _BC, _16c48b2c, 5);
698DECL_TRAITS(aBdeC16c48b4c, _BC, _16c48b4c, 5);
699DECL_TRAITS(aBdeC16c64b2c, _BC, _16c64b2c, 5);
700DECL_TRAITS(aBdeC16c64b4c, _BC, _16c64b4c, 5);
701DECL_TRAITS(aBdefC16c16b2c, _BC, _16c16b2c, 6);
702DECL_TRAITS(aBdefC16c16b4c, _BC, _16c16b4c, 6);
703DECL_TRAITS(aBdefC16c32b2c, _BC, _16c32b2c, 6);
704DECL_TRAITS(aBdefC16c32b4c, _BC, _16c32b4c, 6);
705DECL_TRAITS(aBdefC16c48b2c, _BC, _16c48b2c, 6);
706DECL_TRAITS(aBdefC16c48b4c, _BC, _16c48b4c, 6);
707DECL_TRAITS(aBdefC16c64b2c, _BC, _16c64b2c, 6);
708DECL_TRAITS(aBdefC16c64b4c, _BC, _16c64b4c, 6);
709
710DECL_TRAITS(AcB16b16a2b, _AB, _16b16a2b, 3);
711DECL_TRAITS(AcB16b16a4b, _AB, _16b16a4b, 3);
712DECL_TRAITS(AcB16b32a2b, _AB, _16b32a2b, 3);
713DECL_TRAITS(AcB16b32a4b, _AB, _16b32a4b, 3);
714DECL_TRAITS(AcB16b48a2b, _AB, _16b48a2b, 3);
715DECL_TRAITS(AcB16b48a4b, _AB, _16b48a4b, 3);
716DECL_TRAITS(AcB16b64a2b, _AB, _16b64a2b, 3);
717DECL_TRAITS(AcB16b64a4b, _AB, _16b64a4b, 3);
718DECL_TRAITS(AcdB16b16a2b, _AB, _16b16a2b, 4);
719DECL_TRAITS(AcdB16b16a4b, _AB, _16b16a4b, 4);
720DECL_TRAITS(AcdB16b32a2b, _AB, _16b32a2b, 4);
721DECL_TRAITS(AcdB16b32a4b, _AB, _16b32a4b, 4);
722DECL_TRAITS(AcdB16b48a2b, _AB, _16b48a2b, 4);
723DECL_TRAITS(AcdB16b48a4b, _AB, _16b48a4b, 4);
724DECL_TRAITS(AcdB16b64a2b, _AB, _16b64a2b, 4);
725DECL_TRAITS(AcdB16b64a4b, _AB, _16b64a4b, 4);
726DECL_TRAITS(AcdeB16b16a2b, _AB, _16b16a2b, 5);
727DECL_TRAITS(AcdeB16b16a4b, _AB, _16b16a4b, 5);
728DECL_TRAITS(AcdeB16b32a2b, _AB, _16b32a2b, 5);
729DECL_TRAITS(AcdeB16b32a4b, _AB, _16b32a4b, 5);
730DECL_TRAITS(AcdeB16b48a2b, _AB, _16b48a2b, 5);
731DECL_TRAITS(AcdeB16b48a4b, _AB, _16b48a4b, 5);
732DECL_TRAITS(AcdeB16b64a2b, _AB, _16b64a2b, 5);
733DECL_TRAITS(AcdeB16b64a4b, _AB, _16b64a4b, 5);
734
735} // namespace impl
736} // namespace dnnl
737
738#endif
739