@@ -427,55 +427,39 @@ graphene_box_get_depth (const graphene_box_t *box)
427427static inline bool
428428graphene_box_is_empty (const graphene_box_t * box )
429429{
430- #ifdef HAVE_ISINFF
431430 float vmin [3 ], vmax [3 ];
432431
433432 graphene_simd4f_dup_3f (box -> min .value , vmin );
434433 graphene_simd4f_dup_3f (box -> max .value , vmax );
435434
436- return (isinff (vmin [0 ]) == 1 && isinff (vmin [1 ]) == 1 && isinff (vmin [2 ]) == 1 ) &&
437- (isinff (vmax [0 ]) == -1 && isinff (vmax [1 ]) == -1 && isinff (vmax [2 ]) == -1 );
438- #else
439- graphene_simd4f_t neg_inf = graphene_simd4f_init (- INFINITY , - INFINITY , - INFINITY , 0.f );
440- graphene_simd4f_t pos_inf = graphene_simd4f_init (INFINITY , INFINITY , INFINITY , 0.f );
441-
442- /* This is only every going to be valid for boxes that we have
443- * initialized ourselves, because we use the same values; the
444- * bitwise comparison will not hold for infinities generated by
445- * other operations
446- */
447- int min_cmp = memcmp (& box -> min .value , & pos_inf , sizeof (graphene_simd4f_t ));
448- int max_cmp = memcmp (& box -> max .value , & neg_inf , sizeof (graphene_simd4f_t ));
449-
450- return min_cmp == 0 && max_cmp == 0 ;
451- #endif
435+ bool vmin_valid = (isinf (vmin [0 ]) && !signbit (vmin [0 ])) &&
436+ (isinf (vmin [1 ]) && !signbit (vmin [1 ])) &&
437+ (isinf (vmin [2 ]) && !signbit (vmin [2 ]));
438+
439+ bool vmax_valid = (isinf (vmax [0 ]) && signbit (vmax [0 ])) &&
440+ (isinf (vmax [1 ]) && signbit (vmax [1 ])) &&
441+ (isinf (vmax [2 ]) && signbit (vmax [2 ]));
442+
443+ return vmin_valid && vmax_valid ;
452444}
453445
454446static inline bool
455447graphene_box_is_infinity (const graphene_box_t * box )
456448{
457- #ifdef HAVE_ISINFF
458449 float vmin [3 ], vmax [3 ];
459450
460451 graphene_simd4f_dup_3f (box -> min .value , vmin );
461452 graphene_simd4f_dup_3f (box -> max .value , vmax );
462453
463- return (isinff (vmin [0 ]) == -1 && isinff (vmin [1 ]) == -1 && isinff (vmin [2 ]) == -1 ) &&
464- (isinff (vmax [0 ]) == 1 && isinff (vmax [1 ]) == 1 && isinff (vmax [2 ]) == 1 );
465- #else
466- graphene_simd4f_t neg_inf = graphene_simd4f_init (- INFINITY , - INFINITY , - INFINITY , 0.f );
467- graphene_simd4f_t pos_inf = graphene_simd4f_init (INFINITY , INFINITY , INFINITY , 0.f );
468-
469- /* This is only every going to be valid for boxes that we have
470- * initialized ourselves, because we use the same values; the
471- * bitwise comparison will not hold for infinities generated by
472- * other operations
473- */
474- int min_cmp = memcmp (& box -> min .value , & neg_inf , sizeof (graphene_simd4f_t ));
475- int max_cmp = memcmp (& box -> max .value , & pos_inf , sizeof (graphene_simd4f_t ));
476-
477- return min_cmp == 0 && max_cmp == 0 ;
478- #endif
454+ bool vmin_valid = (isinf (vmin [0 ]) && signbit (vmin [0 ])) &&
455+ (isinf (vmin [1 ]) && signbit (vmin [1 ])) &&
456+ (isinf (vmin [2 ]) && signbit (vmin [2 ]));
457+
458+ bool vmax_valid = (isinf (vmax [0 ]) && !signbit (vmax [0 ])) &&
459+ (isinf (vmax [1 ]) && !signbit (vmax [1 ])) &&
460+ (isinf (vmax [2 ]) && !signbit (vmax [2 ]));
461+
462+ return vmin_valid && vmax_valid ;
479463}
480464
481465/**
0 commit comments