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]

[PATCH, rs6000] (0/3) Patch set to fix multiply even/odd problem and associated fallout for little endian


This set of patches addresses the problem with vector multiply even/odd
instructions in little endian mode that I incorrectly attempted to
address as part of expand_mult_highpart.  (Thanks to Richard Sandiford
for setting me on the right path.)

The first patch fixes the root problem wherein the "even" multiply
instructions actually process odd elements in little endian mode, and
vice versa.  However, fixing this problem exposed several other issues,
necessitating the other two patches.

The second patch addresses the vector widening multiply high/low
operations by swapping the input operands of the merge high and merge
low instructions.  Those operands are multiply-even and multiply-odd
instructions, which now have reversed meanings, so swapping the operands
gets us back to correct behavior.

The third patch addresses two other multiplication expansions:  mulv4si3
and mulv8hi3.  The first needs an exception to the rule of swapping the
even and odd multiply instructions, and the second again needs to swap
inputs to the merge high and merge low instructions.

The net effect of these three patches is to fix one failing test case,
without any regressions for either endianness.


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