> ... >> +#define TRIM_REG(chan, rank, reg, byte) \ >> + (((EMC_PMACRO_OB_DDLL_LONG_DQ_RANK ## rank ## _ ## reg ## \ >> + _OB_DDLL_LONG_DQ_RANK ## rank ## _BYTE ## byte ## _MASK & \ >> + next->trim_regs[EMC_PMACRO_OB_DDLL_LONG_DQ_RANK ## \ >> + rank ## _ ## reg ## _INDEX]) >> \ >> + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK ## rank ## _ ## reg ## \ >> + _OB_DDLL_LONG_DQ_RANK ## rank ## _BYTE ## byte ## _SHIFT) \ >> + + \ >> + (((EMC_DATA_BRLSHFT_ ## rank ## _RANK ## rank ## _BYTE ## \ >> + byte ## _DATA_BRLSHFT_MASK & \ >> + next->trim_perch_regs[EMC ## chan ## \ >> + _EMC_DATA_BRLSHFT_ ## rank ## _INDEX]) >> \ >> + EMC_DATA_BRLSHFT_ ## rank ## _RANK ## rank ## _BYTE ## \ >> + byte ## _DATA_BRLSHFT_SHIFT) * 64)) >> + >> +#define CALC_TEMP(rank, reg, byte1, byte2, n) \ >> + (((new[n] << EMC_PMACRO_OB_DDLL_LONG_DQ_RANK ## rank ## _ ## \ >> + reg ## _OB_DDLL_LONG_DQ_RANK ## rank ## _BYTE ## byte1 ## _SHIFT) & \ >> + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK ## rank ## _ ## reg ## \ >> + _OB_DDLL_LONG_DQ_RANK ## rank ## _BYTE ## byte1 ## _MASK) \ >> + | \ >> + ((new[n + 1] << EMC_PMACRO_OB_DDLL_LONG_DQ_RANK ## rank ## _ ##\ >> + reg ## _OB_DDLL_LONG_DQ_RANK ## rank ## _BYTE ## byte2 ## _SHIFT) & \ >> + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK ## rank ## _ ## reg ## \ >> + _OB_DDLL_LONG_DQ_RANK ## rank ## _BYTE ## byte2 ## _MASK)) What about replacing those barely readable concatenated macros with a raw values? Like: TRIM_REG(brlshft_idx, ob_ddll_long_dq_rank_mask, ...)