MCPcopy Create free account
hub / github.com/AliveToolkit/alive2 / handle_subnormal

Function handle_subnormal

ir/instr.cpp:675–708  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

673}
674
675static expr handle_subnormal(const State &s, FPDenormalAttrs::Type attr,
676 expr &&v) {
677 auto posz = [&]() {
678 return expr::mkIf(v.isFPSubNormal(), expr::mkNumber("0", v), v);
679 };
680 auto sign = [&]() {
681 return expr::mkIf(v.isFPSubNormal(),
682 expr::mkIf(v.isFPNegative(),
683 expr::mkNumber("-0", v),
684 expr::mkNumber("0", v)),
685 v);
686 };
687
688 switch (attr) {
689 case FPDenormalAttrs::IEEE:
690 break;
691 case FPDenormalAttrs::PositiveZero:
692 v = posz();
693 break;
694 case FPDenormalAttrs::PreserveSign:
695 v = sign();
696 break;
697 case FPDenormalAttrs::Dynamic: {
698 auto &mode = s.getFpDenormalMode();
699 v = expr::mkIf(mode == FPDenormalAttrs::IEEE,
700 v,
701 expr::mkIf(mode == FPDenormalAttrs::PositiveZero,
702 posz(),
703 sign()));
704 break;
705 }
706 }
707 return std::move(v);
708}
709
710template <typename T>
711static T round_value(const State &s, FpRoundingMode rm, AndExpr &non_poison,

Callers 1

fm_poisonFunction · 0.85

Calls 2

isFPSubNormalMethod · 0.80
isFPNegativeMethod · 0.80

Tested by

no test coverage detected