MimIR
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
autogen.h
Go to the documentation of this file.
1#pragma once
2
3#include <mim/axm.h>
4#include <mim/plugin.h>
5
6/// @namespace mim::plug::core @ref core
7namespace mim {
8namespace plug::core {
9
10static constexpr plugin_t Plugin_Id = 0x1104c60000000000;
11
12/// @name %%core.nat
13///@{
14enum class nat : flags_t {
15 add = 0x1104c60000000000,
16 sub = 0x1104c60000000001,
17 mul = 0x1104c60000000002,
18 div = 0x1104c60000000003,
19 mod = 0x1104c60000000004,
20};
21
22template<nat>
23const Def* normalize_nat(const Def*, const Def*, const Def*);
24
25///@}
26
27/// @name %%core.ncmp
28///@{
29enum class ncmp : flags_t {
30 gle = 0x1104c60000000100,
31 f = 0x1104c60000000100,
32 glE = 0x1104c60000000101,
33 e = 0x1104c60000000101,
34 gLe = 0x1104c60000000102,
35 l = 0x1104c60000000102,
36 gLE = 0x1104c60000000103,
37 le = 0x1104c60000000103,
38 Gle = 0x1104c60000000104,
39 g = 0x1104c60000000104,
40 GlE = 0x1104c60000000105,
41 ge = 0x1104c60000000105,
42 GLe = 0x1104c60000000106,
43 ne = 0x1104c60000000106,
44 GLE = 0x1104c60000000107,
45 t = 0x1104c60000000107,
46};
47
48template<ncmp>
49const Def* normalize_ncmp(const Def*, const Def*, const Def*);
50
51///@}
52
53/// @name %%core.mode
54///@{
55enum class mode : flags_t {
56 us = 0x1104c60000000200,
57 uS = 0x1104c60000000201,
58 Us = 0x1104c60000000202,
59 US = 0x1104c60000000203,
60 nsw = 0x1104c60000000204,
61 nuw = 0x1104c60000000205,
62 nsuw = 0x1104c60000000206,
63};
64
65///@}
66
67/// @name %%core.idx
68///@{
69enum class idx : flags_t {
70};
71
72const Def* normalize_idx(const Def*, const Def*, const Def*);
73///@}
74
75/// @name %%core.idx_unsafe
76///@{
77enum class idx_unsafe : flags_t {
78};
79
80const Def* normalize_idx_unsafe(const Def*, const Def*, const Def*);
81///@}
82
83/// @name %%core.bit1
84///@{
85enum class bit1 : flags_t {
86 f = 0x1104c60000000500,
87 neg = 0x1104c60000000501,
88 id = 0x1104c60000000502,
89 t = 0x1104c60000000503,
90};
91
92template<bit1>
93const Def* normalize_bit1(const Def*, const Def*, const Def*);
94
95///@}
96
97/// @name %%core.bit2
98///@{
99enum class bit2 : flags_t {
100 f = 0x1104c60000000600,
101 nor = 0x1104c60000000601,
102 nciff = 0x1104c60000000602,
103 nfst = 0x1104c60000000603,
104 niff = 0x1104c60000000604,
105 nsnd = 0x1104c60000000605,
106 xor_ = 0x1104c60000000606,
107 nand = 0x1104c60000000607,
108 and_ = 0x1104c60000000608,
109 nxor = 0x1104c60000000609,
110 snd = 0x1104c6000000060a,
111 iff = 0x1104c6000000060b,
112 fst = 0x1104c6000000060c,
113 ciff = 0x1104c6000000060d,
114 or_ = 0x1104c6000000060e,
115 t = 0x1104c6000000060f,
116};
117
118template<bit2>
119const Def* normalize_bit2(const Def*, const Def*, const Def*);
120
121///@}
122
123/// @name %%core.shr
124///@{
125enum class shr : flags_t {
126 a = 0x1104c60000000700,
127 l = 0x1104c60000000701,
128};
129
130template<shr>
131const Def* normalize_shr(const Def*, const Def*, const Def*);
132
133///@}
134
135/// @name %%core.wrap
136///@{
137enum class wrap : flags_t {
138 add = 0x1104c60000000800,
139 sub = 0x1104c60000000801,
140 mul = 0x1104c60000000802,
141 shl = 0x1104c60000000803,
142};
143
144template<wrap>
145const Def* normalize_wrap(const Def*, const Def*, const Def*);
146
147///@}
148
149/// @name %%core.minus
150///@{
151enum class minus : flags_t {
152};
153
154///@}
155
156/// @name %%core.div
157///@{
158enum class div : flags_t {
159 sdiv = 0x1104c60000000a00,
160 udiv = 0x1104c60000000a01,
161 srem = 0x1104c60000000a02,
162 urem = 0x1104c60000000a03,
163};
164
165template<div>
166const Def* normalize_div(const Def*, const Def*, const Def*);
167
168///@}
169
170/// @name %%core.icmp
171///@{
172enum class icmp : flags_t {
173 xygle = 0x1104c60000000b00,
174 f = 0x1104c60000000b00,
175 xyglE = 0x1104c60000000b01,
176 e = 0x1104c60000000b01,
177 xygLe = 0x1104c60000000b02,
178 xygLE = 0x1104c60000000b03,
179 xyGle = 0x1104c60000000b04,
180 xyGlE = 0x1104c60000000b05,
181 xyGLe = 0x1104c60000000b06,
182 xyGLE = 0x1104c60000000b07,
183 xYgle = 0x1104c60000000b08,
184 xYglE = 0x1104c60000000b09,
185 xYgLe = 0x1104c60000000b0a,
186 sl = 0x1104c60000000b0a,
187 xYgLE = 0x1104c60000000b0b,
188 sle = 0x1104c60000000b0b,
189 xYGle = 0x1104c60000000b0c,
190 ug = 0x1104c60000000b0c,
191 xYGlE = 0x1104c60000000b0d,
192 uge = 0x1104c60000000b0d,
193 xYGLe = 0x1104c60000000b0e,
194 xYGLE = 0x1104c60000000b0f,
195 Xygle = 0x1104c60000000b10,
196 XyglE = 0x1104c60000000b11,
197 XygLe = 0x1104c60000000b12,
198 ul = 0x1104c60000000b12,
199 XygLE = 0x1104c60000000b13,
200 ule = 0x1104c60000000b13,
201 XyGle = 0x1104c60000000b14,
202 sg = 0x1104c60000000b14,
203 XyGlE = 0x1104c60000000b15,
204 sge = 0x1104c60000000b15,
205 XyGLe = 0x1104c60000000b16,
206 XyGLE = 0x1104c60000000b17,
207 XYgle = 0x1104c60000000b18,
208 XYglE = 0x1104c60000000b19,
209 XYgLe = 0x1104c60000000b1a,
210 XYgLE = 0x1104c60000000b1b,
211 XYGle = 0x1104c60000000b1c,
212 XYGlE = 0x1104c60000000b1d,
213 XYGLe = 0x1104c60000000b1e,
214 ne = 0x1104c60000000b1e,
215 XYGLE = 0x1104c60000000b1f,
216 t = 0x1104c60000000b1f,
217};
218
219template<icmp>
220const Def* normalize_icmp(const Def*, const Def*, const Def*);
221
222///@}
223
224/// @name %%core.extrema
225///@{
226enum class extrema : flags_t {
227 sm = 0x1104c60000000c00,
228 umin = 0x1104c60000000c00,
229 sM = 0x1104c60000000c01,
230 umax = 0x1104c60000000c01,
231 Sm = 0x1104c60000000c02,
232 smin = 0x1104c60000000c02,
233 SM = 0x1104c60000000c03,
234 smax = 0x1104c60000000c03,
235};
236
237template<extrema>
238const Def* normalize_extrema(const Def*, const Def*, const Def*);
239
240///@}
241
242/// @name %%core.abs
243///@{
244enum class abs : flags_t {
245};
246
247const Def* normalize_abs(const Def*, const Def*, const Def*);
248///@}
249
250/// @name %%core.conv
251///@{
252enum class conv : flags_t {
253 s = 0x1104c60000000e00,
254 u = 0x1104c60000000e01,
255};
256
257template<conv>
258const Def* normalize_conv(const Def*, const Def*, const Def*);
259
260///@}
261
262/// @name %%core.bitcast
263///@{
264enum class bitcast : flags_t {
265};
266
267const Def* normalize_bitcast(const Def*, const Def*, const Def*);
268///@}
269
270/// @name %%core.trait
271///@{
272enum class trait : flags_t {
273 size = 0x1104c60000001000,
274 align = 0x1104c60000001001,
275};
276
277template<trait>
278const Def* normalize_trait(const Def*, const Def*, const Def*);
279
280///@}
281
282/// @name %%core.pe
283///@{
284enum class pe : flags_t {
285 hlt = 0x1104c60000001100,
286 run = 0x1104c60000001101,
287 is_closed = 0x1104c60000001102,
288};
289
290template<pe>
291const Def* normalize_pe(const Def*, const Def*, const Def*);
292
293///@}
294
295/// @name %%core.select
296///@{
297enum class select : flags_t {
298};
299
300///@}
301
303
304#define MIM_core_NORMALIZER_IMPL \
305 void register_normalizers(Normalizers& normalizers) {\
306 normalizers[flags_t(nat::add)] = &normalize_nat<nat::add>; \
307 normalizers[flags_t(nat::sub)] = &normalize_nat<nat::sub>; \
308 normalizers[flags_t(nat::mul)] = &normalize_nat<nat::mul>; \
309 normalizers[flags_t(nat::div)] = &normalize_nat<nat::div>; \
310 normalizers[flags_t(nat::mod)] = &normalize_nat<nat::mod>; \
311 normalizers[flags_t(ncmp::gle)] = &normalize_ncmp<ncmp::gle>; \
312 normalizers[flags_t(ncmp::glE)] = &normalize_ncmp<ncmp::glE>; \
313 normalizers[flags_t(ncmp::gLe)] = &normalize_ncmp<ncmp::gLe>; \
314 normalizers[flags_t(ncmp::gLE)] = &normalize_ncmp<ncmp::gLE>; \
315 normalizers[flags_t(ncmp::Gle)] = &normalize_ncmp<ncmp::Gle>; \
316 normalizers[flags_t(ncmp::GlE)] = &normalize_ncmp<ncmp::GlE>; \
317 normalizers[flags_t(ncmp::GLe)] = &normalize_ncmp<ncmp::GLe>; \
318 normalizers[flags_t(ncmp::GLE)] = &normalize_ncmp<ncmp::GLE>; \
319 normalizers[flags_t(Annex::Base<idx>)] = &normalize_idx; \
320 normalizers[flags_t(Annex::Base<idx_unsafe>)] = &normalize_idx_unsafe; \
321 normalizers[flags_t(bit1::f)] = &normalize_bit1<bit1::f>; \
322 normalizers[flags_t(bit1::neg)] = &normalize_bit1<bit1::neg>; \
323 normalizers[flags_t(bit1::id)] = &normalize_bit1<bit1::id>; \
324 normalizers[flags_t(bit1::t)] = &normalize_bit1<bit1::t>; \
325 normalizers[flags_t(bit2::f)] = &normalize_bit2<bit2::f>; \
326 normalizers[flags_t(bit2::nor)] = &normalize_bit2<bit2::nor>; \
327 normalizers[flags_t(bit2::nciff)] = &normalize_bit2<bit2::nciff>; \
328 normalizers[flags_t(bit2::nfst)] = &normalize_bit2<bit2::nfst>; \
329 normalizers[flags_t(bit2::niff)] = &normalize_bit2<bit2::niff>; \
330 normalizers[flags_t(bit2::nsnd)] = &normalize_bit2<bit2::nsnd>; \
331 normalizers[flags_t(bit2::xor_)] = &normalize_bit2<bit2::xor_>; \
332 normalizers[flags_t(bit2::nand)] = &normalize_bit2<bit2::nand>; \
333 normalizers[flags_t(bit2::and_)] = &normalize_bit2<bit2::and_>; \
334 normalizers[flags_t(bit2::nxor)] = &normalize_bit2<bit2::nxor>; \
335 normalizers[flags_t(bit2::snd)] = &normalize_bit2<bit2::snd>; \
336 normalizers[flags_t(bit2::iff)] = &normalize_bit2<bit2::iff>; \
337 normalizers[flags_t(bit2::fst)] = &normalize_bit2<bit2::fst>; \
338 normalizers[flags_t(bit2::ciff)] = &normalize_bit2<bit2::ciff>; \
339 normalizers[flags_t(bit2::or_)] = &normalize_bit2<bit2::or_>; \
340 normalizers[flags_t(bit2::t)] = &normalize_bit2<bit2::t>; \
341 normalizers[flags_t(shr::a)] = &normalize_shr<shr::a>; \
342 normalizers[flags_t(shr::l)] = &normalize_shr<shr::l>; \
343 normalizers[flags_t(wrap::add)] = &normalize_wrap<wrap::add>; \
344 normalizers[flags_t(wrap::sub)] = &normalize_wrap<wrap::sub>; \
345 normalizers[flags_t(wrap::mul)] = &normalize_wrap<wrap::mul>; \
346 normalizers[flags_t(wrap::shl)] = &normalize_wrap<wrap::shl>; \
347 normalizers[flags_t(div::sdiv)] = &normalize_div<div::sdiv>; \
348 normalizers[flags_t(div::udiv)] = &normalize_div<div::udiv>; \
349 normalizers[flags_t(div::srem)] = &normalize_div<div::srem>; \
350 normalizers[flags_t(div::urem)] = &normalize_div<div::urem>; \
351 normalizers[flags_t(icmp::xygle)] = &normalize_icmp<icmp::xygle>; \
352 normalizers[flags_t(icmp::xyglE)] = &normalize_icmp<icmp::xyglE>; \
353 normalizers[flags_t(icmp::xygLe)] = &normalize_icmp<icmp::xygLe>; \
354 normalizers[flags_t(icmp::xygLE)] = &normalize_icmp<icmp::xygLE>; \
355 normalizers[flags_t(icmp::xyGle)] = &normalize_icmp<icmp::xyGle>; \
356 normalizers[flags_t(icmp::xyGlE)] = &normalize_icmp<icmp::xyGlE>; \
357 normalizers[flags_t(icmp::xyGLe)] = &normalize_icmp<icmp::xyGLe>; \
358 normalizers[flags_t(icmp::xyGLE)] = &normalize_icmp<icmp::xyGLE>; \
359 normalizers[flags_t(icmp::xYgle)] = &normalize_icmp<icmp::xYgle>; \
360 normalizers[flags_t(icmp::xYglE)] = &normalize_icmp<icmp::xYglE>; \
361 normalizers[flags_t(icmp::xYgLe)] = &normalize_icmp<icmp::xYgLe>; \
362 normalizers[flags_t(icmp::xYgLE)] = &normalize_icmp<icmp::xYgLE>; \
363 normalizers[flags_t(icmp::xYGle)] = &normalize_icmp<icmp::xYGle>; \
364 normalizers[flags_t(icmp::xYGlE)] = &normalize_icmp<icmp::xYGlE>; \
365 normalizers[flags_t(icmp::xYGLe)] = &normalize_icmp<icmp::xYGLe>; \
366 normalizers[flags_t(icmp::xYGLE)] = &normalize_icmp<icmp::xYGLE>; \
367 normalizers[flags_t(icmp::Xygle)] = &normalize_icmp<icmp::Xygle>; \
368 normalizers[flags_t(icmp::XyglE)] = &normalize_icmp<icmp::XyglE>; \
369 normalizers[flags_t(icmp::XygLe)] = &normalize_icmp<icmp::XygLe>; \
370 normalizers[flags_t(icmp::XygLE)] = &normalize_icmp<icmp::XygLE>; \
371 normalizers[flags_t(icmp::XyGle)] = &normalize_icmp<icmp::XyGle>; \
372 normalizers[flags_t(icmp::XyGlE)] = &normalize_icmp<icmp::XyGlE>; \
373 normalizers[flags_t(icmp::XyGLe)] = &normalize_icmp<icmp::XyGLe>; \
374 normalizers[flags_t(icmp::XyGLE)] = &normalize_icmp<icmp::XyGLE>; \
375 normalizers[flags_t(icmp::XYgle)] = &normalize_icmp<icmp::XYgle>; \
376 normalizers[flags_t(icmp::XYglE)] = &normalize_icmp<icmp::XYglE>; \
377 normalizers[flags_t(icmp::XYgLe)] = &normalize_icmp<icmp::XYgLe>; \
378 normalizers[flags_t(icmp::XYgLE)] = &normalize_icmp<icmp::XYgLE>; \
379 normalizers[flags_t(icmp::XYGle)] = &normalize_icmp<icmp::XYGle>; \
380 normalizers[flags_t(icmp::XYGlE)] = &normalize_icmp<icmp::XYGlE>; \
381 normalizers[flags_t(icmp::XYGLe)] = &normalize_icmp<icmp::XYGLe>; \
382 normalizers[flags_t(icmp::XYGLE)] = &normalize_icmp<icmp::XYGLE>; \
383 normalizers[flags_t(extrema::sm)] = &normalize_extrema<extrema::sm>; \
384 normalizers[flags_t(extrema::sM)] = &normalize_extrema<extrema::sM>; \
385 normalizers[flags_t(extrema::Sm)] = &normalize_extrema<extrema::Sm>; \
386 normalizers[flags_t(extrema::SM)] = &normalize_extrema<extrema::SM>; \
387 normalizers[flags_t(Annex::Base<abs>)] = &normalize_abs; \
388 normalizers[flags_t(conv::s)] = &normalize_conv<conv::s>; \
389 normalizers[flags_t(conv::u)] = &normalize_conv<conv::u>; \
390 normalizers[flags_t(Annex::Base<bitcast>)] = &normalize_bitcast; \
391 normalizers[flags_t(trait::size)] = &normalize_trait<trait::size>; \
392 normalizers[flags_t(trait::align)] = &normalize_trait<trait::align>; \
393 normalizers[flags_t(pe::hlt)] = &normalize_pe<pe::hlt>; \
394 normalizers[flags_t(pe::run)] = &normalize_pe<pe::run>; \
395 normalizers[flags_t(pe::is_closed)] = &normalize_pe<pe::is_closed>; \
396 }
397} // namespace plug::core
398
399#ifndef DOXYGEN // don't include in Doxygen documentation
400
401template<> constexpr flags_t Annex::Base<plug::core::nat> = 0x1104c60000000000;
402template<> constexpr size_t Annex::Num<plug::core::nat> = 5;
403template<> constexpr flags_t Annex::Base<plug::core::ncmp> = 0x1104c60000000100;
404template<> constexpr size_t Annex::Num<plug::core::ncmp> = 8;
405template<> constexpr flags_t Annex::Base<plug::core::mode> = 0x1104c60000000200;
406template<> constexpr size_t Annex::Num<plug::core::mode> = 7;
407template<> constexpr flags_t Annex::Base<plug::core::idx> = 0x1104c60000000300;
408template<> constexpr size_t Annex::Num<plug::core::idx> = 0;
409template<> constexpr flags_t Annex::Base<plug::core::idx_unsafe> = 0x1104c60000000400;
410template<> constexpr size_t Annex::Num<plug::core::idx_unsafe> = 0;
411template<> constexpr flags_t Annex::Base<plug::core::bit1> = 0x1104c60000000500;
412template<> constexpr size_t Annex::Num<plug::core::bit1> = 4;
413template<> constexpr flags_t Annex::Base<plug::core::bit2> = 0x1104c60000000600;
414template<> constexpr size_t Annex::Num<plug::core::bit2> = 16;
415template<> constexpr flags_t Annex::Base<plug::core::shr> = 0x1104c60000000700;
416template<> constexpr size_t Annex::Num<plug::core::shr> = 2;
417template<> constexpr flags_t Annex::Base<plug::core::wrap> = 0x1104c60000000800;
418template<> constexpr size_t Annex::Num<plug::core::wrap> = 4;
419template<> constexpr flags_t Annex::Base<plug::core::minus> = 0x1104c60000000900;
420template<> constexpr size_t Annex::Num<plug::core::minus> = 0;
421template<> constexpr flags_t Annex::Base<plug::core::div> = 0x1104c60000000a00;
422template<> constexpr size_t Annex::Num<plug::core::div> = 4;
423template<> constexpr flags_t Annex::Base<plug::core::icmp> = 0x1104c60000000b00;
424template<> constexpr size_t Annex::Num<plug::core::icmp> = 32;
425template<> constexpr flags_t Annex::Base<plug::core::extrema> = 0x1104c60000000c00;
426template<> constexpr size_t Annex::Num<plug::core::extrema> = 4;
427template<> constexpr flags_t Annex::Base<plug::core::abs> = 0x1104c60000000d00;
428template<> constexpr size_t Annex::Num<plug::core::abs> = 0;
429template<> constexpr flags_t Annex::Base<plug::core::conv> = 0x1104c60000000e00;
430template<> constexpr size_t Annex::Num<plug::core::conv> = 2;
431template<> constexpr flags_t Annex::Base<plug::core::bitcast> = 0x1104c60000000f00;
432template<> constexpr size_t Annex::Num<plug::core::bitcast> = 0;
433template<> constexpr flags_t Annex::Base<plug::core::trait> = 0x1104c60000001000;
434template<> constexpr size_t Annex::Num<plug::core::trait> = 2;
435template<> constexpr flags_t Annex::Base<plug::core::pe> = 0x1104c60000001100;
436template<> constexpr size_t Annex::Num<plug::core::pe> = 3;
437template<> constexpr flags_t Annex::Base<plug::core::select> = 0x1104c60000001200;
438template<> constexpr size_t Annex::Num<plug::core::select> = 0;
439
440template<> struct Axm::IsANode<plug::core::mode> { using type = Axm; };
441template<> struct Axm::IsANode<plug::core::minus> { using type = Axm; };
442template<> struct Axm::IsANode<plug::core::select> { using type = Axm; };
443
444#endif
445} // namespace mim
446
447#ifndef DOXYGEN // don't include in Doxygen documentation
448
449template<> struct fe::is_bit_enum<mim::plug::core::nat> : std::true_type {};
450template<> struct fe::is_bit_enum<mim::plug::core::ncmp> : std::true_type {};
451template<> struct fe::is_bit_enum<mim::plug::core::mode> : std::true_type {};
452template<> struct fe::is_bit_enum<mim::plug::core::bit1> : std::true_type {};
453template<> struct fe::is_bit_enum<mim::plug::core::bit2> : std::true_type {};
454template<> struct fe::is_bit_enum<mim::plug::core::shr> : std::true_type {};
455template<> struct fe::is_bit_enum<mim::plug::core::wrap> : std::true_type {};
456template<> struct fe::is_bit_enum<mim::plug::core::div> : std::true_type {};
457template<> struct fe::is_bit_enum<mim::plug::core::icmp> : std::true_type {};
458template<> struct fe::is_bit_enum<mim::plug::core::extrema> : std::true_type {};
459template<> struct fe::is_bit_enum<mim::plug::core::conv> : std::true_type {};
460template<> struct fe::is_bit_enum<mim::plug::core::trait> : std::true_type {};
461template<> struct fe::is_bit_enum<mim::plug::core::pe> : std::true_type {};
462
463#endif
Base class for all Defs.
Definition def.h:261
The core Plugin
Definition core.h:8
const Def * normalize_nat(const Def *type, const Def *callee, const Def *arg)
const Def * normalize_idx_unsafe(const Def *, const Def *, const Def *arg)
const Def * normalize_div(const Def *full_type, const Def *, const Def *arg)
const Def * normalize_pe(const Def *type, const Def *, const Def *arg)
static constexpr plugin_t Plugin_Id
Definition autogen.h:10
const Def * normalize_extrema(const Def *type, const Def *c, const Def *arg)
const Def * normalize_icmp(const Def *type, const Def *c, const Def *arg)
const Def * normalize_bit1(const Def *type, const Def *c, const Def *a)
const Def * normalize_conv(const Def *dst_t, const Def *, const Def *x)
const Def * normalize_bit2(const Def *type, const Def *c, const Def *arg)
const Def * normalize_wrap(const Def *type, const Def *c, const Def *arg)
const Def * normalize_trait(const Def *, const Def *, const Def *type)
const Def * normalize_abs(const Def *type, const Def *, const Def *arg)
void register_normalizers(Normalizers &normalizers)
const Def * normalize_idx(const Def *type, const Def *c, const Def *arg)
const Def * normalize_bitcast(const Def *dst_t, const Def *, const Def *src)
const Def * normalize_ncmp(const Def *type, const Def *callee, const Def *arg)
@ nuw
No Unsigned Wrap around.
Definition core.h:18
@ nsw
No Signed Wrap around.
Definition core.h:17
const Def * normalize_shr(const Def *type, const Def *c, const Def *arg)
Definition ast.h:14
u64 flags_t
Definition types.h:39
absl::flat_hash_map< flags_t, NormalizeFn > Normalizers
Definition plugin.h:22
u64 plugin_t
Definition types.h:40
@ Axm
Definition def.h:109
static constexpr size_t Num
Number of Axm::subtags.
Definition plugin.h:147
static constexpr flags_t Base
Definition plugin.h:148