c = mode_is_int(mode) && mode_honor_signed_zeros(mode) ?
get_mode_one(mode) : get_mode_null(mode);
- ncmp = tarval_cmp(tv, c) ^ pn_Cmp_Eq;
- if (cmp != ncmp)
+ ncmp = tarval_cmp(tv, c);
+ if (ncmp == pn_Cmp_Eq)
+ ncmp = pn_Cmp_Le;
+
+ if (cmp != (ncmp ^ pn_Cmp_Eq))
return VALUE_UNKNOWN;
/* yep, negative */
if (mode_is_int(mode)) {
c = get_mode_minus_one(mode);
- ncmp = tarval_cmp(tv, c) ^ pn_Cmp_Eq;
- if (cmp != ncmp)
+ ncmp = tarval_cmp(tv, c);
+ if (ncmp == pn_Cmp_Eq)
+ ncmp = pn_Cmp_Ge;
+
+ if (cmp != (ncmp ^ pn_Cmp_Eq))
return VALUE_UNKNOWN;
}
else {