On 10/06/14 09:53, Kyrill Tkachov wrote:
Hi all,
On some of the saturating math expanders we need to perform a lane flip
on big-endian when expanding to RTL so that we keep consistent with
GCCs' view of lane numbering.
During assembly emission the pattern will perform another lane flip to
translate from GCCs' numbering to the architectural lane number.

To do this a few of the patterns were renamed to *_internal and given an
expander that will perform that first lane flip while the existing
expanders get a lane flip added to them.

The tests for these patterns will come soon in a separate patch.

With this patch, when the user uses something like vqdmlal_laneq_s16 (a,
b, c, 0) from arm_neon.h in big endian the resulting instruction will
access lane 0 of c now, whereas before it would access lane 7.

Tested and bootstrapped aarch64-none-linux-gnu and aarch64_be-none-elf.

I should clarify that on aarch64_be-none-elf it was just tested, not bootstrapped ;)

Kyrill


Ok for trunk?

Thanks,
Kyrill

2014-06-10  Kyrylo Tkachov  <kyrylo.tkac...@arm.com>

      * config/aarch64/aarch64-simd.md (aarch64_sqdmulh_lane<mode>):
      New expander.
      (aarch64_sqrdmulh_lane<mode>): Likewise.
      (aarch64_sq<r>dmulh_lane<mode>): Rename to...
      (aarch64_sq<r>dmulh_lane<mode>_interna): ...this.
      (aarch64_sqdmulh_laneq<mode>): New expander.
      (aarch64_sqrdmulh_laneq<mode>): Likewise.
      (aarch64_sq<r>dmulh_laneq<mode>): Rename to...
      (aarch64_sq<r>dmulh_laneq<mode>_internal): ...this.
      (aarch64_sqdmulh_lane<mode>): New expander.
      (aarch64_sqrdmulh_lane<mode>): Likewise.
      (aarch64_sq<r>dmulh_lane<mode>): Rename to...
      (aarch64_sq<r>dmulh_lane<mode>_internal): ...this.
      (aarch64_sqdmlal_lane<mode>): Add lane flip for big-endian.
      (aarch64_sqdmlal_laneq<mode>): Likewise.
      (aarch64_sqdmlsl_lane<mode>): Likewise.
      (aarch64_sqdmlsl_laneq<mode>): Likewise.
      (aarch64_sqdmlal2_lane<mode>): Likewise.
      (aarch64_sqdmlal2_laneq<mode>): Likewise.
      (aarch64_sqdmlsl2_lane<mode>): Likewise.
      (aarch64_sqdmlsl2_laneq<mode>): Likewise.
      (aarch64_sqdmull_lane<mode>): Likewise.
      (aarch64_sqdmull_laneq<mode>): Likewise.
      (aarch64_sqdmull2_lane<mode>): Likewise.
      (aarch64_sqdmull2_laneq<mode>): Likewise.


Reply via email to