Message ID | 20210824201105.2303789-1-matheus.ferst@eldorado.org.br (mailing list archive) |
---|---|
Headers | show |
Series | target/ppc: Fix vextu[bhw][lr]x on big endian hosts | expand |
On Tue, Aug 24, 2021 at 05:11:03PM -0300, matheus.ferst@eldorado.org.br wrote: > From: Matheus Ferst <matheus.ferst@eldorado.org.br> > > The definition of struct Int128 is currently independent of the host > endianness, causing different results when using the member s128 of > union ppc_vsr_t in big-endian builds with CONFIG_INT128 or > !CONFIG_INT128. > > The only PPC instructions that seem to be affected by this issue are the > "Vector Extract Unsigned Byte/Halfword/Word to GPR using GPR-specified > Left/Right-Index." Even on builds with Int128 support, however, their > helpers give the wrong result on big-endian hosts. > > The first patch in this series changes the definition of struct Int128 > to allow its use in the ppc_vsr_t union. The second patch fixes the > helper definition. CCing Richard Henderson, who's probably the best qualified to review these.
On 8/24/21 10:11 PM, matheus.ferst@eldorado.org.br wrote: > From: Matheus Ferst <matheus.ferst@eldorado.org.br> > > The definition of struct Int128 is currently independent of the host > endianness, causing different results when using the member s128 of > union ppc_vsr_t in big-endian builds with CONFIG_INT128 or > !CONFIG_INT128. > > The only PPC instructions that seem to be affected by this issue are the > "Vector Extract Unsigned Byte/Halfword/Word to GPR using GPR-specified > Left/Right-Index." Even on builds with Int128 support, however, their > helpers give the wrong result on big-endian hosts. > > The first patch in this series changes the definition of struct Int128 > to allow its use in the ppc_vsr_t union. The second patch fixes the > helper definition. > > Matheus Ferst (2): > include/qemu/int128.h: define struct Int128 according to the host > endianness > target/ppc: fix vextu[bhw][lr]x helpers > > include/qemu/int128.h | 19 ++++++++++++------- > target/ppc/int_helper.c | 38 ++++++++++---------------------------- > 2 files changed, 22 insertions(+), 35 deletions(-) Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
On 24/08/2021 21:11, matheus.ferst@eldorado.org.br wrote: > From: Matheus Ferst <matheus.ferst@eldorado.org.br> > > The definition of struct Int128 is currently independent of the host > endianness, causing different results when using the member s128 of > union ppc_vsr_t in big-endian builds with CONFIG_INT128 or > !CONFIG_INT128. > > The only PPC instructions that seem to be affected by this issue are the > "Vector Extract Unsigned Byte/Halfword/Word to GPR using GPR-specified > Left/Right-Index." Even on builds with Int128 support, however, their > helpers give the wrong result on big-endian hosts. > > The first patch in this series changes the definition of struct Int128 > to allow its use in the ppc_vsr_t union. The second patch fixes the > helper definition. > > Matheus Ferst (2): > include/qemu/int128.h: define struct Int128 according to the host > endianness > target/ppc: fix vextu[bhw][lr]x helpers > > include/qemu/int128.h | 19 ++++++++++++------- > target/ppc/int_helper.c | 38 ++++++++++---------------------------- > 2 files changed, 22 insertions(+), 35 deletions(-) Hi Matheus, Slightly unrelated to this patchset, however I see you've managed to make some good efforts in consolidating the functionality between big-endian and little-endian host systems. When I first worked on adding host vector support for PPC I noticed there were some further places in target/ppc/int_helper.c that could be improved from accessing ppc_avr_t fields such as u64 directly and instead using the relevant Vsr*() macros. If you feel suitably motivated, it would be amazing to see more patches to help this further along: basically look in target/ppc/int_helper.c for individual elements such as u64 (and also the VECTOR_FOR_INORDER_I macro) and determine which ones are better replaced by the relevant Vsr*() macro. ATB, Mark.
On 25/08/2021 09:55, Mark Cave-Ayland wrote: > [E-MAIL EXTERNO] Não clique em links ou abra anexos, a menos que você > possa confirmar o remetente e saber que o conteúdo é seguro. Em caso de > e-mail suspeito entre imediatamente em contato com o DTI. > > On 24/08/2021 21:11, matheus.ferst@eldorado.org.br wrote: > >> From: Matheus Ferst <matheus.ferst@eldorado.org.br> >> >> The definition of struct Int128 is currently independent of the host >> endianness, causing different results when using the member s128 of >> union ppc_vsr_t in big-endian builds with CONFIG_INT128 or >> !CONFIG_INT128. >> >> The only PPC instructions that seem to be affected by this issue are the >> "Vector Extract Unsigned Byte/Halfword/Word to GPR using GPR-specified >> Left/Right-Index." Even on builds with Int128 support, however, their >> helpers give the wrong result on big-endian hosts. >> >> The first patch in this series changes the definition of struct Int128 >> to allow its use in the ppc_vsr_t union. The second patch fixes the >> helper definition. >> >> Matheus Ferst (2): >> include/qemu/int128.h: define struct Int128 according to the host >> endianness >> target/ppc: fix vextu[bhw][lr]x helpers >> >> include/qemu/int128.h | 19 ++++++++++++------- >> target/ppc/int_helper.c | 38 ++++++++++---------------------------- >> 2 files changed, 22 insertions(+), 35 deletions(-) > > Hi Matheus, > > Slightly unrelated to this patchset, however I see you've managed to > make some good > efforts in consolidating the functionality between big-endian and > little-endian host > systems. > > When I first worked on adding host vector support for PPC I noticed > there were some > further places in target/ppc/int_helper.c that could be improved from > accessing > ppc_avr_t fields such as u64 directly and instead using the relevant > Vsr*() macros. > > If you feel suitably motivated, it would be amazing to see more patches > to help this > further along: basically look in target/ppc/int_helper.c for individual > elements such > as u64 (and also the VECTOR_FOR_INORDER_I macro) and determine which > ones are better > replaced by the relevant Vsr*() macro. > > > ATB, > > Mark. Hi Mark, That would be a nice change. Our efforts are currently on PowerISA v3.1 instructions, but I'll try to change that in helpers of things we move to decodetree. After completing the new instructions, I can give a shot in a Vsr*() patchset.
From: Matheus Ferst <matheus.ferst@eldorado.org.br> The definition of struct Int128 is currently independent of the host endianness, causing different results when using the member s128 of union ppc_vsr_t in big-endian builds with CONFIG_INT128 or !CONFIG_INT128. The only PPC instructions that seem to be affected by this issue are the "Vector Extract Unsigned Byte/Halfword/Word to GPR using GPR-specified Left/Right-Index." Even on builds with Int128 support, however, their helpers give the wrong result on big-endian hosts. The first patch in this series changes the definition of struct Int128 to allow its use in the ppc_vsr_t union. The second patch fixes the helper definition. Matheus Ferst (2): include/qemu/int128.h: define struct Int128 according to the host endianness target/ppc: fix vextu[bhw][lr]x helpers include/qemu/int128.h | 19 ++++++++++++------- target/ppc/int_helper.c | 38 ++++++++++---------------------------- 2 files changed, 22 insertions(+), 35 deletions(-)