util: Add a _mesa_i64roundevenf() helper.

This always returns a int64_t, translating to _mesa_lroundevenf on
systems where long is 64-bit, and llrintf where "long long" is needed.

Fixes: 594fc0f859 ("mesa: Replace F_TO_I() with _mesa_lroundevenf().")
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Kenneth Graunke 2019-08-23 11:08:48 -07:00
parent 163fc11f27
commit b59914e179

View file

@ -129,4 +129,20 @@ _mesa_lroundeven(double x)
#endif
}
/**
* \brief Rounds \c x to the nearest integer, with ties to the even integer,
* and returns the value as an int64_t.
*/
static inline int64_t
_mesa_i64roundevenf(float x)
{
#if LONG_MAX == INT64_MAX
return _mesa_lroundevenf(x);
#elif LONG_MAX == INT32_MAX
return llrintf(x);
#else
#error "Unsupported long size"
#endif
}
#endif