29 add = 0x1104c60000000200,
30 sub = 0x1104c60000000201,
31 mul = 0x1104c60000000202,
32 div = 0x1104c60000000203,
33 rem = 0x1104c60000000204,
44 gle = 0x1104c60000000300,
45 f = 0x1104c60000000300,
46 glE = 0x1104c60000000301,
47 e = 0x1104c60000000301,
48 gLe = 0x1104c60000000302,
49 l = 0x1104c60000000302,
50 gLE = 0x1104c60000000303,
51 le = 0x1104c60000000303,
52 Gle = 0x1104c60000000304,
53 g = 0x1104c60000000304,
54 GlE = 0x1104c60000000305,
55 ge = 0x1104c60000000305,
56 GLe = 0x1104c60000000306,
57 ne = 0x1104c60000000306,
58 GLE = 0x1104c60000000307,
59 t = 0x1104c60000000307,
70 us = 0x1104c60000000400,
71 uS = 0x1104c60000000401,
72 nsw = 0x1104c60000000401,
73 Us = 0x1104c60000000402,
74 nuw = 0x1104c60000000402,
75 US = 0x1104c60000000403,
92 f = 0x1104c60000000600,
93 neg = 0x1104c60000000601,
94 id = 0x1104c60000000602,
95 t = 0x1104c60000000603,
106 f = 0x1104c60000000700,
121 t = 0x1104c6000000070f,
132 a = 0x1104c60000000800,
133 l = 0x1104c60000000801,
144 add = 0x1104c60000000900,
145 sub = 0x1104c60000000901,
146 mul = 0x1104c60000000902,
180 f = 0x1104c60000000c00,
182 e = 0x1104c60000000c01,
192 sl = 0x1104c60000000c0a,
196 ug = 0x1104c60000000c0c,
204 ul = 0x1104c60000000c12,
208 sg = 0x1104c60000000c14,
220 ne = 0x1104c60000000c1e,
222 t = 0x1104c60000000c1f,
233 sm = 0x1104c60000000d00,
235 sM = 0x1104c60000000d01,
237 Sm = 0x1104c60000000d02,
239 SM = 0x1104c60000000d03,
259 s = 0x1104c60000000f00,
260 u = 0x1104c60000000f01,
287 size = 0x1104c60000001200,
325#define MIM_core_NORMALIZER_IMPL \
326 void register_normalizers(Normalizers& normalizers) {\
327 normalizers[flags_t(nat::add)] = &normalize_nat<nat::add>; \
328 normalizers[flags_t(nat::sub)] = &normalize_nat<nat::sub>; \
329 normalizers[flags_t(nat::mul)] = &normalize_nat<nat::mul>; \
330 normalizers[flags_t(nat::div)] = &normalize_nat<nat::div>; \
331 normalizers[flags_t(nat::rem)] = &normalize_nat<nat::rem>; \
332 normalizers[flags_t(ncmp::gle)] = &normalize_ncmp<ncmp::gle>; \
333 normalizers[flags_t(ncmp::glE)] = &normalize_ncmp<ncmp::glE>; \
334 normalizers[flags_t(ncmp::gLe)] = &normalize_ncmp<ncmp::gLe>; \
335 normalizers[flags_t(ncmp::gLE)] = &normalize_ncmp<ncmp::gLE>; \
336 normalizers[flags_t(ncmp::Gle)] = &normalize_ncmp<ncmp::Gle>; \
337 normalizers[flags_t(ncmp::GlE)] = &normalize_ncmp<ncmp::GlE>; \
338 normalizers[flags_t(ncmp::GLe)] = &normalize_ncmp<ncmp::GLe>; \
339 normalizers[flags_t(ncmp::GLE)] = &normalize_ncmp<ncmp::GLE>; \
340 normalizers[flags_t(Annex::Base<idx>)] = &normalize_idx; \
341 normalizers[flags_t(bit1::f)] = &normalize_bit1<bit1::f>; \
342 normalizers[flags_t(bit1::neg)] = &normalize_bit1<bit1::neg>; \
343 normalizers[flags_t(bit1::id)] = &normalize_bit1<bit1::id>; \
344 normalizers[flags_t(bit1::t)] = &normalize_bit1<bit1::t>; \
345 normalizers[flags_t(bit2::f)] = &normalize_bit2<bit2::f>; \
346 normalizers[flags_t(bit2::nor)] = &normalize_bit2<bit2::nor>; \
347 normalizers[flags_t(bit2::nciff)] = &normalize_bit2<bit2::nciff>; \
348 normalizers[flags_t(bit2::nfst)] = &normalize_bit2<bit2::nfst>; \
349 normalizers[flags_t(bit2::niff)] = &normalize_bit2<bit2::niff>; \
350 normalizers[flags_t(bit2::nsnd)] = &normalize_bit2<bit2::nsnd>; \
351 normalizers[flags_t(bit2::xor_)] = &normalize_bit2<bit2::xor_>; \
352 normalizers[flags_t(bit2::nand)] = &normalize_bit2<bit2::nand>; \
353 normalizers[flags_t(bit2::and_)] = &normalize_bit2<bit2::and_>; \
354 normalizers[flags_t(bit2::nxor)] = &normalize_bit2<bit2::nxor>; \
355 normalizers[flags_t(bit2::snd)] = &normalize_bit2<bit2::snd>; \
356 normalizers[flags_t(bit2::iff)] = &normalize_bit2<bit2::iff>; \
357 normalizers[flags_t(bit2::fst)] = &normalize_bit2<bit2::fst>; \
358 normalizers[flags_t(bit2::ciff)] = &normalize_bit2<bit2::ciff>; \
359 normalizers[flags_t(bit2::or_)] = &normalize_bit2<bit2::or_>; \
360 normalizers[flags_t(bit2::t)] = &normalize_bit2<bit2::t>; \
361 normalizers[flags_t(shr::a)] = &normalize_shr<shr::a>; \
362 normalizers[flags_t(shr::l)] = &normalize_shr<shr::l>; \
363 normalizers[flags_t(wrap::add)] = &normalize_wrap<wrap::add>; \
364 normalizers[flags_t(wrap::sub)] = &normalize_wrap<wrap::sub>; \
365 normalizers[flags_t(wrap::mul)] = &normalize_wrap<wrap::mul>; \
366 normalizers[flags_t(wrap::shl)] = &normalize_wrap<wrap::shl>; \
367 normalizers[flags_t(div::sdiv)] = &normalize_div<div::sdiv>; \
368 normalizers[flags_t(div::udiv)] = &normalize_div<div::udiv>; \
369 normalizers[flags_t(div::srem)] = &normalize_div<div::srem>; \
370 normalizers[flags_t(div::urem)] = &normalize_div<div::urem>; \
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(icmp::xYGle)] = &normalize_icmp<icmp::xYGle>; \
384 normalizers[flags_t(icmp::xYGlE)] = &normalize_icmp<icmp::xYGlE>; \
385 normalizers[flags_t(icmp::xYGLe)] = &normalize_icmp<icmp::xYGLe>; \
386 normalizers[flags_t(icmp::xYGLE)] = &normalize_icmp<icmp::xYGLE>; \
387 normalizers[flags_t(icmp::Xygle)] = &normalize_icmp<icmp::Xygle>; \
388 normalizers[flags_t(icmp::XyglE)] = &normalize_icmp<icmp::XyglE>; \
389 normalizers[flags_t(icmp::XygLe)] = &normalize_icmp<icmp::XygLe>; \
390 normalizers[flags_t(icmp::XygLE)] = &normalize_icmp<icmp::XygLE>; \
391 normalizers[flags_t(icmp::XyGle)] = &normalize_icmp<icmp::XyGle>; \
392 normalizers[flags_t(icmp::XyGlE)] = &normalize_icmp<icmp::XyGlE>; \
393 normalizers[flags_t(icmp::XyGLe)] = &normalize_icmp<icmp::XyGLe>; \
394 normalizers[flags_t(icmp::XyGLE)] = &normalize_icmp<icmp::XyGLE>; \
395 normalizers[flags_t(icmp::XYgle)] = &normalize_icmp<icmp::XYgle>; \
396 normalizers[flags_t(icmp::XYglE)] = &normalize_icmp<icmp::XYglE>; \
397 normalizers[flags_t(icmp::XYgLe)] = &normalize_icmp<icmp::XYgLe>; \
398 normalizers[flags_t(icmp::XYgLE)] = &normalize_icmp<icmp::XYgLE>; \
399 normalizers[flags_t(icmp::XYGle)] = &normalize_icmp<icmp::XYGle>; \
400 normalizers[flags_t(icmp::XYGlE)] = &normalize_icmp<icmp::XYGlE>; \
401 normalizers[flags_t(icmp::XYGLe)] = &normalize_icmp<icmp::XYGLe>; \
402 normalizers[flags_t(icmp::XYGLE)] = &normalize_icmp<icmp::XYGLE>; \
403 normalizers[flags_t(extrema::sm)] = &normalize_extrema<extrema::sm>; \
404 normalizers[flags_t(extrema::sM)] = &normalize_extrema<extrema::sM>; \
405 normalizers[flags_t(extrema::Sm)] = &normalize_extrema<extrema::Sm>; \
406 normalizers[flags_t(extrema::SM)] = &normalize_extrema<extrema::SM>; \
407 normalizers[flags_t(Annex::Base<abs>)] = &normalize_abs; \
408 normalizers[flags_t(conv::s)] = &normalize_conv<conv::s>; \
409 normalizers[flags_t(conv::u)] = &normalize_conv<conv::u>; \
410 normalizers[flags_t(Annex::Base<idx2nat>)] = &normalize_idx2nat; \
411 normalizers[flags_t(Annex::Base<bitcast>)] = &normalize_bitcast; \
412 normalizers[flags_t(trait::size)] = &normalize_trait<trait::size>; \
413 normalizers[flags_t(trait::align)] = &normalize_trait<trait::align>; \
414 normalizers[flags_t(pe::hlt)] = &normalize_pe<pe::hlt>; \
415 normalizers[flags_t(pe::run)] = &normalize_pe<pe::run>; \
416 normalizers[flags_t(pe::is_closed)] = &normalize_pe<pe::is_closed>; \
477template<>
struct fe::is_bit_enum<
mim::plug::core::nat> : std::true_type {};
478template<>
struct fe::is_bit_enum<
mim::plug::core::ncmp> : std::true_type {};
479template<>
struct fe::is_bit_enum<
mim::plug::core::mode> : std::true_type {};
480template<>
struct fe::is_bit_enum<
mim::plug::core::bit1> : std::true_type {};
481template<>
struct fe::is_bit_enum<
mim::plug::core::bit2> : std::true_type {};
482template<>
struct fe::is_bit_enum<
mim::plug::core::shr> : std::true_type {};
483template<>
struct fe::is_bit_enum<
mim::plug::core::wrap> : std::true_type {};
484template<>
struct fe::is_bit_enum<
mim::plug::core::div> : std::true_type {};
485template<>
struct fe::is_bit_enum<
mim::plug::core::icmp> : std::true_type {};
486template<>
struct fe::is_bit_enum<
mim::plug::core::extrema> : std::true_type {};
487template<>
struct fe::is_bit_enum<
mim::plug::core::conv> : std::true_type {};
488template<>
struct fe::is_bit_enum<
mim::plug::core::trait> : std::true_type {};
489template<>
struct fe::is_bit_enum<
mim::plug::core::pe> : std::true_type {};
const Def * normalize_nat(const Def *type, const Def *callee, 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)
const Def * normalize_idx2nat(const Def *type, const Def *, const Def *x)
static constexpr plugin_t Plugin_Id
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.
@ nsw
No Signed Wrap around.
const Def * normalize_shr(const Def *type, const Def *c, const Def *arg)
ankerl::unordered_dense::map< flags_t, NormalizeFn > Normalizers
float rem(float a, float b)
static constexpr size_t Num
Number of Axm::subtags.
static constexpr flags_t Base