diff --git a/src/imagination/pco/pco_internal.h b/src/imagination/pco/pco_internal.h index c68ff0ef561..4055efc5090 100644 --- a/src/imagination/pco/pco_internal.h +++ b/src/imagination/pco/pco_internal.h @@ -2499,6 +2499,36 @@ ref_src_map_valid(pco_ref ref, enum pco_io mapped_src, bool *needs_s124) return false; } +static inline enum pco_srcsel pco_ref_srcsel(pco_ref ref) +{ + enum pco_io io = pco_ref_get_io(ref); + + switch (io) { + case PCO_IO_S0: + return PCO_SRCSEL_S0; + + case PCO_IO_S1: + return PCO_SRCSEL_S1; + + case PCO_IO_S2: + return PCO_SRCSEL_S2; + + case PCO_IO_S3: + return PCO_SRCSEL_S3; + + case PCO_IO_S4: + return PCO_SRCSEL_S4; + + case PCO_IO_S5: + return PCO_SRCSEL_S5; + + default: + break; + } + + UNREACHABLE(""); +} + /** * \brief Returns whether none of the lower/upper sources in an instruction * group are set. diff --git a/src/imagination/pco/pco_map.py b/src/imagination/pco/pco_map.py index 2eff31319a6..ff5b801541d 100644 --- a/src/imagination/pco/pco_map.py +++ b/src/imagination/pco/pco_map.py @@ -1135,7 +1135,7 @@ encode_map(O_LD, ('drc', ('pco_ref_get_drc', SRC(0))), ('burstlen', ('pco_ref_get_imm', SRC(1))), - ('srcseladd', 's0'), + ('srcseladd', ('pco_ref_srcsel', SRC(2))), ('cachemode_ld', OM_MCU_CACHE_MODE_LD) ]) ],