From 8f2a9a9186221fd4610c617d7ac79a78f5476949 Mon Sep 17 00:00:00 2001 From: Steven Koo Date: Thu, 16 Jun 2022 20:50:41 -0500 Subject: uhd: refactor get_all_addrs to remove duplicates This commit refactors the existing register definitions, so that duplicate entries don't get added to the get_all_addrs method. Duplicates caused long builds on macOS/Clang, where build times would go from sub 5 min to 50 min or more likely because of the compiler trying to optimize. Signed-off-by: Steven Koo --- host/lib/ic_reg_maps/gen_zbx_cpld_regs.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'host/lib') diff --git a/host/lib/ic_reg_maps/gen_zbx_cpld_regs.py b/host/lib/ic_reg_maps/gen_zbx_cpld_regs.py index fce051d53..5e5274930 100755 --- a/host/lib/ic_reg_maps/gen_zbx_cpld_regs.py +++ b/host/lib/ic_reg_maps/gen_zbx_cpld_regs.py @@ -399,19 +399,28 @@ void set_reg(uint16_t addr, uint32_t val) } } +<% + ro_regs = set() + for reg in filter(lambda reg: reg.is_readonly(), filter(all_addr_filter, regs)): + for index in range(reg.get_array_len() if reg.is_array else 1): + ro_regs.add(reg.get_addr() + index * reg.get_addr_step_size()) + + rw_regs = set() + for reg in filter(lambda reg: not reg.is_readonly(), filter(all_addr_filter, regs)): + for index in range(reg.get_array_len() if reg.is_array else 1): + rw_regs.add(reg.get_addr() + index * reg.get_addr_step_size()) +%> + template std::set get_all_addrs(bool include_ro = false) { std::set addrs; - % for reg in filter(all_addr_filter, regs): - % if reg.is_readonly(): if (include_ro) { - % else: - { - % endif - % for index in range(reg.get_array_len() if reg.is_array else 1): - addrs.insert(${reg.get_addr() + index * reg.get_addr_step_size()}); - % endfor + % for reg in sorted(ro_regs): + addrs.insert(${reg}); + % endfor } + % for reg in sorted(rw_regs): + addrs.insert(${reg}); % endfor return addrs; } -- cgit v1.2.3