i965/fs: Make half(fs_reg, unsigned) handle register files more explicitly
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 5 May 2015 22:57:11 +0000 (15:57 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 6 May 2015 17:29:29 +0000 (10:29 -0700)
Previously, we had a special case for uniforms and immediates and then a
bunch of asserts for various other pessimal things.  This commit changes it
so that it explicitly does something on each register file.  Some of them
are disallowed and others are treated properly.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_ir_fs.h

index acbf617cfa61f784dcc0e5df7f7da4aa610ec8dc..9ebe9808dda4fcc96a7d9c403eb9d96e284285fa 100644 (file)
@@ -183,13 +183,24 @@ half(fs_reg reg, unsigned idx)
 {
    assert(idx < 2);
 
-   if (reg.file == UNIFORM || reg.file == IMM)
+   switch (reg.file) {
+   case BAD_FILE:
+   case UNIFORM:
+   case IMM:
       return reg;
 
-   assert(idx == 0 || reg.file != HW_REG);
-   assert(reg.width == 16);
-   reg.width = 8;
-   return horiz_offset(reg, 8 * idx);
+   case GRF:
+   case MRF:
+      assert(reg.width == 16);
+      reg.width = 8;
+      return horiz_offset(reg, 8 * idx);
+
+   case ATTR:
+   case HW_REG:
+   default:
+      unreachable("Cannot take half of this register type");
+   }
+   return reg;
 }
 
 static const fs_reg reg_undef;