This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, PowerPC] Change code generation for VSX loads and stores for little endian

On Mon, Sep 30, 2013 at 10:04 PM, Bill Schmidt
<> wrote:
> This patch implements support for VSX vector loads and stores in little
> endian mode.  VSX loads and stores permute the register image with
> respect to storage in a unique manner that is not truly little endian.
> This can cause problems (for example, when a vector appears in a union
> with a different type).  This patch adds an explicit permute to each VSX
> load and store instruction so that the register image is true little
> endian.
> It is desirable to remove redundant pairs of permutes where legal to do
> so.  This work is delayed to a later patch.
> This patch currently has no effect on generated code because -mvsx is
> disabled in little endian mode, pending fixes of additional problems
> with little endian code generation.
> I tested this by enabling -mvsx in little endian mode and running the
> regression bucket.  Using a GCC code base from August 5, I observed that
> this patch corrected 187 failures and exposed a new regression.
> Investigation showed that the regression is not directly related to the
> patch.
> Unfortunately the results are not as good on current trunk.  It appears
> we have introduced some more problems for little endian code generation
> since August 5th, which hides the effectiveness of the patch; most of
> the VSX vector tests still fail with the patch applied to current trunk.
> There are a handful of additional regressions, which again are not
> directly related to the patch.  I feel that the patch is well-tested by
> the August 5 results, and would like to commit it before continuing to
> investigate the recently introduced problems.
> I also bootstrapped and tested the patch on a big-endian machine
> (powerpc64-unknown-linux-gnu) to verify that I introduced no regressions
> in that environment.
> Ok for trunk?
> Thanks,
> Bill
> gcc:
> 2013-09-30  Bill Schmidt  <>
>         * config/rs6000/ (mov<mode>): Emit permuted move
>         sequences for LE VSX loads and stores at expand time.
>         * config/rs6000/rs6000-protos.h (rs6000_emit_le_vsx_move): New
>         prototype.
>         * config/rs6000/rs6000.c (rs6000_const_vec): New.
>         (rs6000_gen_le_vsx_permute): New.
>         (rs6000_gen_le_vsx_load): New.
>         (rs6000_gen_le_vsx_store): New.
>         (rs6000_gen_le_vsx_move): New.
>         * config/rs6000/ (*vsx_le_perm_load_v2di): New.
>         (*vsx_le_perm_load_v4si): New.
>         (*vsx_le_perm_load_v8hi): New.
>         (*vsx_le_perm_load_v16qi): New.
>         (*vsx_le_perm_store_v2di): New.
>         (*vsx_le_perm_store_v4si): New.
>         (*vsx_le_perm_store_v8hi): New.
>         (*vsx_le_perm_store_v16qi): New.
>         (*vsx_xxpermdi2_le_<mode>): New.
>         (*vsx_xxpermdi4_le_<mode>): New.
>         (*vsx_xxpermdi8_le_V8HI): New.
>         (*vsx_xxpermdi16_le_V16QI): New.
>         (*vsx_lxvd2x2_le_<mode>): New.
>         (*vsx_lxvd2x4_le_<mode>): New.
>         (*vsx_lxvd2x8_le_V8HI): New.
>         (*vsx_lxvd2x16_le_V16QI): New.
>         (*vsx_stxvd2x2_le_<mode>): New.
>         (*vsx_stxvd2x4_le_<mode>): New.
>         (*vsx_stxvd2x8_le_V8HI): New.
>         (*vsx_stxvd2x16_le_V16QI): New.
> gcc/testsuite:
> 2013-09-30  Bill Schmidt  <>
>         * Skip for ppc64 little endian.
>         * Likewise.


Thanks, David

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]