120 none = 0x3825490000000f00,
127 reassoc = 0x3825490000000f07,
138 add = 0x3825490000001000,
139 sub = 0x3825490000001001,
140 mul = 0x3825490000001002,
141 div = 0x3825490000001003,
160 im = 0x3825490000001200,
162 iM = 0x3825490000001201,
164 Im = 0x3825490000001202,
166 IM = 0x3825490000001203,
187 h = 0x3825490000001304,
195 a = 0x3825490000001308,
226 sq = 0x3825490000001500,
227 cb = 0x3825490000001501,
264 f = 0x3825490000001700,
265 fc = 0x3825490000001701,
276 t = 0x3825490000001800,
277 l = 0x3825490000001801,
296 f = 0x3825490000001a00,
297 c = 0x3825490000001a01,
298 r = 0x3825490000001a02,
299 t = 0x3825490000001a03,
311 f = 0x3825490000001b00,
313 e = 0x3825490000001b01,
315 l = 0x3825490000001b02,
317 le = 0x3825490000001b03,
319 g = 0x3825490000001b04,
321 ge = 0x3825490000001b05,
323 ne = 0x3825490000001b06,
325 o = 0x3825490000001b07,
327 u = 0x3825490000001b08,
329 ue = 0x3825490000001b09,
331 ul = 0x3825490000001b0a,
333 ule = 0x3825490000001b0b,
335 ug = 0x3825490000001b0c,
337 uge = 0x3825490000001b0d,
341 t = 0x3825490000001b0f,
394#define MIM_math_NORMALIZER_IMPL \
395 void register_normalizers(Normalizers& normalizers) {\
396 normalizers[flags_t(arith::add)] = &normalize_arith<arith::add>; \
397 normalizers[flags_t(arith::sub)] = &normalize_arith<arith::sub>; \
398 normalizers[flags_t(arith::mul)] = &normalize_arith<arith::mul>; \
399 normalizers[flags_t(arith::div)] = &normalize_arith<arith::div>; \
400 normalizers[flags_t(arith::rem)] = &normalize_arith<arith::rem>; \
401 normalizers[flags_t(extrema::im)] = &normalize_extrema<extrema::im>; \
402 normalizers[flags_t(extrema::iM)] = &normalize_extrema<extrema::iM>; \
403 normalizers[flags_t(extrema::Im)] = &normalize_extrema<extrema::Im>; \
404 normalizers[flags_t(extrema::IM)] = &normalize_extrema<extrema::IM>; \
405 normalizers[flags_t(tri::ahff)] = &normalize_tri<tri::ahff>; \
406 normalizers[flags_t(tri::ahfF)] = &normalize_tri<tri::ahfF>; \
407 normalizers[flags_t(tri::ahFf)] = &normalize_tri<tri::ahFf>; \
408 normalizers[flags_t(tri::ahFF)] = &normalize_tri<tri::ahFF>; \
409 normalizers[flags_t(tri::aHff)] = &normalize_tri<tri::aHff>; \
410 normalizers[flags_t(tri::aHfF)] = &normalize_tri<tri::aHfF>; \
411 normalizers[flags_t(tri::aHFf)] = &normalize_tri<tri::aHFf>; \
412 normalizers[flags_t(tri::aHFF)] = &normalize_tri<tri::aHFF>; \
413 normalizers[flags_t(tri::Ahff)] = &normalize_tri<tri::Ahff>; \
414 normalizers[flags_t(tri::AhfF)] = &normalize_tri<tri::AhfF>; \
415 normalizers[flags_t(tri::AhFf)] = &normalize_tri<tri::AhFf>; \
416 normalizers[flags_t(tri::AhFF)] = &normalize_tri<tri::AhFF>; \
417 normalizers[flags_t(tri::AHff)] = &normalize_tri<tri::AHff>; \
418 normalizers[flags_t(tri::AHfF)] = &normalize_tri<tri::AHfF>; \
419 normalizers[flags_t(tri::AHFf)] = &normalize_tri<tri::AHFf>; \
420 normalizers[flags_t(tri::AHFF)] = &normalize_tri<tri::AHFF>; \
421 normalizers[flags_t(Annex::Base<pow>)] = &normalize_pow; \
422 normalizers[flags_t(rt::sq)] = &normalize_rt<rt::sq>; \
423 normalizers[flags_t(rt::cb)] = &normalize_rt<rt::cb>; \
424 normalizers[flags_t(exp::lbb)] = &normalize_exp<exp::lbb>; \
425 normalizers[flags_t(exp::lbB)] = &normalize_exp<exp::lbB>; \
426 normalizers[flags_t(exp::lBb)] = &normalize_exp<exp::lBb>; \
427 normalizers[flags_t(exp::lBB)] = &normalize_exp<exp::lBB>; \
428 normalizers[flags_t(exp::Lbb)] = &normalize_exp<exp::Lbb>; \
429 normalizers[flags_t(exp::LbB)] = &normalize_exp<exp::LbB>; \
430 normalizers[flags_t(exp::LBb)] = &normalize_exp<exp::LBb>; \
431 normalizers[flags_t(exp::LBB)] = &normalize_exp<exp::LBB>; \
432 normalizers[flags_t(er::f)] = &normalize_er<er::f>; \
433 normalizers[flags_t(er::fc)] = &normalize_er<er::fc>; \
434 normalizers[flags_t(gamma::t)] = &normalize_gamma<gamma::t>; \
435 normalizers[flags_t(gamma::l)] = &normalize_gamma<gamma::l>; \
436 normalizers[flags_t(Annex::Base<abs>)] = &normalize_abs; \
437 normalizers[flags_t(round::f)] = &normalize_round<round::f>; \
438 normalizers[flags_t(round::c)] = &normalize_round<round::c>; \
439 normalizers[flags_t(round::r)] = &normalize_round<round::r>; \
440 normalizers[flags_t(round::t)] = &normalize_round<round::t>; \
441 normalizers[flags_t(cmp::ugle)] = &normalize_cmp<cmp::ugle>; \
442 normalizers[flags_t(cmp::uglE)] = &normalize_cmp<cmp::uglE>; \
443 normalizers[flags_t(cmp::ugLe)] = &normalize_cmp<cmp::ugLe>; \
444 normalizers[flags_t(cmp::ugLE)] = &normalize_cmp<cmp::ugLE>; \
445 normalizers[flags_t(cmp::uGle)] = &normalize_cmp<cmp::uGle>; \
446 normalizers[flags_t(cmp::uGlE)] = &normalize_cmp<cmp::uGlE>; \
447 normalizers[flags_t(cmp::uGLe)] = &normalize_cmp<cmp::uGLe>; \
448 normalizers[flags_t(cmp::uGLE)] = &normalize_cmp<cmp::uGLE>; \
449 normalizers[flags_t(cmp::Ugle)] = &normalize_cmp<cmp::Ugle>; \
450 normalizers[flags_t(cmp::UglE)] = &normalize_cmp<cmp::UglE>; \
451 normalizers[flags_t(cmp::UgLe)] = &normalize_cmp<cmp::UgLe>; \
452 normalizers[flags_t(cmp::UgLE)] = &normalize_cmp<cmp::UgLE>; \
453 normalizers[flags_t(cmp::UGle)] = &normalize_cmp<cmp::UGle>; \
454 normalizers[flags_t(cmp::UGlE)] = &normalize_cmp<cmp::UGlE>; \
455 normalizers[flags_t(cmp::UGLe)] = &normalize_cmp<cmp::UGLe>; \
456 normalizers[flags_t(cmp::UGLE)] = &normalize_cmp<cmp::UGLE>; \
457 normalizers[flags_t(conv::s2f)] = &normalize_conv<conv::s2f>; \
458 normalizers[flags_t(conv::u2f)] = &normalize_conv<conv::u2f>; \
459 normalizers[flags_t(conv::f2s)] = &normalize_conv<conv::f2s>; \
460 normalizers[flags_t(conv::f2u)] = &normalize_conv<conv::f2u>; \
461 normalizers[flags_t(conv::f2f)] = &normalize_conv<conv::f2f>; \
559template<>
struct fe::is_bit_enum<
mim::plug::math::mode> : std::true_type {};
560template<>
struct fe::is_bit_enum<
mim::plug::math::arith> : std::true_type {};
561template<>
struct fe::is_bit_enum<
mim::plug::math::extrema> : std::true_type {};
562template<>
struct fe::is_bit_enum<
mim::plug::math::tri> : std::true_type {};
563template<>
struct fe::is_bit_enum<
mim::plug::math::rt> : std::true_type {};
564template<>
struct fe::is_bit_enum<
mim::plug::math::exp> : std::true_type {};
565template<>
struct fe::is_bit_enum<
mim::plug::math::er> : std::true_type {};
566template<>
struct fe::is_bit_enum<
mim::plug::math::gamma> : std::true_type {};
567template<>
struct fe::is_bit_enum<
mim::plug::math::round> : std::true_type {};
568template<>
struct fe::is_bit_enum<
mim::plug::math::cmp> : std::true_type {};
569template<>
struct fe::is_bit_enum<
mim::plug::math::conv> : std::true_type {};
static constexpr plugin_t Plugin_Id
const Def * normalize_extrema(const Def *type, const Def *c, const Def *arg)
const Def * normalize_er(const Def *type, const Def *, const Def *arg)
const Def * normalize_cmp(const Def *type, const Def *c, const Def *arg)
const Def * normalize_abs(const Def *type, const Def *, const Def *arg)
const Def * normalize_gamma(const Def *type, const Def *, const Def *arg)
@ afn
Approximate functions.
@ unsafe
Mode::nsz | Mode::arcp | Mode::reassoc.
@ contract
Allow floating-point contraction (e.g.
@ finite
Mode::nnan | Mode::ninf.
void register_normalizers(Normalizers &normalizers)
const Def * normalize_arith(const Def *type, const Def *c, const Def *arg)
const Def * normalize_round(const Def *type, const Def *, const Def *arg)
const Def * normalize_tri(const Def *type, const Def *, const Def *arg)
const Def * normalize_exp(const Def *type, const Def *, const Def *arg)
const Def * normalize_rt(const Def *type, const Def *, const Def *arg)
const Def * normalize_pow(const Def *type, const Def *, const Def *arg)
const Def * normalize_conv(const Def *dst_t, const Def *, const Def *x)
float rem(float a, float b)
absl::flat_hash_map< flags_t, NormalizeFn > Normalizers
static constexpr size_t Num
Number of Axm::subtags.
static constexpr flags_t Base