i965: Fix brw_regs_equal() for NaN and positive/negative zero.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 17 May 2016 00:28:19 +0000 (17:28 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 20 May 2016 21:28:06 +0000 (14:28 -0700)
We'd like the comparisons to mean "the exact same bits".  Comparing
doubles won't do that for NaN values or positive vs. negative zero.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/drivers/dri/i965/brw_reg.h

index 71e1024428a735bfe0372420962f84f64ea8c03e..b0ef94e96d0444979cfef32cc1f8cd601baf79be 100644 (file)
@@ -260,6 +260,7 @@ struct brw_reg {
       };
 
       double df;
+      uint64_t u64;
       float f;
       int   d;
       unsigned ud;
@@ -270,7 +271,7 @@ static inline bool
 brw_regs_equal(const struct brw_reg *a, const struct brw_reg *b)
 {
    const bool df = a->type == BRW_REGISTER_TYPE_DF && a->file == IMM;
-   return a->bits == b->bits && (df ? a->df == b->df : a->ud == b->ud);
+   return a->bits == b->bits && (df ? a->u64 == b->u64 : a->ud == b->ud);
 }
 
 struct brw_indirect {