https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61397

--- Comment #8 from Michael Meissner <meissner at gcc dot gnu.org> ---
I added the lp64 test when I added the -mupper-regs support and rewrote the
test.

The rationale is I was using a long bit vector to make sure that each floating
point variable got used (in_mask and out_mask each have a bit set for the 40
floating point values, to make sure that each value gets set in ways that the
optimizer can't rearrange things and use less live variables).

If we use long long in doing the masking in 32-bit, we run the risk that you
have to call a function to do long long shifting, and/or, and testing.  So, I
added the && lp64 conditional to the test.

The original version of p8vector-ldst.c no longer works with the -mupper-regs
support, as the compiler will happily move variables into the appropriate
register class without keeping the register there normally.  So, I wrote the
test to have 40 live FP values.

If people feel strongly enough that it needs to work on big endian 32-bit
(little endian powerpc64 no longer supports 32-bit mode), we can rewrite the
test to have 2 separate in_masks and out_masks.

Note as of this writing, the 4.9 branch has the original version of the
p8vector-ldst.c (and no restriction on 32-bit), since the -mupper-regs patches
are not back ported to GCC 4.9.  If the back port of the patches for upper regs
for 4.9 that I have in a branch are applied to the official FSF 4.9 branch,
then the new version of p8vector-ldst.c will be installed.

Reply via email to