On Sun, Jun 16, 2019 at 01:37:36PM +0100, Mark Cave-Ayland wrote: > With the conversion of PPC VSX registers to host endian during the 4.0 development > cycle, the VSX helpers getVSR() and putVSR() which were used to convert between big > endian and host endian (and are currently just a no-op) can now be removed. This > eliminates an extra copy for each VSX source register at runtime. > > Patches 1-3 do the elimination work on a per-file basis and switch VSX register > accesses to be via pointers rather than on copies managed using getVSR()/putVSR(). > > After this patches 4-14 change the VSX registers to be passed to helpers via pointers > rather than register number so that the decode of the vector register pointers occurs > at translation time instead of at runtime. This matches how VMX instructions are > currently decoded. > > Finally patch 15 performs some related tidy-up around VSX_FMADD which decodes the > a or m form at translation time, allowing a single helper function to be used for > both implementations. > > Greg: I've added you as CC since you managed to find a bug in my last series. This > one is much more mechanical, but if you are able to confirm this doesn't introduce > any regressions in your test images then that would be great. > > Signed-off-by: Mark Cave-Ayland Patches 1 & 2 applied. > > v3: > - Rebase onto master > - Add latest R-B tags from Richard > - Fix zero init in helper_xvxsigsp() in patch 1 > - Preserve order of do_float_check_status() in helper_xsrqpi() in patch 1 > - Remove accidental write after store in VSX_STXVL() macro, and also just use > the xt pointer directly in patch 2 > > v2: > - Rebase onto master > - Use working copy of VSX destination registers in patches 1-3 to keep current > semantics where src == dest and exception handling > - Add patches 4 and 6 to split out helper functions still requiring an opcode > parameter > - Remove opcode parameter from GEN_VSX_HELPER_X3 and GEN_VSX_HELPER_X2 as it > isn't required for the common case > - Drop VSX_TEST_DC improvement patch since it is no longer applicable with the > removal of opcode from the above macros > - Rework VSX_MADD improvement patch to use a single helper for both a and m > forms as suggested by Richard > > > Mark Cave-Ayland (15): > target/ppc: remove getVSR()/putVSR() from fpu_helper.c > target/ppc: remove getVSR()/putVSR() from mem_helper.c > target/ppc: remove getVSR()/putVSR() from int_helper.c > target/ppc: introduce separate VSX_CMP macro for xvcmp* instructions > target/ppc: introduce GEN_VSX_HELPER_X3 macro to fpu_helper.c > target/ppc: introduce separate generator and helper for xscvqpdp > target/ppc: introduce GEN_VSX_HELPER_X2 macro to fpu_helper.c > target/ppc: introduce GEN_VSX_HELPER_X2_AB macro to fpu_helper.c > target/ppc: introduce GEN_VSX_HELPER_X1 macro to fpu_helper.c > target/ppc: introduce GEN_VSX_HELPER_R3 macro to fpu_helper.c > target/ppc: introduce GEN_VSX_HELPER_R2 macro to fpu_helper.c > target/ppc: introduce GEN_VSX_HELPER_R2_AB macro to fpu_helper.c > target/ppc: decode target register in VSX_VECTOR_LOAD_STORE_LENGTH at > translation time > target/ppc: decode target register in VSX_EXTRACT_INSERT at > translation time > target/ppc: improve VSX_FMADD with new GEN_VSX_HELPER_VSX_MADD macro > > target/ppc/fpu_helper.c | 841 ++++++++++++++++-------------------- > target/ppc/helper.h | 320 +++++++------- > target/ppc/int_helper.c | 26 +- > target/ppc/internal.h | 12 - > target/ppc/mem_helper.c | 25 +- > target/ppc/translate/vsx-impl.inc.c | 567 ++++++++++++++++-------- > target/ppc/translate/vsx-ops.inc.c | 70 +-- > 7 files changed, 952 insertions(+), 909 deletions(-) > -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson