Skip to content

Commit

Permalink
remove obsolete isinff calls
Browse files Browse the repository at this point in the history
  • Loading branch information
fxing-qnx committed Jan 21, 2025
1 parent d63bd69 commit 675da13
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 40 deletions.
1 change: 0 additions & 1 deletion meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,6 @@ endif

math_exts = [
'sincosf',
'isinff',
'isnanf',
]

Expand Down
52 changes: 18 additions & 34 deletions src/graphene-box.c
Original file line number Diff line number Diff line change
Expand Up @@ -427,55 +427,39 @@ graphene_box_get_depth (const graphene_box_t *box)
static inline bool
graphene_box_is_empty (const graphene_box_t *box)
{
#ifdef HAVE_ISINFF
float vmin[3], vmax[3];

graphene_simd4f_dup_3f (box->min.value, vmin);
graphene_simd4f_dup_3f (box->max.value, vmax);

return (isinff (vmin[0]) == 1 && isinff (vmin[1]) == 1 && isinff (vmin[2]) == 1) &&
(isinff (vmax[0]) == -1 && isinff (vmax[1]) == -1 && isinff (vmax[2]) == -1);
#else
graphene_simd4f_t neg_inf = graphene_simd4f_init (-INFINITY, -INFINITY, -INFINITY, 0.f);
graphene_simd4f_t pos_inf = graphene_simd4f_init (INFINITY, INFINITY, INFINITY, 0.f);

/* This is only every going to be valid for boxes that we have
* initialized ourselves, because we use the same values; the
* bitwise comparison will not hold for infinities generated by
* other operations
*/
int min_cmp = memcmp (&box->min.value, &pos_inf, sizeof (graphene_simd4f_t));
int max_cmp = memcmp (&box->max.value, &neg_inf, sizeof (graphene_simd4f_t));

return min_cmp == 0 && max_cmp == 0;
#endif
bool vmin_valid = (isinf(vmin[0]) && !signbit(vmin[0])) &&
(isinf(vmin[1]) && !signbit(vmin[1])) &&
(isinf(vmin[2]) && !signbit(vmin[2]));

bool vmax_valid = (isinf(vmax[0]) && signbit(vmax[0])) &&
(isinf(vmax[1]) && signbit(vmax[1])) &&
(isinf(vmax[2]) && signbit(vmax[2]));

return vmin_valid && vmax_valid;
}

static inline bool
graphene_box_is_infinity (const graphene_box_t *box)
{
#ifdef HAVE_ISINFF
float vmin[3], vmax[3];

graphene_simd4f_dup_3f (box->min.value, vmin);
graphene_simd4f_dup_3f (box->max.value, vmax);

return (isinff (vmin[0]) == -1 && isinff (vmin[1]) == -1 && isinff (vmin[2]) == -1) &&
(isinff (vmax[0]) == 1 && isinff (vmax[1]) == 1 && isinff (vmax[2]) == 1);
#else
graphene_simd4f_t neg_inf = graphene_simd4f_init (-INFINITY, -INFINITY, -INFINITY, 0.f);
graphene_simd4f_t pos_inf = graphene_simd4f_init (INFINITY, INFINITY, INFINITY, 0.f);

/* This is only every going to be valid for boxes that we have
* initialized ourselves, because we use the same values; the
* bitwise comparison will not hold for infinities generated by
* other operations
*/
int min_cmp = memcmp (&box->min.value, &neg_inf, sizeof (graphene_simd4f_t));
int max_cmp = memcmp (&box->max.value, &pos_inf, sizeof (graphene_simd4f_t));

return min_cmp == 0 && max_cmp == 0;
#endif
bool vmin_valid = (isinf(vmin[0]) && signbit(vmin[0])) &&
(isinf(vmin[1]) && signbit(vmin[1])) &&
(isinf(vmin[2]) && signbit(vmin[2]));

bool vmax_valid = (isinf(vmax[0]) && !signbit(vmax[0])) &&
(isinf(vmax[1]) && !signbit(vmax[1])) &&
(isinf(vmax[2]) && !signbit(vmax[2]));

return vmin_valid && vmax_valid;
}

/**
Expand Down
5 changes: 0 additions & 5 deletions src/graphene-simd4f.c
Original file line number Diff line number Diff line change
Expand Up @@ -1435,13 +1435,8 @@ approx_equal (float a,
float b,
float epsilon)
{
#ifdef HAVE_ISINFF
if (isinff (a) && isinff (b))
return true;
#else
if (fpclassify (a) == FP_INFINITE && fpclassify (b) == FP_INFINITE)
return true;
#endif

float diff = fabsf (a - b);
if (isnan (diff))
Expand Down

0 comments on commit 675da13

Please sign in to comment.