intel/eu/gen12: Implement immediate 64 bit constant encoding.
authorSagar Ghuge <sagar.ghuge@intel.com>
Fri, 16 Nov 2018 00:19:39 +0000 (16:19 -0800)
committerFrancisco Jerez <currojerez@riseup.net>
Fri, 11 Oct 2019 19:24:16 +0000 (12:24 -0700)
On Gen12, 64 bit immediate constants are loaded in reverse order. Lower
32 bit gets loaded from bit 96-127 and higher 32 bits from 64-95 in
instruction encoding.

Signed-off-by: Sagar Ghuge <sagar.ghuge@intel.com>
Co-authored-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/intel/compiler/brw_inst.h

index fdc6cd762259438be7b9c8def082997d03dd6eb1..f5a65fea40d98fd9b91b39553a53d0b2bf33fe24 100644 (file)
@@ -1136,7 +1136,13 @@ brw_inst_set_imm_df(const struct gen_device_info *devinfo,
    } dt;
    (void) devinfo;
    dt.d = value;
-   brw_inst_set_bits(insn, 127, 64, dt.u);
+
+   if (devinfo->gen >= 12) {
+      brw_inst_set_bits(insn, 95, 64, dt.u >> 32);
+      brw_inst_set_bits(insn, 127, 96, dt.u & 0xFFFFFFFF);
+   } else {
+      brw_inst_set_bits(insn, 127, 64, dt.u);
+   }
 }
 
 static inline void
@@ -1144,7 +1150,12 @@ brw_inst_set_imm_uq(const struct gen_device_info *devinfo,
                     brw_inst *insn, uint64_t value)
 {
    (void) devinfo;
-   brw_inst_set_bits(insn, 127, 64, value);
+   if (devinfo->gen >= 12) {
+      brw_inst_set_bits(insn, 95, 64, value >> 32);
+      brw_inst_set_bits(insn, 127, 96, value & 0xFFFFFFFF);
+   } else {
+      brw_inst_set_bits(insn, 127, 64, value);
+   }
 }
 
 /** @} */