From: Jason Ekstrand Date: Fri, 16 Nov 2018 19:03:31 +0000 (-0600) Subject: intel/inst: Fix the ia16_addr_imm helpers X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d96969120de1a9cee04a889831347154f54e0c4b;p=mesa.git intel/inst: Fix the ia16_addr_imm helpers These have clearly never seen any use.... On gen8, the bottom 4 bits are missing so we need to shift them off before we call set_bits and shift again when we get the bits. Found by inspection. Reviewed-by: Iago Toral Quiroga --- diff --git a/src/intel/compiler/brw_inst.h b/src/intel/compiler/brw_inst.h index 753f09e70cf..f60325c1a6b 100644 --- a/src/intel/compiler/brw_inst.h +++ b/src/intel/compiler/brw_inst.h @@ -933,10 +933,11 @@ brw_inst_set_##reg##_ia16_addr_imm(const struct gen_device_info *devinfo, \ { \ assert((value & ~0x3ff) == 0); \ if (devinfo->gen >= 8) { \ - brw_inst_set_bits(inst, g8_high, g8_low, value & 0x1ff); \ - brw_inst_set_bits(inst, g8_nine, g8_nine, value >> 9); \ + assert(GET_BITS(value, 3, 0) == 0); \ + brw_inst_set_bits(inst, g8_high, g8_low, GET_BITS(value, 8, 4)); \ + brw_inst_set_bits(inst, g8_nine, g8_nine, GET_BITS(value, 9, 9)); \ } else { \ - brw_inst_set_bits(inst, g4_high, g4_low, value >> 9); \ + brw_inst_set_bits(inst, g4_high, g4_low, value); \ } \ } \ static inline unsigned \ @@ -944,7 +945,7 @@ brw_inst_##reg##_ia16_addr_imm(const struct gen_device_info *devinfo, \ const brw_inst *inst) \ { \ if (devinfo->gen >= 8) { \ - return brw_inst_bits(inst, g8_high, g8_low) | \ + return (brw_inst_bits(inst, g8_high, g8_low) << 4) | \ (brw_inst_bits(inst, g8_nine, g8_nine) << 9); \ } else { \ return brw_inst_bits(inst, g4_high, g4_low); \