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 <mark.cave-ayl...@ilande.co.uk> >
I've now applied the rest of this series to my ppc-for-4.1 tree. > 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
signature.asc
Description: PGP signature