Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace obsolete isinff(...) #277

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,12 @@ if cc.get_id() == 'msvc'
]
else
test_cflags = [
'-ffast-math',
'-fno-math-errno',
'-funsafe-math-optimizations',
# '-ffinite-math-only',
'-fno-rounding-math',
'-fno-signaling-nans',
'-fcx-limited-range',
'-fstrict-aliasing',
'-Wpointer-arith',
'-Wstrict-prototypes',
Expand Down Expand Up @@ -173,7 +178,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
Loading