On 4/27/23 13:13, Jakub Jelinek wrote:
+ unsigned bulps = targetm.libm_function_max_error (m_cfn, TYPE_MODE (type), + true); + if (bulps == ~0U) + r.set_varying (type); + else if (bulps == 0) + r.set (type, dconstm1, dconst1); + else + { + REAL_VALUE_TYPE boundmin, boundmax; + boundmax = dconst1; + while (bulps--) + frange_nextafter (TYPE_MODE (type), boundmax, dconstinf); + real_arithmetic (&boundmin, NEGATE_EXPR, &boundmax, NULL); + r.set (type, boundmin, boundmax); + }
This seems like something we'll do over and over for other operations, right? If so, could you abstract it into a separate function?
Thanks. Aldy