]> gcc.gnu.org Git - gcc.git/commit
Support load/store vector with right length.
authorMichael Meissner <meissner@linux.ibm.com>
Thu, 2 Feb 2023 20:21:39 +0000 (15:21 -0500)
committerMichael Meissner <meissner@linux.ibm.com>
Thu, 2 Feb 2023 20:21:39 +0000 (15:21 -0500)
commit792355fd28cc1acd10707ebefb439e9e615e1f20
treee04ce64a91e1345f6135208aa3d9966b6ea5645f
parentdb9356d30c3dc114c72fb8feeeecedb9e5b39008
Support load/store vector with right length.

This patch adds support for new instructions that may be added to the PowerPC
architecture in the future to enhance the load and store vector with length
instructions.

The current instructions (lxvl, lxvll, stxvl, and stxvll) are inconvient to use
since the count for the number of bytes must be in the top 8 bits of the GPR
register, instead of the bottom 8 bits.  This meant that code generating these
instructions typically had to do a shift left by 56 bits to get the count into
the right position.  In a future version of the PowerPC architecture, new
variants of these instructions might be added that expect the count to be in
the bottom 8 bits of the GPR register.  These patches add this support to GCC
if the user uses the -mcpu=future option.

I discovered that the code in rs6000-string.cc to generate ISA 3.1 lxvl/stxvl
future lxvll/stxvll instructions would generate these instructions on 32-bit.
However the patterns for these instructions is only done on 64-bit systems.  So
I added a check for 64-bit support before generating the instructions.

I tested this patch on a little endian power10 system with long double using
the tradiational IBM double double format.  Assuming the other 6 patches for
-mcpu=future are checked in (or at least the first patch), can I check this
patch into the master branch for GCC 13?

2023-02-02   Michael Meissner  <meissner@linux.ibm.com>

gcc/

* config/rs6000/rs6000-string.cc (expand_block_move): Do generate lxvl
and stxvl on 32-bit.
* config/rs6000/vsx.md (lxvl): If -mcpu=future, generate the lxvl with
the shift count automaticaly used in the insn.
(lxvrl): New insn for -mcpu=future.
(lxvrll): Likewise.
(stxvl): If -mcpu=future, generate the stxvl with the shift count
automaticaly used in the insn.
(stxvrl): New insn for -mcpu=future.
(stxvrll): Likewise.

gcc/testsuite/

* gcc.target/powerpc/lxvrl.c: New test.
gcc/config/rs6000/rs6000-string.cc
gcc/config/rs6000/vsx.md
gcc/testsuite/gcc.target/powerpc/lxvrl.c [new file with mode: 0644]
This page took 0.06103 seconds and 5 git commands to generate.