There's a common pattern in QEMU where a function needs to perform a data load or store of an N byte integer in a particular endianness. At the moment this is handled by doing a switch() on the size and calling the appropriate ld*_p or st*_p function for each size. This patchset provides a new family of functions ldn_*_p() and stn_*_p() which take the size as an argument and do the switch() themselves, and uses them in 5 callsites in exec.c.
If people like the idea, naming convention, etc, we can look for and convert other callsites, extend this to eg an address_space_ldn() and address_space_stn() (sample use cases in watch_mem_read(), watch_mem_write(), dino_chip_write_with_attrs(), tx_ppc_read(), tx_ppc_write()...) Patch 2 here fixes an apparently unintentional sign-extension in subpage_read(), so that patch 3 is a no-behaviour-change patch. thanks -- PMM Peter Maydell (3): bswap: Add new stn_*_p() and ldn_*_p() memory access functions exec.c: Don't accidentally sign-extend 4-byte loads in subpage_read() exec.c: Use stn_p() and ldn_p() instead of explicit switches include/exec/cpu-all.h | 4 ++ include/qemu/bswap.h | 52 +++++++++++++++++ exec.c | 112 +++--------------------------------- docs/devel/loads-stores.rst | 15 +++++ 4 files changed, 79 insertions(+), 104 deletions(-) -- 2.17.1