From 10e4feed39120072f38274b95e884422f72f360f Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 17 Oct 2017 19:50:36 -0700 Subject: [PATCH] intel/eu/reg: Add a subscript() helper This is similar to the identically named fs_reg helper. Reviewed-by: Iago Toral Quiroga Cc: mesa-stable@lists.freedesktop.org --- src/intel/compiler/brw_reg.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/intel/compiler/brw_reg.h b/src/intel/compiler/brw_reg.h index d68d64f0037..9d63717fb45 100644 --- a/src/intel/compiler/brw_reg.h +++ b/src/intel/compiler/brw_reg.h @@ -896,6 +896,22 @@ spread(struct brw_reg reg, unsigned s) } } +/** + * Reinterpret each channel of register \p reg as a vector of values of the + * given smaller type and take the i-th subcomponent from each. + */ +static inline struct brw_reg +subscript(struct brw_reg reg, enum brw_reg_type type, unsigned i) +{ + if (reg.file == IMM) + return reg; + + unsigned scale = type_sz(reg.type) / type_sz(type); + assert(scale >= 1 && i < scale); + + return suboffset(retype(spread(reg, scale), type), i); +} + static inline struct brw_reg vec16(struct brw_reg reg) { -- 2.30.2