aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/intel/compiler/brw_eu_compact.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/intel/compiler/brw_eu_compact.c b/src/intel/compiler/brw_eu_compact.c
index 7c42aeec3dd..45e158fb2a6 100644
--- a/src/intel/compiler/brw_eu_compact.c
+++ b/src/intel/compiler/brw_eu_compact.c
@@ -1413,6 +1413,20 @@ compact_immediate(const struct gen_device_info *devinfo,
enum brw_reg_type type, unsigned imm)
{
if (devinfo->gen >= 12) {
+ /* 16-bit immediates need to be replicated through the 32-bit immediate
+ * field
+ */
+ switch (type) {
+ case BRW_REGISTER_TYPE_W:
+ case BRW_REGISTER_TYPE_UW:
+ case BRW_REGISTER_TYPE_HF:
+ if ((imm >> 16) != (imm & 0xffff))
+ return -1;
+ break;
+ default:
+ break;
+ }
+
switch (type) {
case BRW_REGISTER_TYPE_F:
/* We get the high 12-bits as-is; rest must be zero */
@@ -1453,7 +1467,7 @@ compact_immediate(const struct gen_device_info *devinfo,
case BRW_REGISTER_TYPE_UQ:
case BRW_REGISTER_TYPE_B:
case BRW_REGISTER_TYPE_UB:
- unreachable("not reached");
+ return -1;
}
} else {
/* We get the low 12 bits as-is; 13th is replicated */